• 跳至主要導覽
  • 跳至主要內容
WooWP 主機服務

WooWP 主機服務

高效能 Kinsta WordPress 主機代管服務

  • Home
  • 伺服器方案
  • 關於我們
  • 客戶群
  • 部落格
  • 電子報訂閱
  • 聯絡我們
  • Show Search
Hide Search
目前位置: 首頁 / Knowledge Base / 甚麼是 PHP Workers? WordPress 如何使用它?

甚麼是 PHP Workers? WordPress 如何使用它?

2021 年 8 月 24 日 by wPowered 發佈留言

PHP Workers 是高性能主機中都可以看到它的影子,也是這些主機中的重要組成的一部分,在本文中我以簡單的例子解釋解基礎知識,並與 WordPress 之間的運作關係。

目錄:

  • 什麼是 PHP Worker ?
  • PHP Worker 和 CPU
  • PHP Worker 與 WordPress 性能的關係
  • Nginx PHP-FPM 的設定

最早的時候,剛接觸 Kinsta 和 WP Engine 高性能主機商時,一點都不懂 PHP Worker 是甚麼東西,網路上也查不到甚麼資料,詢問官方,也說得很含糊。(心想,這是 WP Engine 創造出來的新名詞吧 !)

既然 WP Engine 創造了 PHP Workers 這個名詞,其他的主機商也就相繼開始學習使用:

  • WP Engine (PHP Workers 數量,沒有說明)
  • FlyWheel (PHP Workers 數量,沒有說明)
  • Kinsta (基本方案 PHP Workers 2 個)
  • Closte (基本方案 PHP Workers 6 個)
  • Servebolt (任何方案 PHP Workers 數量無上限)
  • Pagely (任何方案 PHP Workers 數量無上限)
  • Pressable (PHP Workers 數量,沒有說明)

PHP Workers 的數量沒有所謂的「無上限」,只能把它當作一個招攬廣告名詞來看。

這就像是有些主機託管商,會說:給你無限流量、無限空間使用的意思一樣,廣告招攬的手法。

以 Kinsta 為例:

WordPress 基本方案 30 美金有 2 個 PHP Workers,而 WooCommerce 需要 4 個 PHP Workers 方案,100 美金 / 月 (官方要求)

雖然基本方案 30 美金 / 月,你一樣可以安裝 WooCommerce 外掛,但是,當 2 個 PHP Workers 不夠用時。

Kinsta 再厲害的工程師,也是對你兩手一攤,請花錢升級方案到 4 個 PHP Workers。

這些 WordPress 高性能主機商,這就開啟 PHP Worker 控制效能的大招,之後也就最被使用者詬病的,需要花大量金錢去購買 PHP Worker 數量。

也就為什麼許多使用者,雖然用不到這麼多的資源,卻被迫要選擇更昂貴的方案,正是因為這個原因。

什麼是 PHP Worker ?

在 WordPress 中 PHP Worker 建構頁面、處理預定的後台任務等,由於 PHP Worker 直接負責生成 HTML 頁面以服務於你網站的訪問者,因此,PHP Worker 決定了你的網站在任何時間,可以同時處理沒有快取的數量。

PHP Worker 是負責處理 PHP 代碼的後台計算執行緒,接收 Nginx (Web 伺服器) 傳過來的請求。

所以,它的工作流程是這樣的

瀏覽器 (造訪者) <<>> Nginx <<>> PHP (PHP Workers) <<>> MySQL

簡單的說:

讀者透過瀏覽器造訪你的網站,這個請求會經由 Nginx 傳給 PHP,PHP Workers 會向資料庫要資料;資料庫將所需的資料拿給 PHP Workers,PHP Workers 整理好資料回傳給 Nginx;讀者 (客戶端) 就可以看到你的 HTML 網頁。

對一般的部落格網站,快取在這時候的腳色就很重要了,

