繁体   English   中英

使用Azure Service Fabric构建微服务的权衡和最佳实践

[英]Trade offs and best practices building microservices with Azure Service Fabric

我想构建一个基于Azure Service Fabric的微服务应用程序。 对于某些有状态的服务或演员,我想通过web api从外部访问该州。

有关以下内容的此类Service Fabric项目的一般权衡和最佳实践是什么?

  1. 在单个应用程序中使用一对多服务? 因此,如果我为每个应用程序使用一个服务,我将为我的项目提供多个应用程序。 每个应用程序使用一个服务何时有用?

  2. 在单个服务中使用一个与多个角色? 每个服务有多个actor的时候有用吗?

  3. 为整个项目使用一个无状态Web api服务,为每个有状态服务或每个应用程序使用多个无状态Web服务?

我知道这些决定是基于具体项目的。 但也许上述三点有一般优点和缺点。

Simon Houlton在他的回答中很好地解决了微服务的权衡问题,所以这里有一些专门针对您的Service Fabric问题的答案:

  1. 应用程序是服务的分组构造。 理论上,通过协同工作来生成一组内聚功能或实现单个业务目标的服务通常会分组到一个应用程序中。 在实践中:

    • 升级适用于应用程序级别。 通常需要一起升级的服务应该在同一个应用程序中。 但您仍然可以单独升级应用程序中的服务。
    • 在应用程序级别汇总运行状况,以便您获得应用程序中服务的全面运行状况概述。
    • Visual Studio工具使得使用具有多个服务的应用程序变得非常容易。
  2. 通常,服务是一个actor 类型的多个实例的主机。 换句话说,您通常将一个actor 类型映射到一个服务类型。 然后,您可以在服务中实例化该actor类型的多个实例。

  3. 取决于你真正想要的东西。 什么是无国籍服务? 如果您的用户需要一个入口点,那么您应该为整个项目安装一个无状态Web api。 这是非常标准的。 也许你有第二个无状态服务,只是为管理员或其他东西监听不同的端口。 如果您为每个有状态服务都有无状态Web api服务,那么您必须担心将用户路由到正确的无状态服务。

因为它们不一定是相互排斥的,所以对不同的选项进行权衡是一个棘手的问题,但是这里有一点你提到的一点,但我知道这不一定是你的Service Fabric问题,但是我我希望它仍然有用。

从代码的角度来看,微服务环境非常棒,它使开发人员生活更轻松。 通过将功能集中到一个服务,这意味着他们可以专注于问题而不必考虑不必要的依赖性。 例如,如果您要将所有方法分组到一个项目中,并且必须更改界面,则可以决定创建新的终点。 在这个例子中,你可能不得不考虑那些没有改变的方法的消费者,我们是想强迫它们提升还是我们很高兴他们指向以前的版本,但当然你支持多个版本。

最大的问题是微服务培养孤立的知识,并采取一种服务的开发者不需要知道消费者是谁或者什么消费的方法,这意味着你无法回答什么往往是一个非常重要的问题谁或什么正在消耗这项服务,我们是否需要强迫它们提升到一个新的终点。 实际上,这可能会使您的Web服务器陷入一些混乱,旧的服务无需敲门。

独立于您的解决方案,我总是尝试将您的逻辑分组,并在同一个项目中放置类似的方法。 我认为你必须接受你在没有完全了解解决方案将来如何发展的情况下做出决定,因此你可能不得不改变现状。

另一个考虑因素是需求管理和并行开发。 使用微服务,您可能比单一服务更容易管理业务需求。 假设您有10个要求,并要求在下个月交付5个,而在下个月交付5个。 比如说前5个需求集中在业务逻辑a和业务逻辑b中的下一个需求,如果你有两个开发人员,你可以让他们并行处理这个需求,而不必分支和合并。 这显然是一个很好的例子来说明这一点,但是如果它们分散在不同的服务上是一个相对容易的对话,因为很容易对业务逻辑说明你的业务逻辑A需要更改。

有状态的网络服务可能很难快速测试,不可否认你可以绕过这个,但我总是喜欢能够提出服务请求并得到回复,如果我必须做好准备它会减慢我的速度,这在诊断现场时会令人沮丧的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM