OpenResty、PHP-fpm與NodeJs操作MySQL的性能對比

2020-12-14 中文業界資訊站
感謝人生苦短,Pythonic!的投遞

今天agentzh在微博上公布了一些OpenResty 與 php-fpm、Nodejs操作MySQL的性能評測數據。

agentzh:

我剛才在對比測試大結果集查詢時,發現NodeJS在使用 node-mysql庫訪問MySQL時,上下文切換次數居高不下,都快趕上 php-fpm + php-mysql了。但Node只起了一個進程,而且 strace 確認了確實是非阻塞的(不像 node-mysql-libmysqlclient 和 node-db-mysql 那樣濫用 OS 線程池玩阻塞通信),很是奇怪

agentzh:

貌似 node-mysql 的作者真不在乎性能?對於 100KB 的大結果集查詢,並且命中 MySQL 查詢緩存時,node-mysql + node-generic-pool 的性能是最差的,甚至不如 php-fpm + php-mysql. 我的 nodejs 腳本在這裡:http://t.cn/zO9bEgl 哪位 NodeJS 專家幫我把把脈?使用的各組件都是當前的最新版本。

agentzh:

對於單行的小結果集查詢,node-mysql + node-generic-pool 相比 php-fpm + php-mysql 還是有性能優勢的,rps 高了一倍的樣子,絕對值也有差不多 1000 rps,但和 ngx_openresty 的組件相比,貌似還有些差距  下圖中的測試數據仍然來自 Amazon EC2 Small 實例組成的測試集群。

agentzh:

ngx_srcache + ngx_memc 這種緩存的效率看來還確實不錯,比如 100KB mysql 大結果集查詢在緩存命中時的情況添加進了下面這張圖中(黃色曲線)。圖中列出的其他所有東西,比如 lua, php, nodejs 都可以很方便地享受到 ngx_srcache 的緩存服務

agentzh:

既然剛才給出了 100KB 大結果集的結果,那麼不妨再 show 一下 ngx_srcache + ngx_memc 對於單行小結果集 mysql 查詢在 4 臺 memcached 節點組成的分布式緩存命中時的 rps 隨並發度的變化。我們看到,只比 ngx_drizzle 略有提升,確實已經快到天花板了。

agentzh:

測試代碼都公開了:https://github.com/agentzh/mysql-driver-benchmark 測試數據使用的是 MySQL 官方提供的 World 樣例資料庫,同時測試環境是 Amazon EC2 Small 實例(1 臺 web 機,4 臺 mysql 機,1 臺運行 weighttp 測試工具)。歡迎指出任何不公平的地方 :)

