Azure service fabric 服务结构中来宾可执行文件的缓慢升级部署

Azure 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

我有来宾可执行文件(real.NETCore1.1控制台应用程序),第一次部署只需几分钟。升级部署需要12分钟以上的时间。5节点群集上有3个服务实例。SF面向开发人员,没有工作负载

来宾可执行文件是start.cmd

<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>