nginx-php-fpm 容器效能比較 - Laravel PHP8/PHP7 Debian/Alpine

(圖片來源:Photo by Jason Dent on Unsplash)

這陣子陸續、持續找了些許時間,將手上的學習做了些整理,部分結果將開源釋出,期望能帶出一些思路、考量、各種討論與交流。其中包含了我一直不棄不離的 PHP,這次整理的容器,原始設計目的是想讓 php-fpm 與 nginx 結合,形成一個簡化的環境,能方便地使 Laravel 運作在雲原生環境、AWS Fargate、Amazon ECS 等環境下,以達 application-first 之效。我是拿來作為基底,用於手邊幾個團隊的教學與實作、各種比較測試、包含未來用於測試 x86/ARM 運算架構比較等等。

這篇文章也許在未來會陸續更新。



關於比較

整理這類比較的數據,從設計環境、實作、量測、資料採集、整理、製圖、總結歸納等步驟做下來,滿燒腦也滿有趣的,若內容中有任何可以調整或改進之處、或建議其他量測方式,歡迎留言或開個 issue 給我,非常感謝。

另外想徵求請教,有沒有工具或方法可以讓大家多方測試、採集數據,然後一起統整起來做比較?我覺得我單機測試量太少。

Laravel 8.49.1 with PHP 7.4.21 on Different Docker Base Images

  • 測試目的

    • 測試 Laravel 8.49.1 搭載不同的 Docker base images 的運作結果
  • 測試變數

  • 測試環境:

    • MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
    • CPU 2 GHz Quad-Core Intel Core i5 (x86)
    • Docker-compose 容器條件:
      • 1 CPU
      • 512m memory
  • 測試頁面

    • Default Homepage: Laravel 原生預設的首頁
  • 測試準備

    • 每次測試都使用一個乾淨的容器環境,盡可能於測試時減少干擾。
    • Concurrent 1
    • Duration 60 seconds (1 minute)
  • 測試日期

    • 2021-0706
  • 測試結果

    • Container Image Size
    • Test Page: Default Homepage
  • 分析

    • 比較 dwchiang/nginx-php-fpmbitnami/laravel 之間的異同
    dwchiang/nginx-php-fpmbitnami/laravel
    OS_ARCHlinux/arm64 and linux/amd64only linux/amd64
    OSbusterbitnami/minideb
    Packages flexibility
    HTTP ServernginxPHP’s built-in development server
    PHP Version7.4.217.4.21
    Laravel Version8.49.18.49.1
  • 結論

    • Docker image bitnami/laravel (或說 使用 PHP 內建 HTTP Server 的容器)適合快速在本機建構開發環境,但不一定適合運用在生產環境 (production environment)。

Laravel 8.19.0 with PHP 8.0/7.4/7.3 on Buster/Alpine 3.12

  • 測試目的
    • 測試 Laravel 8.19.0 搭載當下 PHP 8.0/7.4/7.3 並使用不同作業系統容器底層 Buster/Alpine 3.12 的運作結果
  • 測試環境:
    • MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
    • CPU 2 GHz Quad-Core Intel Core i5 (x86)
    • Docker-compose 容器條件:
      • 1 CPU
      • 512m memory
    • Nginx: 1.18.0
  • 測試頁面
    • Default Homepage: Laravel 原生預設的首頁
    • Names: 先 seed 50 位(假的)使用者進資料庫(使用 Docker-compose 帶起),然後將所有使用者從資料庫讀出後,顯示這 50 位使用者名稱在頁面上。(備忘:Laravel 7/8 的 route/seed 語法有變更。)
  • 測試準備
    • 每次測試都使用一個乾淨的容器環境,盡可能於測試時減少干擾。
    • Concurrent 1
    • Duration 60 seconds (1 minute)
  • 測試日期
    • 2021-0417
  • 測試結果
    • Container Image Size
    • Test Page: Default Homepage
    • Test Page: Names
Loading comments…