快取機制在 Nginx <<>> PHP (PHP Workers) 之間就會出來攔截資料,直接把手上準備好的資料就回交給 Nginx,Nginx 接到已快取的資料,再傳送到讀者的瀏覽器,呈現我們的網頁讓讀者閱讀,反而 PHP Workers 和 MySQL 就閒在那沒事做。

如果很不幸,快取沒有命中,PHP Worker 還是會接收請求,去找資料庫拿資料。

主機端的 FastCGI Cache 快取運作是如此。(這跟 WP 快取外掛運作又有一點點不同)

反觀,對高動態 WooCommerce 和 LMS 教學網站, PHP Workers 就特別格外的特別重要。

通常,當一件商品放入購物車後及會員登入網站觀看課程後,網站快取狀態會消失,而會看到大量未快取的請求。因此,這些網站將需要大量的 PHP Workers 來確保每個請求都得到處理而不會出現延遲或超時。

如果,你的網站沒有大量 PHP 代碼 (例如:復雜的主題或大量 WP 外掛),那麼 PHP Worker 可以更快速處理每個請求,即使少量的 PHP Worker 工作執行緒,也可以非常快的處理大量的請求。

PHP Workers 和 CPU

PHP 是單一執行緒 (single-threaded) 工作 (但也可以透過 pThreads 成為多行程,但不在的說明內)

所以,WordPress 也是一個單一執行緒 CMS 程式 (每個 PHP worker 只能使用一個 CPU core)

例如:

你有 4 個 PHP Workers,但是你的 VPS 主機的 CPU 是單核心 (1 core)

這時,4 個 Workers 無法同時工作,它們會成為列隊,等待第一個 Worker 完成工作輪到下一個 Workers 接手。

如果是 CPU 核心不足,PHP Workers 的列隊等待過久,也就會回應 504 的錯誤。

從上述的結論來看,得到一個結果:

一個客戶端的請求 >> 一個 PHP Workers 執行緒 >> 一個 CPU core

看到這邊,心想 PHP Workers 多一點,是不是就可以處理更多的請求,做更多的事情。

理論上是這樣沒錯,但需要 CPU 多核心的配合才行。

把 CPU 當作一個消防栓,接上一個管子 (PHP Worker) 噴水,水壓很強噴的很遠。如果,接上 10 根水管 (PHP Workers) 噴水,水壓是不是一樣很強噴的很遠。

這時,PHP Workers 與 CPU 的搭配就會是一個重要的配置了。

也因為 WordPress 是一個單一執行緒 (single-threaded) CMS 程式,在 Kinsta 測試中發現,CPU 高時脈速度就變得非常重要。

也就可以理解 Kinsta 為何特別喜愛 GCP C2 (Intel 3.8 GHz) VM 的道理,其他 CPU 3.8 GHz 高時脈產品的 VPS 主機 (Vultr High Frequency) 也受到特別歡迎。

PHP Workers 與 WordPress 性能的關係

WordPress 本身是一個單一執行緒 (single-threaded) CMS 程式,也就是說一個 WordPress 請求(頁面加載、搜尋請求、產品過濾等等),無論請求多麼的複雜,都由一名 PHP Worker 處理,多個 PHP Workers 不會參與 WordPress 多個不同方面來的請求。

所以,一個 WordPress 請求:

  1. 一位讀者用瀏覽器進入你的網站。
  2. 瀏覽器與你的主機聯絡 (Nginx) 請求網頁加載需的資料。
  3. Nginx 首先判斷是否可以直接從快取中的請求,或是交由 PHP 處理。
  4. 如果需要 PHP 處理,你的 PHP Workers 會被分配,並將開始處理必要的代碼。
  5. 如果又需要資料庫的資料,PHP Workers 向資料庫發送查詢,然後等待資料庫結果回覆。
  6. PHP Workers 從資料庫中獲取資料後,繼續處理,完成後,PHP Workers 在送回 Nginx。
  7. Nginx 接到 PHP workers 的回覆後,在傳送到讀者的瀏覽器,呈現我們美美的網頁。

