歡迎加入QQ羣(423730487)!4月9日在上海有一場線下活動,盆盆還有微軟Azure Stack產品組專家會和你們一塊兒分享技術,屆時會在QQ羣裏直播哈。html
添加盆盆的微信(markpah),我會把您拉到微信羣。web
爲何要學習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/app
如下是Azure WebApp虛擬機角色的做用:運維
Web Worker– 特殊版本的IIS Web服務器,用來處理來自客戶端的Web請求yii
Front End– IIS Web服務器,接受來自客戶端的請求,並把請求轉交給Web Worker,以及把Web Worker的響應回送給客戶端ide
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技術。