【问题标题】:Design of Application in Azure Service FabricAzure Service Fabric 中的应用程序设计
【发布时间】:2016-09-30 18:16:32
【问题描述】:

我需要帮助来考虑如何设计我们的应用程序以适应新的 Azure Service Fabric 模板。

今天我们有一个基于 Azure 云服务构建的应用程序。该应用程序是围绕 DDD 构建的,我们为应用程序的不同子系统部分提供了单独的有界上下文。如今,有界上下文托管在一个工作角色中,该角色使用单个 WebAPI 公开这些子系统。

此外,我们还有一个 Web 角色托管 Web 前端,一个工作角色处理后台队列。

我们努力转向微服务架构。我计划做的第一件事是将所有有界上下文提取到它们自己的 API 主机中。这将导致 5-10 个新的 WebAPI 服务支持我们的子系统。

对于我的问题,所有这些子系统/有界上下文/API 主机应该是它们自己的 Service Fabric 应用程序还是单个 Service Fabric 应用程序中的服务?

我一遍又一遍地阅读文档,在此处找到 Service Fabric Application Model,但我无法弄清楚我的服务适合哪里。

我们希望系统能够支持不同版本的服务,并且服务也应该能够以不同的方式扩展。甚至可能需要让一个微服务在比其他服务更大的 VM 中运行。

请有人指导我适合我的需要。

【问题讨论】:

  • 如果你想独立升级部分,它们应该都是应用程序。至于如何构建您的应用程序,这实际上取决于您的个人需求。确保设置分区方案以应对未来的增长。使用 SF,您可以将所有分区放在少数机器上,然后随着您的增长将它们分散开来,而不是在以后添加更多分区。

标签: azure architecture asp.net-web-api2 azure-service-fabric


【解决方案1】:

我认为你有一个正确的想法,一般来说,每个有界上下文都是一个(微)服务。 Service Fabric 为您提供了两个级别的应用程序和服务组织,其中应用程序是服务的逻辑分组。这对你来说意味着什么:

从逻辑上讲,将应用程序视为一组内聚的功能。共同构成该组内聚功能的服务应归为一个应用程序。对于每项服务,您可以问自己:“在没有这些其他服务的情况下自行部署该服务是否有意义?”如果答案是否定的,那么它们可能应该被分组到同一个应用程序中。

从开发上讲,Visual Studio 工具更倾向于在一个应用程序中提供多个服务,但您也可以在一个解决方案中拥有多个应用程序。

从操作上讲,一个应用程序代表一个进程边界、升级组和版本控制组:

  • 您创建的应用程序的每个实例都有自己的进程(如果应用程序中有多种服务类型,则有一组进程)。服务类型的服务实例共享主机进程。不同服务类型的服务实例对每种类型都有自己的进程。
  • 应用是最顶层的升级单元,也就是说,你所做的每一次升级都是一次应用升级。您可以升级应用程序中的单个服务(您不必总是升级应用程序中的每个服务),但每次升级时,应用程序版本都会更改。
  • 您可以在集群中创建同一应用程序类型的不同版本的并行实例。您不能在应用程序实例中创建同一服务类型的不同版本的并行实例。

放置和缩放是在服务中完成的。例如,您可以在应用程序中扩展一项服务,并且可以将另一项服务放置在更大的虚拟机上。

【讨论】:

  • 感谢您的详细解答!帮了我很多:-)
  • 如果我们使用单独的应用程序,但每个服务都需要与其他应用程序中的服务通信,那么最好的方式是什么(上下文:开发和测试)? Kuberenetes 为 AKS 提供了 Azure Dev Space 选项,以使这种微服务开发方案具有内循环迭代。任何有关服务结构的指导都会非常有帮助,
猜你喜欢
  • 2018-02-22
  • 2019-05-10
  • 2016-03-21
  • 2016-09-11
  • 1970-01-01
  • 2017-07-03
  • 2019-02-14
  • 2015-12-24
  • 2017-04-16
相关资源
最近更新 更多