在我沒搞懂 PHP Worker 之前,一直以為 WordPress 高動態網站的瓶頸在資料庫的搜尋上,其實不然。

WordPress 最大的瓶頸在佈景主題和外掛的 php 代碼上 !
好的外掛 PHP 的代碼 = PHP Workers 更快速的處理。

在我實際的代管購物車和教學網站中,往往最擔心的是客製外掛和外掛濫用,

往往在 16 個 PHP Workers 的網站中,外部請求數不需太多,就會被這些不良的客製外掛或過多不必要的外掛給消耗殆盡,甚至造成記憶體不足。

一個好的輕量的外掛代碼,可以讓 PHP Worker 更快速的工作,在很短的時間內完成工作,換下個列隊的 PHP 代碼,更快速的交由資料庫搜尋資料。網站更可以承接更多的外部請求。

PHP Workers 不足的結果

為了讓 WordPress 網站可以獲得快速可靠的性能,需要確保網站有足夠的 PHP Workers 很重要。

反之,你的伺服器的 CPU 和 RAM 可用資源太少之下,過多的 PHP Workers 有可能會消耗伺服器的所有資源並佔用伺服器執行緒。

當 PHP Workers 已經在網站上忙碌時,它們開始建立隊列,由於 PHP Workers 不足而又超時,網頁載入開始變得緩慢,就會在瀏覽器看到 502 bad gateway errors 錯誤,

502 bad gateway errors

這就好比我們去一家餐廳用餐 (網站),我們 (造訪者) 會在門口等服務生來帶位,PHP Workers 比如是服務生,
2 個 PHP Workers 有如 2 個服務生可以同時來帶位,
第 3 個客人 (造訪者) 就需在餐廳門口等待服務生 (PHP Workers) 帶位,當 PHP Workers 已經在網站上忙碌時,造訪者開始建立列隊 (門口排隊)。

如果,服務生帶位 + 點餐的動作太慢 (CPU),門口一定會塞滿要用餐的客人,服務生不足又加上等待的客人太多,網頁就會顯示 502 bad gateway errors 錯誤。

為了解決這個問題,在 CPU 尚未達到極限的情況下增加 PHP Workers 是必要的,而且可以提高網站性能。

Nginx PHP-FPM 的設定

曾嘗試問過 Kinsta 客服,這個 PHP-FPM 的設定問題,可惜這是商業機密,問不出所以然,每一家主機商有自己的配方。

在大多數 Nginx 伺服器上,PHP Worker 是由 FastCGI 管理處理序,也就是 PHP-FPM。

pm.max_children 相當於 PHP Worker,也就是可以同時存活的最大 Workers 數量。

尋找 PHP-FPM 的甜蜜點:

Nginx 的 PHP-FPM 這不是科學問題,是一門藝術。
Gridpane
Steve B

PHP Workers 是一個很複雜的知識,在自架 VPS 中,你需要不斷反覆的測試,花大量的時間,找出適合你的伺服器 PHP-FPM 配置。

XFacebookLinkedInTumblrPinterestEmail

分類: Knowledge Base 標籤: Kinsta, Nginx, PHP Worker, WordPress

關於 wPowered

wPowered 已成為 Kinsta 代理合作夥伴 ! 我們使用最快速、穩定的 Kinsta 平台 Google Cloud Platform C2 / C3D VM 雲端主機,前端防火牆 + 負載平衡,CPU / RAM 自動縮放效能,給你一個最優質、快速的主機空間。

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

網站速度優化 & 伺服器穩定性 = 您賺更多的收入 主機代管方案

WooWP 主機服務

金欣數位科技工作室 · Kinsta 代理合作夥伴關係 Kinsta Hosting

  • Facebook
  • Twitter
  • INSTAGRAM
  • FAQ
  • Knowledge