Azure Service Fabric 中的应用程序设计
Design of Application in Azure Service Fabric
我需要帮助来考虑如何设计我们的应用程序以适应新的 Azure Service Fabric 模板。
今天我们有一个基于 Azure 云服务构建的应用程序。该应用程序是围绕 DDD 构建的,我们为应用程序的不同子系统部分提供了单独的限界上下文。如今,限界上下文托管在一个工作者角色中,该角色使用单个 WebAPI.
公开这些子系统
此外,我们还有一个 Web 角色托管 Web 前端和一个 Worker 角色处理后台队列。
我们努力转向微服务架构。我计划做的第一件事是将所有限界上下文提取到它们自己的 API-hosts 中。这将导致 5-10 个新的 WebAPI 服务支持我们的子系统。
我的问题是,所有这些 subsystem/bounded context/API-hosts 应该是它们自己的 Service Fabric 应用程序还是单个 Service Fabric 应用程序中的服务?
我一遍又一遍地阅读了此处 Service Fabric Application Model 的文档,但我无法弄清楚我的服务适用于何处。
我们希望系统支持不同版本的服务,并且服务也应该可以根据不同的规模进行扩展。甚至可能需要在更大的 VM 大小中为 运行 提供一项微服务。
请有人指导我适合我的需要。
我认为您的想法是正确的,一般来说,每个限界上下文都是一个(微)服务。 Service Fabric 为您提供应用程序和服务的两个级别的组织,其中应用程序是服务的逻辑分组。这对你意味着什么:
从逻辑上讲,将应用程序视为一组内聚的功能。共同构成该内聚功能集的服务应归类为应用程序。您可以问问自己,对于每项服务:"does it make sense to deploy this service by itself without these other services?" 如果答案是否定的,那么它们可能应该分组在同一个应用程序中。
从开发的角度来说,Visual Studio 工具更适合一个应用程序中的多个服务,但您也可以在一个解决方案中包含多个应用程序。
从操作上讲,一个应用程序代表一个进程边界、升级组和版本控制组:
- 您创建的应用程序的每个实例都有自己的进程(如果应用程序中有多种服务类型,则为一组进程)。服务类型的服务实例共享主机进程。不同服务类型的服务实例按类型获得自己的进程。
- 应用是最顶级的升级单元,即你的每一次升级都是一次应用升级。您可以升级应用程序中的个别服务(您不必总是升级应用程序中的每项服务),但每次升级时,应用程序版本都会更改。
- 您可以在集群中创建同一应用程序类型的不同版本的并排实例。您不能在应用程序实例中创建相同服务类型的不同版本的并排实例。
放置和缩放在服务中完成。因此,例如,您可以在应用程序中扩展一项服务,并且可以将另一项服务放置在更大的 VM 上。
我需要帮助来考虑如何设计我们的应用程序以适应新的 Azure Service Fabric 模板。
今天我们有一个基于 Azure 云服务构建的应用程序。该应用程序是围绕 DDD 构建的,我们为应用程序的不同子系统部分提供了单独的限界上下文。如今,限界上下文托管在一个工作者角色中,该角色使用单个 WebAPI.
公开这些子系统此外,我们还有一个 Web 角色托管 Web 前端和一个 Worker 角色处理后台队列。
我们努力转向微服务架构。我计划做的第一件事是将所有限界上下文提取到它们自己的 API-hosts 中。这将导致 5-10 个新的 WebAPI 服务支持我们的子系统。
我的问题是,所有这些 subsystem/bounded context/API-hosts 应该是它们自己的 Service Fabric 应用程序还是单个 Service Fabric 应用程序中的服务?
我一遍又一遍地阅读了此处 Service Fabric Application Model 的文档,但我无法弄清楚我的服务适用于何处。
我们希望系统支持不同版本的服务,并且服务也应该可以根据不同的规模进行扩展。甚至可能需要在更大的 VM 大小中为 运行 提供一项微服务。
请有人指导我适合我的需要。
我认为您的想法是正确的,一般来说,每个限界上下文都是一个(微)服务。 Service Fabric 为您提供应用程序和服务的两个级别的组织,其中应用程序是服务的逻辑分组。这对你意味着什么:
从逻辑上讲,将应用程序视为一组内聚的功能。共同构成该内聚功能集的服务应归类为应用程序。您可以问问自己,对于每项服务:"does it make sense to deploy this service by itself without these other services?" 如果答案是否定的,那么它们可能应该分组在同一个应用程序中。
从开发的角度来说,Visual Studio 工具更适合一个应用程序中的多个服务,但您也可以在一个解决方案中包含多个应用程序。
从操作上讲,一个应用程序代表一个进程边界、升级组和版本控制组:
- 您创建的应用程序的每个实例都有自己的进程(如果应用程序中有多种服务类型,则为一组进程)。服务类型的服务实例共享主机进程。不同服务类型的服务实例按类型获得自己的进程。
- 应用是最顶级的升级单元,即你的每一次升级都是一次应用升级。您可以升级应用程序中的个别服务(您不必总是升级应用程序中的每项服务),但每次升级时,应用程序版本都会更改。
- 您可以在集群中创建同一应用程序类型的不同版本的并排实例。您不能在应用程序实例中创建相同服务类型的不同版本的并排实例。
放置和缩放在服务中完成。因此,例如,您可以在应用程序中扩展一项服务,并且可以将另一项服务放置在更大的 VM 上。