板條箱文檔路線圖推文
portunusd是一款受OpenBSD relayd和Heirloom Unix inetd啟發的網絡應用程序服務器。它會聽取傳入的網絡連接,將傳入的數據轉發到Illumos門上,並以類似的方式返迴響應。 portunusd將每個連接的端口映射到目標應用程序提供的文件系統上的門上。
測序圖
參與者客戶
參與者Portunusd
參與者的門
參與者申請
應用程序 - >>門:創建/var/run/app.door
Portunusd- >>門:打開
Portunusd- >> Portunusd:在端口80上聽
循環處理請求
客戶端 - >>+portunusd:發送HTTP請求
portunusd- >>+應用程序:通過door_call轉發請求
應用程序 - >> - portunusd:通過door_return發送響應
Portunusd- >> - 客戶端:發送HTTP響應
結尾
portunusd的主要目標是促進單線程應用程序的縮放。在inetd模型下,創建了一個新的過程來處理每個請求。通過利用門,只有在達到新的並發標記時, portunusd才能在應用程序過程中創建一個新線程;否則,將重新使用現有線程以處理後續請求。
我們希望面向網絡的應用程序根據用戶需求進行擴展。我們希望在閒置時最大程度地降低應用程序的資源成本,並且我們希望在需求方面保持成本線性。我們希望最大程度地降低應用程序開發人員負責資源管理的程度,並且我們希望(盡可能多地)保留UNIX命令行工具的熟悉開發環境。
以軌道為例,在Rails應用程序上進行單線讀紅寶石可以一次處理一個用戶請求。如果沒有在內存中駐留多個應用程序(在單獨的Ruby口譯員上),就無法處理多個同時請求。即使用戶需求很少,該模型也會消耗大量內存,從而使主機難以運行其他工作負載。隨後將進行大量的分頁和齒狀磁盤。
Node.js之類的環境通過使異步性更加透明,以解決此問題。儘管接受計算機的異步性可能很有用,但它也引入了支持它的語言的更改。這僅僅是語法的變化,而是人們用來讀取,寫作和理解程序的心理模型的非平凡變化。
在頻譜的另一端,CGI應用程序需要每個請求的唯一過程和地址空間。這些應用程序可以隨用戶需求線性擴展,包括在空閒時縮放到零內存 / CPU使用情況,但是調用execv(2)的每個請求的成本可能會妨礙吞吐量。
後現代的“無服務器”方法滿足了這些條件,但以放棄操作系統為代價。這是開發軟件的一種非常陌生的方法,並丟棄了許多可以在運行時觀察和調試應用程序的工具。
門啟用網絡應用程序開發的新(舊?)模型,其中開發人員負責維護和理解線性,同步任務,而操作系統 + Web服務器在縮放問題上共同使用
這些質量使我們能夠通過開發感覺像單線讀取Unix命令行工具的網絡應用程序來解決我們的問題聲明,在空閒時呈現最小的費用,並在每次要求粒度上線性擴展。
當然,單獨的門不能處理單個操作系統實例的邊界上的縮放,但是假設該應用程序的副本可在多個主機上獲得,則與防火牆的中繼式合作可以促進這一點。這是portunusd進來的地方。
社交媒體預覽圖像是勞頓·多德(Loudon Dodd) - 自己的作品,CC BY -SA 3.0。
@jasonbking回答了許多晦澀的光明 /銹 /門問題。