Service Fabric中来宾可执行文件的升级速度缓慢

时间:2017-09-29 14:37:31

标签: azure-service-fabric guest-executable

我有来宾可执行文件(真正的.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

感谢任何修复慢速升级的建议。

2 个答案:

答案 0 :(得分:0)

确实存在升级可能比初始部署花费更长时间的情况。这种情况正在发生,因为SF应用了一个非常强大的工作流程,以确保在特定升级域上进行更新后一切正常。它根据健康策略执行许多运行状况检查,并且这些检查在为群集定义的特定时间间隔内发生。以下是一些定义升级行为的参数:

  • <强> HealthCheckWaitDurationSec 在Service Fabric评估应用程序运行状况之前,升级域上的升级完成后等待的时间(以秒为单位)

  • <强> HealthCheckStableDurationSec 在移至下一个升级域或完成升级之前,验证应用程序是否稳定的持续时间(以秒为单位)。

  • <强> UpgradeHealthCheckInterval 检查健康状况的频率。

......等等。无状态和有状态服务的升级方式也有所不同,这由 UpgradeReplicaSetCheckTimeout 参数决定。查看Application upgrade parametersService 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>