站長資訊網
        最全最豐富的資訊網站

        為速度而生:PHP 與Golang 的合體 —— RoadRunner

        為速度而生:PHP 與Golang 的合體 —— RoadRunner

        php入門到就業線上直播課:進入學習
        API 文檔、設計、調試、自動化測試一體化協作工具:點擊使用

        在過去的十年中,我們一直在為 財富 500 強公司 以及用戶人數不超過 500 人的企業開發應用程序。 一直以來,我們的工程師主要使用 PHP 來開發后端。 但是兩年前,出現了一些問題不僅嚴重影響了我們的產品性能,還影響了它們的可擴展性 —— 因此我們將 Golang (Go) 引入了我們的技術棧。

        幾乎同時,我們發現 Go 不僅允許我們創建更大的應用程序,并且能夠將性能提高多達 40 倍。 有了它,我們能夠擴展使用 PHP 編寫的現有產品,并通過結合兩種語言的優勢來改進它們。

        我們將通過大量的 Go 和 PHP 經驗告訴你,如何用它解決實際的開發問題,以及我們如何把它變成一個工具,來消除與 PHP 死亡模型 相關的一些問題。

        常規 PHP 開發環境#

        在講述 Go 如何改善 PHP 死亡模型前,先了解一下常規 PHP 開發環境。

        通常,應用運行于 nginx 和 PHP-FPM 上。nginx 處理靜態請求,而動態請求則被重定向給 PHP-FPM,并由其執行 PHP 代碼。也許你用的是 Apache 和 mod_php,但是他們原理相同,運行起來只有細微的差別。

        看看 PHP-FPM 是如何執行代碼的。當收到請求,PHP-FPM 初始化 PHP 子進程,并將請求的詳細信息轉發給它,作為其狀態的一部分(_GET, _POST, _SERVER 等)。

        在 PHP 腳本執行期間,狀態將無法更改,因此只能通過一種方式獲取一組新的輸入數據:清除進程內存并再次初始化它。

        這種性能模型有許多優點。你不需要太擔心內存消耗,所有進程都是完全隔離的,如果其中一個進程「死亡」,它將自動重新創建,并且不會影響其他進程。但是,當你嘗試擴展應用程序時,這種方式會有缺點產生。

        典型 PHP 環境的缺點和低效性

        如果你從事 PHP 的專業開發,那么你就知道從哪兒開始創建一個新項目 —— 選擇框架。它是一個用于依賴注入、ORM、轉化和模板方法的庫。當然,所有用戶輸入的數據都可以方便地放在一個對象中(Symfony / HttpFoundation 或者 PSR-7)。這些框架很棒!

        但一切都有它的代價。在任何企業框架中,為了處理一個簡單的用戶請求或訪問數據庫,您必須加載至少幾十個文件,創建許多類,并解析多個配置。但最糟糕的是,在每個任務完成后,您需要重置所有內容并重新啟動:您剛剛啟動的所有代碼都將變得無用,在它的幫助下,您將無法處理另一個請求。把這件事告訴任何用其他語言編寫的程序員 —— 你會看到他臉上的困惑。

        多年來,PHP 工程師一直在尋找解決此問題的方法,他們使用了延遲加載技術、微幀、優化庫、緩存等。但最終,您仍然必須放棄整個應用程序,重新開始 *(譯者注:隨著 PHP7.4 中預加載的出現,這個問題將得到部分解決)

        一個 PHP 進程能處理多個請求嗎?

        您可以編寫持續時間超過幾分鐘的 PHP 腳本(最多幾小時或幾天):例如 Cron 任務、CSV 解析器、隊列處理程序。所有這些工作遵循一個模式:他們獲取一條任務,處理完它,然后獲取下一個任務。代碼常駐在內存中,因此避免了額外的操作來加載框架和應用程序,節約了寶貴時間。

        但是開發長時間運行的腳本并不是那么容易。任何錯誤都會殺死進程,內存溢出會導致崩潰,而且不能用 F5 來調試程序了。

        自 PHP 7 后情況有所改善:可靠的垃圾收集器出現了,它變得更容易處理錯誤,內核的擴展可以避免內存泄漏。是的,工程師仍然需要仔細處理內存并記住代碼中的狀態的問題(有哪一種語言能讓你可以不關注這些事情呢?)當然,在 PHP 7 中,驚喜并不多。

        是否可以采用一種 常駐 PHP 腳本的模型,將其用于處理 HTTP 請求等更瑣碎的任務,從而消除對每個請求都從頭開始下載所有內容的需要?

        要解決這個問題,首先需要實現一個服務器應用程序,該應用程序可以接收 HTTP 請求并將它們逐個重定向到 PHP worker,而不是每次都殺死它。

        我們知道我們可以用純 PHP(PHP-PM)或 C 擴展(Swoole)編寫 web 服務器。盡管每種方法都有其優點,但這兩種選擇都不適合我們 —— 我想要

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚欧洲精品在线视频免费观看| 亚洲欧洲成人精品香蕉网| 精品无码三级在线观看视频 | 久久这里只有精品视频99| 国产92成人精品视频免费| 日韩精品久久无码人妻中文字幕| freesexvideos精品老师毛多| 国产精品人成在线观看| 久久精品国产亚洲欧美| MM1313亚洲国产精品| 无码精品黑人一区二区三区| 青青草原综合久久大伊人精品| 青青久久精品国产免费看| 国产99视频精品免费视频76| 四虎成人精品国产永久免费无码| 国产精品99久久99久久久| 久久亚洲私人国产精品| 最新国产精品精品视频| 亚洲国产成人精品女人久久久 | 99精品人妻无码专区在线视频区| 精品视频一区二区三区四区五区| 精品国产乱码久久久久久郑州公司| 国产精品v欧美精品v日本精| 久久精品99久久香蕉国产色戒 | 欧洲精品99毛片免费高清观看| 欧美日激情日韩精品| 久久精品国产半推半就| 国产亚洲精品xxx| 色久综合网精品一区二区| 亚洲av永久无码精品漫画| 亚洲精品亚洲人成人网| 亚洲Av无码精品色午夜| 久久精品国产一区二区电影| 青草青草久热精品视频在线网站 | 久久精品国产一区二区电影| 欧美国产成人精品一区二区三区| 久久精品国产99国产精偷| 777欧美午夜精品影院| 国产精品美女久久久久AV福利 | 欧美人与动牲交a欧美精品| 人妻无码久久精品|