※ 引述《tas72732002 (蔥頭)》之銘言:
: 最近看到有人使用訊息佇列(message queue)的方式來提升效能, 如gearman
: 而我目前的做法是利用php exec()透過linux背景執行,降低response的時間,
: 我想請問一下兩者的差異是差在gearman可以建立分散式系統環境,
: queue伺服器可以水平擴充, 提升更好的效能,
: 而exec則是在本機, 還是會影響本機伺服器效能,
: 是差在這兩個地方嗎? 目的都是降低php response時間,
: 不知道這樣見解有錯誤嗎?
exec() 不會在「背景」執行,php 會等 exec() 裡面的指令跑完才繼續下去
message queue 會增加網頁反應速度的原因不是因為可以擴充很多機器
而是因為我現在不去做那些工作,晚點再做,不論是丟給別人做還是自己做
例如使用者在社群網站上按下備份按鈕,網頁可以不用等到整份備份做完才顯示結果
而是先把「備份」這個工作丟進 queue 裡面,然後畫面立刻顯示「請先稍候」
等到備份工作跑個二十分鐘完成之後再寄信給 user
不過相對的,扔進 message queue 裡面的東西還是需要被執行
如果執行工作的 worker 機器很慢,那麼備份工作可能要等一小時才能完成
如果工作進來的速度太快,例如五秒就有一個人按備份,那工作會永遠做不完
所以你會考慮是否需要增加做備份工作的機器,message queue 能簡化這件事情的處理
故工作丟進 message->網頁反應速度變快,這是對的
而增加 worker 機器->執行工作的效能增加,這也是對的
但增加 worker 機器->網頁反應速度變快,這是錯的,這是兩件事情