Azure Stack PaaS-網站(WebApp)背後是什麼原理?

歡迎加入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管理頁面裏看到這些虛擬機角色。

wKiom1byASvh0CLJAAKhG3rEmRc323.jpg


租戶網站進程


如果未作特別說明,本文特指免費(共享)模式的租戶網站,名稱爲MarkWebFreeDemo


可以通過Process Monitor來監控租戶網站的進程行爲。


我們可以看到DWASSVC這個進程啓動了租戶網站進程w3wp。DWASSVC進程裏運行着Dynamic WAS Service,這是Azure Stack WebApp用來替代Windows自帶的WAS服務,專門爲高併發的網站託管服務。

wKioL1byAsTBvIpRAALB_T7zIhE466.jpg


查看其堆棧信息,可以發現其調用RsFilterApi.dll裏的CreateSandboxProcessW函數創建沙盒進程,這樣租戶網站雖然可以運行在同一個Web Worker虛擬機上,但是彼此之間是隔離的。同樣RsFilterApi.dll是WebApp裏特有的,也不是Windows裏自帶的,不知道和Windows Docker之間存在什麼關係?

wKioL1byAxyDqJhMAAH262F2yOQ334.jpg


然後可以看到租戶網站進程w3wp嘗試訪問\\10.0.2.101\WebSites上的共享。這裏的\\10.0.2.101就是File Server這個虛擬機角色,用來存放租戶網站的內容。

wKioL1byAzHiKdAOAAYlqS_QkQ4174.jpg


在Web Worker虛擬機上有個D:\DWASFiles\Sites文件夾,DWASSVC進程用來管理租戶網站的配置信息,我們的租戶網站MarkWebFreeDemo則在其下有一個子文件夾,裏面保存着該租戶網站的相關信息,其下有一個名爲“VirtualDirectory0”的符號鏈接,指向File Server的共享文件夾路徑,其中保存着該租戶網站的內容。

wKiom1byDI6gLjxQAAUkS94AlOM695.jpg


FTP上傳租戶網站內容


比較奇怪的是,和前任Windows Azure Pack(確切來說並不算"前任")相比,Azure Stack的WebApp多出一個FTP的虛擬機角色,用來提供FTP服務。


由於前面所述的Blog以及官方文檔裏沒有提供FTP的配置方法,所以可以按照以下步驟進行。首先打開WebApp資源組(本例是WebSitesSQL),找到FTP0-1P所綁定的公網IP地址,本例是192.168.133.23。

wKioL1byD4mi_1EoAAV2bBuD7gE746.jpg


然後在DNS服務器裏新增一個A記錄,ftp.web.azurestack.local爲192.168.133.23。


接下來即可在租戶網站頁面上設置FTP服務器的訪問憑據。

wKiom1byDyii1DiXAAO3-DIHuzA845.jpg


然後就可以藉助FTP客戶端,例如FlashFXP等,即可訪問到該FTP服務器,而有趣的是,所看到的FTP文件夾,並不在該FTP服務器上,而是在File Server的租戶網站內容文件夾裏!


可以做一個簡單的實驗,通過FlashFXP上傳一個index.html到文件服務器上,然後重啓租戶網站,即可看到內容。

wKioL1byD9az8SnhAACGYnbP7sQ832.jpg


免費(共享)租戶網站資源配額


在共享模式租戶網站裏,由於所有租戶的網站都運行在相同的Web Worker虛擬機上,所以會默認加以CPU和內存限制,可以用Process Explorer查看其Job Object信息。例如我們可以看到其中該網站默認使用最多1024MB的虛擬內存。 

wKioL1byEC6xa7JyAAGMeDcZYtU634.jpg


我們可以在Azure Stack的Portal上,打開WebApp的Resource Provider配置頁面,依次進入SKUs、所需的租戶網站模式、Features,可以看到Site Memory Limit默認是1024MB,這和前面的Job Objects一致。現在將其改爲1500MB,並保存。

wKiom1byD7bx1g-eAAMdLn12RAo452.jpg



仔細查看SQL Server虛擬機角色,發現該配置數據寫在runtime.SitePolicy的MemoryLimitinMB。

wKiom1byEI3Btes1AASz2bA9SJU363.jpg


重啓租戶網站,現在可以看到網站的內存限制變成了1500MB。

wKioL1byET6QKnYvAAGMjptIOh4335.jpg


順便說一下,利用Windows的Job Object來限制一組進程的資源配額,Windows Docker也是採用類似方法,而開源的Linux Docker,則採用類似的CGroup技術。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章