IIS 承载的基于 ASP.Net 的系统应如何部署到 Azure Service Fabric?



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

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

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

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

请注意,Microsoft不再在 docker 中心托管这些映像。

这是一个相当复杂的示例。如您所见,我们从预编译的 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:SitesOurSite' -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 会缓存映像。此外,请记住配置集群以清理旧映像。否则,根据您的应用程序,您可能会很快耗尽空间。

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

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

将 WCF 迁移到 ServiceFabric 附带了缩放整体式 WCF 适应的窘境语言表达。为了扩展应用程序,只有水平扩展将通过增加Web服务器的数量来完成,并在它前面进行负载平衡。

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

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

如果要执行最少的更改以将应用程序移动到分布式环境,则可以在服务结构中使用 WCF 通信无状态服务进行托管。

查看以下文档以获取进一步参考:

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

希望对您有所帮助。

最新更新