Azure service fabric 服务结构中来宾可执行文件的缓慢升级部署
我有来宾可执行文件(real.NETCore1.1控制台应用程序),第一次部署只需几分钟。升级部署需要12分钟以上的时间。5节点群集上有3个服务实例。SF面向开发人员,没有工作负载 来宾可执行文件是start.cmdAzure service fabric 服务结构中来宾可执行文件的缓慢升级部署,azure-service-fabric,guest-executable,Azure Service Fabric,Guest Executable,我有来宾可执行文件(real.NETCore1.1控制台应用程序),第一次部署只需几分钟。升级部署需要12分钟以上的时间。5节点群集上有3个服务实例。SF面向开发人员,没有工作负载 来宾可执行文件是start.cmd <EntryPoint> <ExeHost> <Program>start.cmd</Program> <Arguments /> <WorkingFolder
<EntryPoint>
<ExeHost>
<Program>start.cmd</Program>
<Arguments />
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
非常感谢任何修复缓慢升级的建议。确实,在某些情况下,升级可能需要比初始部署更长的时间。这是因为SF应用了一个非常强大的工作流,以确保在特定升级域上进行更新后一切正常。它根据运行状况策略执行许多运行状况检查,这些检查在为集群定义的特定时间间隔内进行。以下是定义升级行为的一些参数:
- HealthCheckWaitDurationSec 在升级域上完成升级后,在服务结构评估应用程序的运行状况之前等待的时间(秒)
- HealthCheckStableDurationSec 在移动到下一个升级域或完成升级之前,验证应用程序是否稳定的持续时间(秒)
- 升级HealthCheckInterval 检查运行状况的频率
……等等。无状态和状态完整服务的升级方式也有所不同,这是由UpgradeReplicaSetCheckTimeout参数决定的。查看并了解更多详细信息。看起来SF不喜欢将cmd启动的应用程序作为另一个进程 我已经找到了解决问题的办法。升级部署时间从12分钟减少到4分钟。主要需要直接从SF运行可执行文件。下面是使用.NETCore1.1实现它的步骤
- 通过将以下部分添加到项目文件()中,将其编译为EXE
- 将入口点设置为可执行文件
<EntryPoint> <ExeHost> <Program>SomeWebAPI.exe</Program> <Arguments /> <WorkingFolder>CodePackage</WorkingFolder> </ExeHost> </EntryPoint>
SomeWebAPI.exe 代码包
<PropertyGroup>
<RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
</PropertyGroup>
dotnet publish -c Release -r win10-x64
<EntryPoint>
<ExeHost>
<Program>SomeWebAPI.exe</Program>
<Arguments />
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>