天天看點

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

例如Azure裡的經典PaaS服務WebApp,是一款廣大人民群衆喜聞樂見的服務,很多客戶用來搭建自己的數字化營銷方案。PaaS服務讓我們不再困擾于日常的運維,極大地降低了成本。

但是Azure的WebApp背後是什麼原理?它是怎麼運作的?我們不得而知。而Azure Stack則能幫助我們“管窺”其背後的原理,至少基本架構和原理是差不多的。

不過本文不會涉及到Azure WebApp的部署,您可以參考以下的文檔:

<a href="https://azurestack.eu/2016/02/enable-paas-web-apps-in-azure-stack-tp1-part-i/" target="_blank">https://azurestack.eu/2016/02/enable-paas-web-apps-in-azure-stack-tp1-part-i/</a>

以下是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管理頁面裡看到這些虛拟機角色。

<a href="http://s4.51cto.com/wyfs02/M00/7D/E1/wKiom1byASvh0CLJAAKhG3rEmRc323.jpg" target="_blank"></a>

租戶網站程序

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

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

我們可以看到DWASSVC這個程序啟動了租戶網站程序w3wp。DWASSVC程序裡運作着Dynamic WAS Service,這是Azure Stack WebApp用來替代Windows自帶的WAS服務,專門為高并發的網站托管服務。

<a href="http://s4.51cto.com/wyfs02/M00/7D/DE/wKioL1byAsTBvIpRAALB_T7zIhE466.jpg" target="_blank"></a>

檢視其堆棧資訊,可以發現其調用RsFilterApi.dll裡的CreateSandboxProcessW函數建立沙盒程序,這樣租戶網站雖然可以運作在同一個Web Worker虛拟機上,但是彼此之間是隔離的。同樣RsFilterApi.dll是WebApp裡特有的,也不是Windows裡自帶的,不知道和Windows Docker之間存在什麼關系?

<a href="http://s2.51cto.com/wyfs02/M02/7D/DE/wKioL1byAxyDqJhMAAH262F2yOQ334.jpg" target="_blank"></a>

然後可以看到租戶網站程序w3wp嘗試通路\\10.0.2.101\WebSites上的共享。這裡的\\10.0.2.101就是File Server這個虛拟機角色,用來存放租戶網站的内容。

<a href="http://s5.51cto.com/wyfs02/M01/7D/DE/wKioL1byAzHiKdAOAAYlqS_QkQ4174.jpg" target="_blank"></a>

在Web Worker虛拟機上有個D:\DWASFiles\Sites檔案夾,DWASSVC程序用來管理租戶網站的配置資訊,我們的租戶網站MarkWebFreeDemo則在其下有一個子檔案夾,裡面儲存着該租戶網站的相關資訊,其下有一個名為“VirtualDirectory0”的符号連結,指向File Server的共享檔案夾路徑,其中儲存着該租戶網站的内容。

<a href="http://s2.51cto.com/wyfs02/M02/7D/E2/wKiom1byDI6gLjxQAAUkS94AlOM695.jpg" target="_blank"></a>

FTP上傳租戶網站内容

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

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

<a href="http://s1.51cto.com/wyfs02/M02/7D/DF/wKioL1byD4mi_1EoAAV2bBuD7gE746.jpg" target="_blank"></a>

然後在DNS伺服器裡新增一個A記錄,ftp.web.azurestack.local為192.168.133.23。

接下來即可在租戶網站頁面上設定FTP伺服器的通路憑據。

<a href="http://s1.51cto.com/wyfs02/M02/7D/E3/wKiom1byDyii1DiXAAO3-DIHuzA845.jpg" target="_blank"></a>

然後就可以借助FTP用戶端,例如FlashFXP等,即可通路到該FTP伺服器,而有趣的是,所看到的FTP檔案夾,并不在該FTP伺服器上,而是在File Server的租戶網站内容檔案夾裡!

可以做一個簡單的實驗,通過FlashFXP上傳一個index.html到檔案伺服器上,然後重新開機租戶網站,即可看到内容。

<a href="http://s1.51cto.com/wyfs02/M00/7D/DF/wKioL1byD9az8SnhAACGYnbP7sQ832.jpg" target="_blank"></a>

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

在共享模式租戶網站裡,由于所有租戶的網站都運作在相同的Web Worker虛拟機上,是以會預設加以CPU和記憶體限制,可以用Process Explorer檢視其Job Object資訊。例如我們可以看到其中該網站預設使用最多1024MB的虛拟記憶體。 

<a href="http://s5.51cto.com/wyfs02/M02/7D/DF/wKioL1byEC6xa7JyAAGMeDcZYtU634.jpg" target="_blank"></a>

我們可以在Azure Stack的Portal上,打開WebApp的Resource Provider配置頁面,依次進入SKUs、所需的租戶網站模式、Features,可以看到Site Memory Limit預設是1024MB,這和前面的Job Objects一緻。現在将其改為1500MB,并儲存。

<a href="http://s1.51cto.com/wyfs02/M01/7D/E3/wKiom1byD7bx1g-eAAMdLn12RAo452.jpg" target="_blank"></a>

仔細檢視SQL Server虛拟機角色,發現該配置資料寫在runtime.SitePolicy的MemoryLimitinMB。

<a href="http://s2.51cto.com/wyfs02/M00/7D/E3/wKiom1byEI3Btes1AASz2bA9SJU363.jpg" target="_blank"></a>

重新開機租戶網站,現在可以看到網站的記憶體限制變成了1500MB。

<a href="http://s3.51cto.com/wyfs02/M02/7D/E0/wKioL1byET6QKnYvAAGMjptIOh4335.jpg" target="_blank"></a>

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

本文轉自 ahpeng 51CTO部落格,原文連結:http://blog.51cto.com/markwin/1754235,如需轉載請自行聯系原作者