【问题标题】:How should IIS-hosted ASP.Net-based systems be deployed to Azure Service Fabric?应该如何将 IIS 托管的基于 ASP.Net 的系统部署到 Azure Service Fabric?
【发布时间】:2020-01-18 15:10:40
【问题描述】:

Azure Service Fabric 的文档提供了在 Azure Service Fabric 上部署和托管 ASP.Net Core 的大量示例。到处都找不到 IIS 托管应用的部署。

如何将 ASP.Net 站点和 WCF 服务作为来宾可执行文件部署在 Azure Service Fabric 群集上,就像将它们部署到 Azure 应用服务实例一样简单?

【问题讨论】:

    标签: c# asp.net azure azure-service-fabric guest-executable


    【解决方案1】:

    我们已经使用 Docker 成功地做到了这一点。例如,我们使用以下 docker 镜像作为基础:

    mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
    

    请注意,Microsoft 不再在 docker hub 上托管这些图像。

    这是一个相当复杂的例子。如您所见,我们从预编译的 ASP.NET 应用程序构建映像,安装一些 IIS 模块,甚至拉取压缩模块扩展的安装程序。

    FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
    
    COPY OurSite c:/OurSite
    
    # Enable IIS's Static Content, Static Content Compression and App Init modules
    # Download & Install IIS compression extension (providing Brotli)
    # Setting "staticCompressionIgnoreHitFrequency" attribute on "HttpCompression" tag in applicationHost.config (that's the only place we can set that attr)
    # Remove Default Web Site
    # Register a new site
    # Set following properties on the Application Pool:
    #   - "Start Mode" to "AlwaysRunning" to ensure w3wp process always starts
    #   - "Idle Timeout" to 0 ensuring w3wp process doesn't get terminated due to inactivity.
    # Recycle Application Pool
    RUN Enable-WindowsOptionalFeature -Online -FeatureName IIS-ApplicationInit ; \
        Enable-WindowsOptionalFeature -Online -FeatureName IIS-StaticContent ; \
        Enable-WindowsOptionalFeature -Online -FeatureName IIS-HttpCompressionStatic ; \
        Invoke-WebRequest -Uri https://download.microsoft.com/download/6/1/C/61CC0718-ED0E-4351-BC54-46495EBF5CC3/iiscompression_amd64.msi \
            -OutFile c:\iiscompression_amd64.msi ; \
        Start-Process msiexec.exe -ArgumentList '-i', 'c:\iiscompression_amd64.msi', '/quiet', '/passive' -NoNewWindow -Wait ; \
        Remove-Item c:\iiscompression_amd64.msi -Force ; \
        $ConfigSection = Get-IISConfigSection -SectionPath "system.webServer/httpCompression" ; \
        Set-IISConfigAttributeValue -ConfigElement $ConfigSection -AttributeName "staticCompressionIgnoreHitFrequency" -AttributeValue True ; \
        Remove-WebSite -Name 'Default Web Site' ; \
        New-Website -Name 'OurSite' -Port 80 -PhysicalPath 'c:\OurSite' -ApplicationPool '.NET v4.5' ; \
        Import-Module WebAdministration ; \
        Set-ItemProperty -Path 'IIS:\AppPools\.NET v4.5' -Name 'startMode' -Value 'AlwaysRunning' ; \
        Set-ItemProperty -Path 'IIS:\Sites\OurSite' -Name 'applicationDefaults.preloadEnabled' -Value 'true' ; \
        Set-ItemProperty -Path 'IIS:\AppPools\.NET v4.5' -Name 'processModel.idleTimeout' -Value '00:00:00' ; \
        Restart-WebAppPool '.NET v4.5'
    
    VOLUME c:\\data
    
    EXPOSE 80
    

    然后,我们将这些映像托管在安全的容器注册表中,创建一个 Service Fabric 项目(在 Visual Studio 中),该项目为我们提供了所需清单的模板,我们将使用该模板部署所需数量的容器。在部署时,Service Fabric 会读取您的清单,提取并缓存 docker 映像并相应地创建容器。不用说,您的清单必须包含有关注册表和相关凭据的信息。

    旁注:切勿在清单中使用图像的“最新”标签,因为如前所述,Service Fabric 会缓存图像。另外,请记住配置您的集群以清理旧图像。否则,根据您的应用程序,您可能会很快耗尽空间。

    更新:将 docker 镜像存储在 Aure ACR 中,可以使用托管服务标识,避免将注册表的凭据存储在清单中。可以授予分配给集群底层 VM 规模集的标识访问 ACR 以在部署期间下载 docker 映像。这样可以确保任何有权访问 SF 浏览器仪表板的人都看不到凭据(并且不必担心对清单中的秘密进行加密)。

    【讨论】:

    • 这是正确的答案,也是让 IIS 在 SF 集群中运行的唯一方法。另一种可行的方法是将 IIS Express 作为来宾可执行文件运行。我还没有尝试过,但理论上它可以工作。不知道这是否是个好主意。 SF 专为可靠服务或来宾可执行文件而设计,不运行 Windows 服务。
    • @MikeChristensen 我不知道 IIS Express 是否是一个生产就绪的应用服务器。
    • 是的,这可能是一个绝对糟糕的主意.. 不推荐,0 星..
    【解决方案2】:

    AFAIK ,恐怕对于 ASP.Net 网站,我们必须使用常规方法来扩展/扩展。

    将 WCF 迁移到 ServiceFabric 伴随着扩展单体 WCF 调节的困惑口头表达。为了扩展应用程序,只有水平扩展将通过增加 Web Server 的数量来完成,并在其前面进行负载平衡。

    要克服这个问题,微服务架构方法是最好的选择。我们可以将单个 WCF 应用程序分解为多个托管为 WCF 应用程序的微服务。

    一种方法是将此 WCF 作为无状态服务移动到服务结构(分布式系统平台),并通过在服务结构集群中生成各种服务实例来扩展服务。

    如果您想进行最小的更改以将应用程序迁移到分布式环境,可以在服务结构中host using WCF communication stateless service

    查看以下文档以获取更多参考:

    https://amoghnatu.net/2017/07/03/creating-wcf-service-hosted-in-azure-service-fabric-over-https-with-basic-authentication/

    https://github.com/loekd/ServiceFabric.WcfCalc

    https://www.dotnetcurry.com/windows-azure/1342/create-wcf-service-azure-service-fabric

    希望对你有帮助。

    【讨论】:

    • 我们正在寻找不涉及重构应用程序状态管理子系统的解决方案。
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 2017-02-10
    • 2016-12-05
    • 2016-12-20
    • 2017-04-29
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多