相關焦點

  • PHP學習資料推薦(書籍篇)
    書與書之前也有差別,以下推薦主要是名著,能有效傳輸知識書籍,涵蓋前端,軟體工程,微服務,分布式系統,高流量網站建設,php基礎,php框架源碼解讀,php內核解讀,redis應用,運維以及優化和內核解讀,mongodb基礎,分片,集群,mysql基礎,innodb源碼解讀,mysql配置,語句,索引優化,nginx應用,配置優化,源碼解讀,linux 網絡編程,c語言基礎,算法(c描述),tcp/http
  • 如何利用PHP-FPM實現open_basedir繞過
    傳統CGI接口方式的主要缺點是性能很差,因為每次HTTP伺服器遇到動態程序時都需要重新啟動腳本解析器來執行解析,然後結果被返回給HTTP伺服器。這在處理高並發訪問時,幾乎是不可用的。另外傳統的CGI接口方式安全性也很差,現在已經很少被使用。
  • 新手必須要懂的PHP學習路線以及10個PHP優化技巧
    (1周)jquery實戰演習(1月)用zf框架,開發模塊,達到靈活掌握必須掌握的知識點:資料庫必須熟練掌握 mysql & sqlserver,同時必須熟練zendstdio的操作。熟練進行phpmyadmin的操作。
  • 《用OpenResty搭建高性能服務端》筆記
    OpenResty 包含的技術:OpenResty 本質上是將 LuaJIT 的虛擬機嵌入到 Nginx的worker中,所以效率特別高,在性能上, OpenResty 接近或超過 Nginx c module:
  • file_put_contents+php-fpm如何命令執行
    實驗php-fpm命令執行docker起一個php-fpm的環境docker pull wyveo/nginx-php-fpmdocker run -d wyveo/nginx-php-fpm利用pyfcgiclient來發送fastcgi數據包from pyfcgiclient.fpm import FPM
  • 關於PHP程式設計師解決問題的能力
    與php-fpm加載不同的配置  存在多個版本的php,懂得通過which php來看是哪個PHP,或者加絕對路徑制定php版本。  另外一個情況就是php-cli與php-fpm得到的執行情況不一樣,如在web瀏覽器中執行是對的,cli下執行是錯的。這時候可能是2個環境加載的php.ini不同所致。cli下通過php -i |grep php.ini得到加載了哪個php.ini。而fpm下通過phpinfo()函數可以得到php.ini的絕對路徑。
  • PHP 5 到 PHP 7 性能評測(含 JIT 版 PHP 8 對比)
    PHP 性能評估本文只運行純 CPU 任務腳本的基準測試(不需要I / O操作的任務例如訪問文件,網絡或資料庫連接)。使用的基準測試腳本如下所示:基準腳本僅使用每個PHP主要版本的最新小版本運行。把它們當成純粹說明,因為他們不能與 PHP 5.0 性能進行比較。這是一個 mandelbrot.php 腳本的修改版本,它運行得太快,在 7.1.0 和試驗 JIT 分支無法準確的統計時間,我們在腳本中運行計算 100 次而不是 1 次。當然,這些都是純 CPU 的基準測試。
  • php與MySQL(基本操作)
    在這裡,我是用的是wamp集成的mysql資料庫,我們用以上方法來連接到我們的資料庫。(用戶名默認為root,密碼為空);$conn=mysqli_connect("localhost","root","");if(!
  • 從PHP 5到PHP 7性能全評測(含未發布的JIT版PHP 8對比)
    PHP 性能評估本文只運行純 CPU 任務腳本的基準測試(不需要I / O操作的任務例如訪問文件,網絡或資料庫連接)。使用的基準測試腳本如下所示:基準腳本僅使用每個PHP主要版本的最新小版本運行。(PHP核心開發者鳥哥曾經ppt說明php5.4性能改進的原因[4])opcache 擴展插件與 5.5 和 5.6 版捆綁在一起。當相同的腳本在 Web 伺服器連續運行時,由於更快的代碼加載會帶來性能增強。但是,opcache 不會真正顯示其在CLI模式下執行腳本的優勢。PHP 7.0 是性能方面的一個重大突破。
  • php mysql PDO 查詢操作的實例詳解
    http://www.jb51.net/article/124388.htm這篇文章主要介紹了php mysql PDO
  • [精選] MySQL分庫分表後用PHP如何來完美操作
    用PHP例子實現分庫分表操作用兩臺機子簡單以同個業務庫分庫,同個表分表,演示插入、查詢如何定位庫和表並最終成功執行兩臺機子:server1:192.168.1.198server2:192.168.1.199兩臺機子都執行下面操作1、先創建10個資料庫,每個資料庫
  • (進階篇)PHP+Mysql+jQuery實現查詢和列表框選擇操作
    本文講解如何通過ajax查詢mysql數據,並將返回的數據顯示在待選列表中,再通過選擇最終將選項加入到已選區,可以用在許多後臺管理系統中。本文列表框的操作依賴jquery插件:Multiselect。這個要從Multiselect插件說起,Multiselect插件其實就是將一個列表框裝換成左右兩個列表框,已供相關操作,通過查看其插件代碼不難發現,左邊的列表框名為:liOptionms2side__sx,右邊列表框(已選區)名為:liOptionms2side__dx,後面會用到。PHP首先來看action.php的處理。第一步是連接資料庫。
  • 如何讓網站不同頁面調用不同PHP版本
    最近在用一個開源的網頁工具,但是該工具是php5.3寫的。。。直接導致我目前的環境運行不了該工具 ,因為php5和php7差異太大,比如php7直接廢棄了mysql 擴展庫,而使用mysqli擴展庫。。那麼如何使不同的網站調用不同的php版本呢?
  • PHP+MySQL實現對一段時間內每天數據統計優化操作實例
    關注我喲小編 隔天推送php教程,php技巧,php視頻教程,MySQL,筆試題等諸多優質內容,最接地氣、重服務的本地微信平臺!關注我們妥妥沒錯!(商務合作聯繫QQ號:2230304070)http://www.jb51.net/article/136685.htm這篇文章主要介紹了PHP+MySQL實現對一段時間內每天數據統計優化操作,結合具體實例形式分析了php針對mysql查詢統計相關優化操作技巧
  • CUBRID和MySQL使用SSD前後性能測試對比
    /mysql/tmp/mysql.sock[mysqld]user = mysqlport = 3306basedir = /home1/mysql/mysqldatadir = /home1/mysql/mysql/datatmpdir = /home1/mysql/mysql/tmpsocket = /home1/mysql/mysql
  • 一名合格的PHP工程師必備知識結構
    本文告訴你:」1.掌握語言本身的語法,熟悉常用類庫是必須的;2.面向對象最為當今的主流也是必須掌握的;3.常用設計模式必須掌握,設計模式是前輩的總結、經驗;4.php常與資料庫配合使用,而且首先為mysql,所以mysql必須熟悉;5.php是做為一種web開發語言而流行的,所以瀏覽器中的javascript必須會,雖然現在很多公司有專業的
  • 靜態/動態編譯在apache+php+mysql的應用
    我今天就以apache+mysql+php說一下靜態編譯和DSO動態編譯的區別,我會分別拿apache1.3.27和apache2.0.46說明,因為兩個版本的編譯命令是有所區別的。系統和所需軟體:Redhat9.0apache:1.3.27和2.0.46php:4.3.2mysql:4.0.131.首先來安裝mysql,這不是我們的重點,所以關於mysql的安裝配置我就很快過去了tarzvxfmysql-4.0.13.tar.gzcdmysql-4.0.13.
  • MySQL中插入datetime時的PHP date()格式
    源 / php中文網      源 / www.php.cnMySQL以'YYYY-MM-DD HH:MM:SS'格式檢索並顯示DATETIME值。php    $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test";    $conn = mysqli_connect( $servername, $username, $password, $dbname