<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • Passenger作用及原理梳理

    我們在部署rails應用時,大多時候都使用Nginx+Passenger的方式部署,本文主要對此架構下 Passenger的作用及其工作原理進行梳理。

     

    一、什么是Passenger?
    Phusion Passenger是一個開源的Web應用服務器,它能夠處理HTTP請求,管理進程和資源、

    系統監控以及問題診斷。

     

    二、Passenger主要作用

    在Nginx+Passenger部署中,Passenger和Nginx集成,Passenger主要用作應用服務器,管理 進程和資源,而Nginx充當Web服務器,處理HTTP事物以及向客戶端傳送靜態文件,他們的關系如下圖所示:

    那么,為什么要這樣實現呢?

    一方面這是因為Nginx并不是Ruby應用服務器,它不能直接運行Ruby應用程序,而對于Ruby應用(Rails應用)來說,它們自身不能使用HTTP(我們的rails應用運行的時候都是指定了應用服務器的),另一方面,一般來說應用 服務器在處理HTTP時沒有Nginx等Web服務器 處理的好,畢竟像Nginx或者Apache這類Web 服務器能更好地處理I / O安全性,HTTP并發管理,連接超時等這類問題。

     

    三、Passenger工作原理

    1、Passenger架構

    Passenger架構如下圖所示,Passenger由多個組件以及進程組成,這種架構的好處就是穩定以及具備魯棒性,相互獨立的組件當遇到崩潰 的問題時可以單獨重啟該組件,這樣就避免因為一個組件的問題導致整個系統癱瘓。

    1-1、Web Server module

    Web Server模塊Passenger針對Nginx實現的一 個模塊,它隨著Nginx啟動而被加載,當一個請求到達Nginx時,它主要檢查此請求是否應該被Passenger所服務的應用程序處理,如果可以被 處理,則將請求轉發至Passenger內核。

    1-2、Passenger Core(HelperAgent)

    Passenger內核主要負責以下幾件事:

    • 記錄當前存在的應用程序進程;
    • 對請求進行負載均衡(基于進程的);
    • 應用程序進程生成。Passenger會根據需要去生成應用程序進程,以提升系統處理能力,當然Passenger所能生成的進程數量我們是可以控制的;
    • 監控以及統計收集數據能力。Passenger能夠記錄應用程序內存使用率、處理請求數等等;

    1-3、UstRouter(LoggingAgent)

    Passenger Core和UstRouter協作,UstRouter主要負責將數據發往Union Station(一個Web 監控服務),如果我們沒有明確指示Passenger要向Union Station發數據,那么Union Station將空閑狀態,不消耗資源。

    1-4、Watchdog

    Passenger Core和UstRouter包含復雜的邏輯,因此它們在運行時可能出現導致崩潰的錯誤。 因此作為安全措施,它們都由看門狗監控。 如果其中任何一個崩潰,它們都由看門狗重新啟動。

    1-5、Command line tools 這個主要是一些方便用戶使用的一些管理工具,例如查看Passenger運行狀態、內存使用率、

    當前進程數等等。

    2、啟動流程

    Nginx+Passenger部署的應用程序啟動流程 如下:
    1. Web服務器啟動。對于我們用戶來說,我 只需要執行命令啟動Nginx服務器即可;
    2. Web服務器啟動Watchdog;
    3. Watchdog首先初始化服務器實例目錄,這 個目錄是一個臨時目錄,主要存放Passenger 實例可能會用到的文件;
    4. Watchdog啟動Passenger Core和 UstRouter,這兩個模塊會分別進行初始化, 當初始化完畢后,它們會向watchdog返回啟動成功的消息;
    5. Watchdog向Nginx中的Passenger Module返回啟動成功的消息,當然如果啟動失敗則會記 錄錯誤日志。

    3、Passenger Core架構
    我們知道Passenger Core是整個Passenger的核心,所以有必要了解其架構。Passenger Core的架構圖如下:

    Passenger Core包含兩個子系統:請求處理子系統、應用程序池子系統。

    3-1、請求處理子系統

    來自客戶端的請求首先會被Web服務器接收,然后Web服 務器將請求以SCGI格式發往Passenger Core的請求處理 子系統,該系統會對請求做一些處理,最終以HTTP響應 的形式返回給Web服務器,最后Web服務器解析響應并發給客戶端。

    3-2、應用程序池子系統 應用程序池子系統職責如下:

    • 記錄存在的應用程序進程;
    • 產生進程;
    • 將請求路由到合適的進程(負載均衡);
    • 監控進程; 強制實施資源限制,確保不會產生太多進程,并能關閉內存使用率過高的進程;
    • 根據需要重啟應用程序進程。例如我們修改了應用程序中某些文件,但我們不用自己重啟Web服務器;
    • 重啟崩潰的應用程序進程;
    • 排隊請求以及限制并發。每個進程會告知系統其所能處理的最大并發量,當超過這個閾值時,超出的請求將進入隊列,等待。

    3-3、進程產卵器子系統

    這個系統其實是應用程序池子系統內的一個子系統,它主要職責就是產生應用程序進程并創建一個與之對應的Process對象。該子系統提供多種進程產卵方式:

    • 直接產卵
    • 智能產卵

     

    4、應用程序進程產卵和加載

    應用程序進程是通過Passenger Core進程產生的,產生一個進程涉及許多準備工作,例如設置 通信頻道、設置當前工作目錄、設置環境變量等等,這些準備工作由Spawner對象以及一些提供各種支持可執行文件組成。當準備工作完成后,接下在就是加載應用程序入口點,這個加載工作將 由加載器完成,這個加載器的實現和我們應用程序所使用的語言相關。 加載器程序可以和產卵器通過我們在準備階段設置的通信頻道進行通信,加載器程序加載應用程序所使用的語言環境,設置服務,最后向產卵器返回執行結果。

    posted @ 2022-05-11 23:28  阿拉懶神燈  閱讀(23)  評論(0編輯  收藏  舉報
    国产美女a做受大片观看