对于本地和云两种环境,我如何为资源(如Sql数据库,存储帐户等)设置自定义设置或参数...理想情况下,它将是代码中调用的一个参数名称,将DbContext指向特定的数据库,在本地或云环境的配置中是不同的.谢谢.
我正在用我的晚上评估Azure Service Fabric作为我们当前的WebApps/CloudServices堆栈的替代品,并且对于如何决定何时服务/演员与州应该是有状态的演员以及何时他们应该是无国籍演员感到有点不确定外部持久化状态(Azure SQL,Azure存储和DocumentDB).我知道这是一个相当新的产品(至少对普通大众而言),所以可能还没有很多关于这方面的最佳实践,但我已经阅读了微软提供的大部分文档而没有找到明确的回答这个问题.
我正在接近的当前问题领域是我们的活动商店; 我们的部分应用程序基于事件源和CQRS,我正在评估如何将此事件存储移动到Service Fabric平台.事件存储将包含很多时间序列 - 数据,因为它是我们持久保存数据的唯一真实来源,它必须是一致的,复制的并存储到某种形式的持久存储中.
我考虑过这样做的一种方法是使用有状态的"EventStream"actor; 使用事件源的聚合的每个实例将其事件存储在隔离的流中.这意味着有状态的actor可以跟踪自己的流的所有事件,并且我已经满足了我对数据存储方式的要求(事务性,复制性和持久性).但是,有些流可能会变得非常大(数十万甚至数百万的事件),而这正是我开始不确定的地方.我想,拥有一个具有大量状态的actor会对这些大型数据模型需要从磁盘序列化或反序列化时对系统性能产生影响.
另一种选择是让这些演员无国籍,让他们只是从Azure SQL等外部存储中读取他们的数据 - 或者只使用无状态服务而不是演员.
基本上,当演员/服务的状态量"太多"时,你应该开始考虑其他处理状态的方法吗?
此外,Service Fabric Actors设计模式中的这一部分:一些反模式文档让我有点困惑:
将Azure Service Fabric Actors视为事务系统.Azure Service Fabric Actors不是基于提交ACID的两阶段提交系统.如果我们不实现可选的持久性,并且actor在die上运行,那么它的当前状态将随之而来.演员将非常快地进入另一个节点,但除非我们实现了支持持久性,否则状态将会消失.但是,在利用重试,重复过滤和/或幂等设计之间,您可以实现高水平的可靠性和一致性.
"如果我们不实施可选的持久性",这里指出了什么?我的印象是,只要您的事务修改状态成功,您的数据就会持久存储到持久存储并复制到至少一部分副本.这一段让我想知道是否存在我的演员/服务中的状态会丢失的情况,如果这是我需要处理的事情.我从文档其他部分的状态模型得到的印象似乎抵消了这种说法.
我曾经在Kubernetes工作并且目前正在阅读有关Service Fabric的信息,我知道Service Fabric提供微服务框架模型,如有状态,无状态和演员,但除此之外,它还提供GuestExecutables
或者Containers
也是Kubernetes也管理/编排容器.谁能解释两者之间的细微差别?
任何人都可以指导我解释何时应该创建Azure Service Fabric应用程序与Azure App Service应用程序?我有一个我想要构建的应用程序但无法确定是否应该使用Azure Service Fabric或Azure App Service构建它.
在观看了Azure Service Fabric的BUILD会议视频后,我想象一下这对于我们当前基于微服务的架构是否合适.有一件事我不太确定我将如何解决,但是 - API网关/代理.
考虑一个不那么简单的微服务架构,其中您在Azure Service Fabric中运行N个服务,从而暴露REST端点.在许多情况下,您希望将这些分散的API端点打包到单条目API中供消费者使用,以避免它们直接连接到服务结构实例.Azure Service Fabric解决方案在各方面都看起来如此完整,我有点想知道当我在BUILD会谈期间提到的功能中没有看到一种简单解决这个问题的方法时我是否错过了一些明显的东西.
像Vulcan这样的服务旨在通过让服务在etcd中注册他们想要路由到它们的路径来解决这个问题.我猜测解决这个问题的一种方法可能是创建一个单独的有状态Web服务,其他服务可以自己注册,提供服务名称和路由到它们的路径.然后,有状态Web服务可以根据其状态将流量路由到正确的实例.但是,这似乎并不完全理想,例如删除应用程序时删除路由,以及通常使状态与群集中部署的服务保持同步.有没有人对此提出任何想法,或者有任何想法如何在Azure Service Fabric中解决这个问题?
我是Azure Service Fabric的新手,也是我遇到的最大问题
所有服务结构示例都描述了单解决方案服务结构示例.这似乎与微服务的理念背道而驰,在这种理念中,您需要在服务之间实现完全依赖性隔离.虽然您可以手动遵循此模式,但更常见的做法是通过将每个服务作为自己的存储库和解决方案/项目来实施它.
如何使用多个解决方案(在多个Git存储库中)管理和部署服务结构服务并实施服务合同(ServiceInferfaces)?
例如
Service Fabric Solution
App1 - Customers
- Service1 [Carts] From Other Solution
- Service2 [LocationInfo]From Other Solution
- Service3 [REST WebAPI for Admin] From Other Solution
App2 - Products
- Service4 [Status]From Other Solution
- Service5 [Firmware]From Other Solution
- Service6 [Event Stream] From Other Solution
External Solution
- Service1
External Solution
- Service2
External Solution
- Service3
External Solution
- Service4
External Solution
- Service5
External Solution
- Service6
Run Code Online (Sandbox Code Playgroud)
1)作为开发人员,我想查看并构建所有当前版本的应用程序/服务.我想启动管理所有清单的Service Fabric项目,并将其部署到我的本地开发群集.我想在解决方案之间强制执行相同的服务接口.我不明白你是怎么做的,因为应用程序是服务的外部.
2)作为DevOps团队,我希望自动化下拉应用程序,构建它们并部署到Azure. …
我的想法是人们使用Docker来确保本地环境与生产相同,并且他们可以停止考虑他们的应用程序在物理上运行的位置,并且平衡机制应该只在那个时刻在最佳位置分配应用程序.
我是100%基于Web的,我将与我们的数据库一起迁移到云,并且无法移动的内容将无缝桥接,因此企业的东西和云将成为一个子网.
所以我想知道,也许Service Fabric已经做了与Docker相同的事情,加上它提供了地址转换服务(fabric://对于结构空间中的进程有点像DNS)加上(对一些人很重要)鼓励按需工作人员分配 - 巨大的可扩展性特权.
我目前正在开发一个服务结构应用程序,它将公开将由另一个应用程序使用的soap监听器
我一直在说错误
找不到与绑定CustomBinding的端点的方案https匹配的基址.注册的基地址方案是[]
这是CreateServiceInstanceListener方法
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
var serviceInstanceListers = new List<ServiceInstanceListener>()
{
new ServiceInstanceListener(context =>
{
return CreateSoapListener(context);
})
,
new ServiceInstanceListener(context =>
{
return CreateSoapHTTPSListener(context);
}),
};
return serviceInstanceListers;
}
private static ICommunicationListener CreateSoapHTTPSListener(StatelessServiceContext context)
{
string host = context.NodeContext.IPAddressOrFQDN;
var endpointConfig = context.CodePackageActivationContext.GetEndpoint("SecureServiceEndpoint");
int port = endpointConfig.Port;
string scheme = endpointConfig.Protocol.ToString();
string uri = string.Format(CultureInfo.InvariantCulture, "{0}://{1}:{2}/MyService/", scheme, host, port);
var listener = new WcfCommunicationListener<IServiceInterface>(
serviceContext: context,
wcfServiceObject: new Service(),
listenerBinding: new BasicHttpsBinding(BasicHttpsSecurityMode.Transport),
address: new EndpointAddress(uri) …
Run Code Online (Sandbox Code Playgroud)