C# 独立git回购中的服务结构项目

C# 独立git回购中的服务结构项目,c#,azure,microservices,azure-service-fabric,C#,Azure,Microservices,Azure Service Fabric,遵循一个普通的微服务框架,我们希望将每个微服务放在它自己的git repo中,然后为ServiceFabric项目创建一个存储库。当我们更新一个微服务时,我们的想法是服务结构项目将重新部署该服务 有没有像这样拆分ServiceFabric项目的例子?我注意到在他们的所有示例中,所有内容都在一个解决方案/存储库中。在我们的项目中,我们遵循类似于此的模式,但没有那么细粒度。每个SF应用程序都包含在它自己的repo中,但我们在一个应用程序中会有多个特定的微服务。我们将应用程序划分为与最终应用程序相关的

遵循一个普通的微服务框架,我们希望将每个微服务放在它自己的git repo中,然后为ServiceFabric项目创建一个存储库。当我们更新一个微服务时,我们的想法是服务结构项目将重新部署该服务


有没有像这样拆分ServiceFabric项目的例子?我注意到在他们的所有示例中,所有内容都在一个解决方案/存储库中。

在我们的项目中,我们遵循类似于此的模式,但没有那么细粒度。每个SF应用程序都包含在它自己的repo中,但我们在一个应用程序中会有多个特定的微服务。我们将应用程序划分为与最终应用程序相关的特定功能(数据层、中间层、表示、分析等)。升级时,我们将一次升级特定的应用程序,而不一定升级特定的服务。升级特定服务是一个巨大的pita-ops-wise。我们仍然有一个共享接口项目,我们使用SF远程处理在不同的应用程序之间进行通信,我们能够做到这一点,因为我们在自己的repo中管理容器和接口,然后通过私有nuget服务器分发。这使得工作流方面的工作变得困难,但最终还是很好的,因为它使我们能够保持对应用程序之间接口兼容性的认识。我们还有一些核心的微服务,每个应用程序都会有这些服务,我们可以使用它们来分发。它还很年轻,有一些锋利的边缘,但它太棒了

tl;dr:找出在管理代码和单个服务发布方面最适合您的开发团队的方法。用于仅升级Service Fabric应用程序中的更改。最小的回购大小应该是一个VisualStudio解决方案中包含的一个Service Fabric应用程序

较长版本: 完全可以将Service Fabric应用程序拆分为多个应用程序,最小的应用程序是针对您拥有的每个微服务的一个Service Fabric应用程序。这是否是一个好主意完全取决于您试图构建的应用程序的类型。服务之间是否存在依赖关系?如何对服务进行分区?如果希望在协调的maner中进行分区,可能会出现什么情况?您计划如何监控您的服务?如果您不想在一个协调的maner中这样做,那么在同一个应用程序中有更多的服务也是有意义的

将代码拆分为比VisualStudio解决方案更小的回购协议可能只会给您带来麻烦。从技术上讲,您可以在某种程度上使用Git子模块或子树,但Visual Studio在解决方案中处理项目引用的方式很可能会让您很快陷入合并地狱

在升级Service Fabric应用程序时,实际上有一种方法可以根据服务清单中的版本号只升级应用程序中已更改的服务。这称为diff包,可用于将应用程序部署到至少部署过一次(即,它是升级,而不是安装)的集群。如果您只升级了应用程序中的少数服务,这可能会极大地影响部署的升级时间。 . 还有一个描述它的例子

我要说的是,在发展过程中,你的选择也是不同收益之间的权衡

将服务拆分为包含较少服务的更细粒度的应用程序可以使升级更容易(但在某种程度上,这种效果也可以通过使用diff包来实现)。这种方法的缺点是,您必须将依赖项作为服务之间的严格接口来管理。一种方法是将您的服务/参与者接口发布到私有NuGet提要。这反过来又在开发管道中引入了一些额外的复杂性


将所有内容保持在相同的repo、相同的Visual Studio解决方案、相同的Service Fabric应用程序中可能适用于较小的解决方案,但从长远来看,如果您的解决方案在合并、版本控制和发布方面有所增长,则可能很难使用这些应用程序。

您不必将Service Fabric服务视为微服务

代码/服务/应用程序等的服务结构分类为您提供了很高的灵活性,使您可以根据自己的需要进行组合(如前所述)。考虑这样一个事实,即您可以在一个服务中运行更多的代码包,并试图将其转换为微服务定义,只会使事情变得更难应付。 由于SF应用程序是您的部署单元(无论is是否包含一个或多个更新的服务),您应该努力构建您的repo/solution/SF应用程序设置,以便能够包含对一个SF应用程序的大多数更改(=一个解决方案和一个repo)


如果您经常需要部署多个SF应用程序来进行更改,那么您的工作效率将很低。

阅读您的问题,您的存储库拆分似乎主要是为了部署问题,因此我将重点关注这一方面

我们为每个服务结构应用程序(包含多个服务)使用一个Git存储库,这有助于简化连续集成和连续部署的方式:如果repo(代码或配置)发生更改,则需要构建和部署SF应用程序

如果您正在使用VSTS online的构建和发布功能,则可以轻松利用Service Fabric可用的构建任务来支持差异升级。使用“Update Service Fabric App Versions”任务(),使用带有“deterministic compiler flag”(确定性编译器标志)的“仅在更改时更新”选项(),以确保在代码相同时二进制文件始终相同,您很容易得到每个SF应用程序的差异升级