欢迎加入QQ群(423730487)!4月9日在上海有一场线下活动,盆盆还有微软Azure Stack产品组专家会和大家一起分享技术,届时会在QQ群里直播哈。
添加盆盆的微信(markpah),我会把您拉到微信群。
为什么要学习Azure Stack?因为这是学习Azure的最佳工具。
例如Azure里的经典PaaS服务WebApp,是一款广大人民群众喜闻乐见的服务,很多客户用来搭建自己的数字化营销方案。PaaS服务让我们不再困扰于日常的运维,极大地降低了成本。
但是Azure的WebApp背后是什么原理?它是怎么运作的?我们不得而知。而Azure Stack则能帮助我们“管窥”其背后的原理,至少基本架构和原理是差不多的。
不过本文不会涉及到Azure WebApp的部署,您可以参考以下的文档:
https://azurestack.eu/2016/02/enable-paas-web-apps-in-azure-stack-tp1-part-i/
以下是Azure WebApp虚拟机角色的作用:
Web Worker– 特殊版本的IIS Web服务器,用来处理来自客户端的Web请求
Front End– IIS Web服务器,接受来自客户端的请求,并把请求转交给Web Worker,以及把Web Worker的响应回送给客户端
Publisher– 给FTP客户端提供内容发布,还有类似GIT等机制(目前并不支持)
Database– Azure Stack WebApp的配置数据
File Server - 存放租户的网站内容
Controller– 创建和管理其它WebApp的角色
Management- REST API 服务器
我们可以在WebApp的Resource Provider管理页面里看到这些虚拟机角色。
租户网站进程
如果未作特别说明,本文特指免费(共享)模式的租户网站,名称为MarkWebFreeDemo。
可以通过Process Monitor来监控租户网站的进程行为。
我们可以看到DWASSVC这个进程启动了租户网站进程w3wp。DWASSVC进程里运行着Dynamic WAS Service,这是Azure Stack WebApp用来替代Windows自带的WAS服务,专门为高并发的网站托管服务。
查看其堆栈信息,可以发现其调用RsFilterApi.dll里的CreateSandboxProcessW函数创建沙盒进程,这样租户网站虽然可以运行在同一个Web Worker虚拟机上,但是彼此之间是隔离的。同样RsFilterApi.dll是WebApp里特有的,也不是Windows里自带的,不知道和Windows Docker之间存在什么关系?
然后可以看到租户网站进程w3wp尝试访问\\10.0.2.101\WebSites上的共享。这里的\\10.0.2.101就是File Server这个虚拟机角色,用来存放租户网站的内容。
在Web Worker虚拟机上有个D:\DWASFiles\Sites文件夹,DWASSVC进程用来管理租户网站的配置信息,我们的租户网站MarkWebFreeDemo则在其下有一个子文件夹,里面保存着该租户网站的相关信息,其下有一个名为“VirtualDirectory0”的符号链接,指向File Server的共享文件夹路径,其中保存着该租户网站的内容。
FTP上传租户网站内容
比较奇怪的是,和前任Windows Azure Pack(确切来说并不算"前任")相比,Azure Stack的WebApp多出一个FTP的虚拟机角色,用来提供FTP服务。
由于前面所述的Blog以及官方文档里没有提供FTP的配置方法,所以可以按照以下步骤进行。首先打开WebApp资源组(本例是WebSitesSQL),找到FTP0-1P所绑定的公网IP地址,本例是192.168.133.23。
然后在DNS服务器里新增一个A记录,ftp.web.azurestack.local为192.168.133.23。
接下来即可在租户网站页面上设置FTP服务器的访问凭据。
然后就可以借助FTP客户端,例如FlashFXP等,即可访问到该FTP服务器,而有趣的是,所看到的FTP文件夹,并不在该FTP服务器上,而是在File Server的租户网站内容文件夹里!
可以做一个简单的实验,通过FlashFXP上传一个index.html到文件服务器上,然后重启租户网站,即可看到内容。
免费(共享)租户网站资源配额
在共享模式租户网站里,由于所有租户的网站都运行在相同的Web Worker虚拟机上,所以会默认加以CPU和内存限制,可以用Process Explorer查看其Job Object信息。例如我们可以看到其中该网站默认使用最多1024MB的虚拟内存。
我们可以在Azure Stack的Portal上,打开WebApp的Resource Provider配置页面,依次进入SKUs、所需的租户网站模式、Features,可以看到Site Memory Limit默认是1024MB,这和前面的Job Objects一致。现在将其改为1500MB,并保存。
仔细查看SQL Server虚拟机角色,发现该配置数据写在runtime.SitePolicy的MemoryLimitinMB。
重启租户网站,现在可以看到网站的内存限制变成了1500MB。
顺便说一下,利用Windows的Job Object来限制一组进程的资源配额,Windows Docker也是采用类似方法,而开源的Linux Docker,则采用类似的CGroup技术。
本文出自 “盆盆” 博客,请务必保留此出处http://markwin.blog.51cto.com/148406/1754235
Azure Stack PaaS-网站(WebApp)背后是什么原理?
原文地址:http://markwin.blog.51cto.com/148406/1754235