me-*_*e-- 5 deployment azure-service-fabric
我正在开发部署到 Azure 的 Service Fabric 应用程序。它目前仅包含 5 个无状态服务。压缩档案的重量约为 200MB,这已经成为问题。
通过检查存档的内容,我可以看到主要问题是所有服务都需要许多文件。因此,每个服务的文件夹中都存在这些文件的完全副本。但是,zip 压缩格式对于存档中的重复文件并没有做任何聪明的事情。
作为一项实验,我编写了一个小脚本来查找部署中的所有重复文件,并删除每个文件中除一个之外的所有文件。然后我尝试对结果进行压缩,结果得到了更实用的 38MB。
我还注意到系统库是捆绑的,包括:
这些都是大文件,所以我很想知道是否有办法只将它们捆绑一次。我试过完全删除它们,但 Service Fabric 无法启动应用程序。
任何人都可以就我如何大幅减少部署包的大小提供任何建议吗?
注意:我已经阅读了有关压缩包的文档,但我很困惑为什么他们的压缩方法会有所帮助。确实,我试过了,但没有。他们所做的只是将主 zip 中的每个子文件夹压缩,但不涉及文件重复数据删除。
小智 5
有一种方法可以减小包的大小,但我会说这不是一个好方法或应该做的事情,但我仍然认为它在某些情况下有用。
请注意:此方法要求目标机器安装所有先决条件(包括 .NET Core Runtime 等)
构建 .NET Core 应用程序时,有两种部署模型:独立的和依赖于框架的。
在自包含模式下,所有必需的框架二进制文件都与应用程序二进制文件一起发布,而在依赖于框架的模式中,仅发布应用程序二进制文件。
默认情况下,如果项目运行时指定:<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
在.csproj
随后发布操作是独立的-这就是为什么所有的服务都复制所有的东西。
为了关闭它,您可以简单地将 SelfContained=false 属性添加到您拥有的每个服务项目中。
以下是新的 .NET Core 无状态服务项目的示例:
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<IsServiceFabricServiceProject>True</IsServiceFabricServiceProject>
<ServerGarbageCollection>True</ServerGarbageCollection>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
<TargetLatestRuntimePatch>False</TargetLatestRuntimePatch>
<SelfContained>false</SelfContained>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我做了一个小测试并创建了包含五个服务的新 Service Fabric 应用程序。Debug 中未压缩的包大小约为 500 MB。在我修改了所有项目后,包大小下降到 ~30MB。
部署的应用程序在本地集群上运行良好,因此它证明了这个概念是减少包大小的有效方法。
最后,我将再次强调警告:
请注意:此方法要求目标机器安装所有先决条件(包括 .NET Core Runtime 等)
小智 0
您通常不想知道哪个节点运行哪个服务,并且希望彼此独立地部署服务版本,因此在其他独立服务之间共享二进制文件会产生非常不自然的运行时依赖关系。我建议不要这样做,当然除了像 AspNet 和 DotNet 这样的平台二进制文件。
但是,您是否阅读过有关创建差异包的内容?https://learn.microsoft.com/en-us/azure/service-fabric/service-fabric-application-upgrade-advanced#upgrade-with-a-diff-package这将减少初始升级包的大小200MB 命中。
归档时间: |
|
查看次数: |
641 次 |
最近记录: |