Service Fabric 中每项服务的应用程序
Application per service in Service Fabric
我正在设计我的服务结构集群。我在创建一个应用程序并在其中托管所有服务与为每个服务创建 1 个应用程序之间进行权衡。
我没有找到明确的指导方针。我看到每个服务 1 个应用程序的主要优势是我们可以独立部署每个服务,因为它有自己的应用程序。我们还可以将代码托管在不同的存储库中。这有缺点吗?
更好的方法是每组服务有一个应用程序,其中服务提供内聚功能。应用程序应该是 n 个功能相关的服务的保护伞,例如,它们可能在相同的限界上下文中或与公共操作单元相关。然而,这并不意味着它们必须一致部署/更新。
如果您不使用 DefaultServices 构造,则可以在 ApplicationType 中独立部署服务。您可以了解为什么在生产环境中应避免使用默认服务 here - 本质上它们会创建严格的部署策略,并且您会失去一些可通过 PowerShell 获得的 Service Fabric 参数化功能。
应用程序的概念似乎与微服务架构不一致,但请记住它只是一个逻辑分组,应用程序中的单个服务仍然可以独立部署。
Application Model 文档中有很多有用的信息。
The main advantage I see for 1 app per service is that we can deploy each service independently since it has its own app.
您还可以 deploy\upgrade 同一应用程序中的单个服务,而不会影响其他已部署的服务。请检查差异包装here and
We can also host the code in different repos
通常,当我们将代码拆分到单独的存储库时,是因为我们有一个域边界,我们不想与其他服务一起跟踪,例如,在这种情况下,由不同团队拥有或按不同计划部署的服务将它们作为单独的应用程序是有意义的。
Are there downsides for this?
从技术上讲,没有。但有几点可能需要注意。
当我们谈论微服务时,我们将它们视为独立的服务 运行,对其他服务的依赖尽可能少,当我们谈论应用程序时,我们有点反对这一点 'law',因为我们必须将它们部署在一起,所以我们不应该这样看待应用程序,因为应用程序只是这些服务的逻辑隔离,那么SF应用程序的好处在哪里?
当您部署了多个服务(相互依赖或不相互依赖)时,您需要一种方法将它们作为一个更大的单元进行跟踪,否则您可能会以:
- 一个充满有时不再需要的服务的集群,只是因为我们'might be using them'或有人在他们的同行过时时忘记删除。
- 新部署缺少相关服务
- 彼此不兼容的服务版本(合同、API 等)
SF 应用程序就像这些服务的快照,因此,例如,每当更新新服务时,您还升级应用程序以引用您的服务及其依赖项的新定义,这将告诉 SF "this is how I want my services running" 并且 SF 将设法完全按照您的描述获得它们。并不意味着您必须在需要升级时更新所有这些,SF 会在必要时更新,但您可以只更新更改的那些,并且它们会部署一个应用程序版本,SF 将管理每个应用程序的版本为您服务。打个比方,它就像一个 docker 组合文件,您可以在其中指定必须作为单个部署部署的容器。
鉴于此,当您选择退出应用程序概念时,您将失去这些好处,因为现在您必须自己管理每一项服务并跟踪它们所依赖的版本,并且在两个服务同时运行的情况下不同的应用程序需要一起部署(例如因为重大更改)如果其中一个失败,您将无法轻松回滚,因为它们不再相互依赖,因此您必须编写自己的逻辑来处理这个。
您可能会发现自己遇到的一个典型场景是,服务的新版本得到更新,而同一版本上未更新的其他服务可能停止工作,但对于您的部署,新服务看起来没问题,没有任何错误。
所以,最后,这只是一种权衡,您选择更灵活地部署您的服务,但最终需要更多维护。
我正在设计我的服务结构集群。我在创建一个应用程序并在其中托管所有服务与为每个服务创建 1 个应用程序之间进行权衡。 我没有找到明确的指导方针。我看到每个服务 1 个应用程序的主要优势是我们可以独立部署每个服务,因为它有自己的应用程序。我们还可以将代码托管在不同的存储库中。这有缺点吗?
更好的方法是每组服务有一个应用程序,其中服务提供内聚功能。应用程序应该是 n 个功能相关的服务的保护伞,例如,它们可能在相同的限界上下文中或与公共操作单元相关。然而,这并不意味着它们必须一致部署/更新。
如果您不使用 DefaultServices 构造,则可以在 ApplicationType 中独立部署服务。您可以了解为什么在生产环境中应避免使用默认服务 here - 本质上它们会创建严格的部署策略,并且您会失去一些可通过 PowerShell 获得的 Service Fabric 参数化功能。
应用程序的概念似乎与微服务架构不一致,但请记住它只是一个逻辑分组,应用程序中的单个服务仍然可以独立部署。
Application Model 文档中有很多有用的信息。
The main advantage I see for 1 app per service is that we can deploy each service independently since it has its own app.
您还可以 deploy\upgrade 同一应用程序中的单个服务,而不会影响其他已部署的服务。请检查差异包装here and
We can also host the code in different repos
通常,当我们将代码拆分到单独的存储库时,是因为我们有一个域边界,我们不想与其他服务一起跟踪,例如,在这种情况下,由不同团队拥有或按不同计划部署的服务将它们作为单独的应用程序是有意义的。
Are there downsides for this?
从技术上讲,没有。但有几点可能需要注意。
当我们谈论微服务时,我们将它们视为独立的服务 运行,对其他服务的依赖尽可能少,当我们谈论应用程序时,我们有点反对这一点 'law',因为我们必须将它们部署在一起,所以我们不应该这样看待应用程序,因为应用程序只是这些服务的逻辑隔离,那么SF应用程序的好处在哪里?
当您部署了多个服务(相互依赖或不相互依赖)时,您需要一种方法将它们作为一个更大的单元进行跟踪,否则您可能会以:
- 一个充满有时不再需要的服务的集群,只是因为我们'might be using them'或有人在他们的同行过时时忘记删除。
- 新部署缺少相关服务
- 彼此不兼容的服务版本(合同、API 等)
SF 应用程序就像这些服务的快照,因此,例如,每当更新新服务时,您还升级应用程序以引用您的服务及其依赖项的新定义,这将告诉 SF "this is how I want my services running" 并且 SF 将设法完全按照您的描述获得它们。并不意味着您必须在需要升级时更新所有这些,SF 会在必要时更新,但您可以只更新更改的那些,并且它们会部署一个应用程序版本,SF 将管理每个应用程序的版本为您服务。打个比方,它就像一个 docker 组合文件,您可以在其中指定必须作为单个部署部署的容器。
鉴于此,当您选择退出应用程序概念时,您将失去这些好处,因为现在您必须自己管理每一项服务并跟踪它们所依赖的版本,并且在两个服务同时运行的情况下不同的应用程序需要一起部署(例如因为重大更改)如果其中一个失败,您将无法轻松回滚,因为它们不再相互依赖,因此您必须编写自己的逻辑来处理这个。
您可能会发现自己遇到的一个典型场景是,服务的新版本得到更新,而同一版本上未更新的其他服务可能停止工作,但对于您的部署,新服务看起来没问题,没有任何错误。
所以,最后,这只是一种权衡,您选择更灵活地部署您的服务,但最终需要更多维护。