我有来宾可执行文件(真正的.net核心1.1控制台应用程序),第一次部署只需几分钟。升级部署需要12分钟以上。 5节点集群上有3个服务实例。 SF适用于开发人员,没有工作负载。
来宾可执行文件是start.cmd
<EntryPoint>
<ExeHost>
<Program>start.cmd</Program>
<Arguments />
<WorkingFolder>CodePackage</WorkingFolder>
</ExeHost>
</EntryPoint>
Start.cmd非常简单
start /b /wait "SomeWebAPI" "C:\Program Files\dotnet\dotnet.exe" SomeWebAPI.dll
感谢任何修复慢速升级的建议。
答案 0 :(得分:0)
确实存在升级可能比初始部署花费更长时间的情况。这种情况正在发生,因为SF应用了一个非常强大的工作流程,以确保在特定升级域上进行更新后一切正常。它根据健康策略执行许多运行状况检查,并且这些检查在为群集定义的特定时间间隔内发生。以下是一些定义升级行为的参数:
<强> HealthCheckWaitDurationSec 强> 在Service Fabric评估应用程序运行状况之前,升级域上的升级完成后等待的时间(以秒为单位)
<强> HealthCheckStableDurationSec 强> 在移至下一个升级域或完成升级之前,验证应用程序是否稳定的持续时间(以秒为单位)。
<强> UpgradeHealthCheckInterval 强> 检查健康状况的频率。
......等等。无状态和有状态服务的升级方式也有所不同,这由 UpgradeReplicaSetCheckTimeout 参数决定。查看Application upgrade parameters和Service Fabric application upgrade了解详情。
答案 1 :(得分:0)
看起来SF不喜欢从cmd启动的应用程序作为另一个进程。
我找到了解决问题的方法。升级部署时间从12分钟降至4分钟。主要是你需要直接从你的SF运行可执行文件。以下是使用.Net Core 1.1实现它的步骤。
将以下部分添加到项目文件(Build .NET Core console application to output an EXE?)
中将其编译为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>