以前php-fpm,都是直接發(fā)布代碼,沒有其他顧慮
現(xiàn)在用webman,線上環(huán)境,如何更新呢?
1.
如果直接 php start.php restart -d
,會造成請求中斷嗎?
比如,某一個worker進(jìn)程,正在處理請求,這時候直接 restart,會中斷請求嗎?
2.
redis隊列,消費者正在消費消息,這個時候更新,這條消息是不是就沒有了?
所以這種情況,專業(yè)的MQ,有ack機(jī)制,就能避免這種情況的發(fā)生?
3.
如果只用一臺服務(wù)器運行webman,應(yīng)該如何發(fā)布更新呢?
有沒有思路可以提供一下
1、如果直接 php start.php restart -d,會造成請求中斷嗎?
框架會等待業(yè)務(wù)執(zhí)行完畢關(guān)閉進(jìn)程,所以正常情況下不會中斷請求。但是如果進(jìn)程收到停止命令后業(yè)務(wù)超過2秒還沒有結(jié)束會被強(qiáng)行殺死,強(qiáng)行殺死進(jìn)程時會造成請求中斷。
2、redis隊列,消費者正在消費消息,這個時候更新,這條消息是不是就沒有了?
同上,redis隊列沒有ack機(jī)制,如果消費慢超過2秒可能發(fā)生restart 可能導(dǎo)致消費中斷,消息丟失。
專業(yè)的MQ,有ack機(jī)制,可避免。
更改業(yè)務(wù)代碼reload即可,不需要restart。
如果更新vendor里的庫,需要restart。
老大,這個2秒
,是否可以自定義
因為很多時候,進(jìn)程不一定能在2秒內(nèi)處理完,從而響應(yīng)主進(jìn)程的指令
如果,可以根據(jù)具體的業(yè)務(wù)情況,自定義這個2秒
,比如設(shè)置為10秒
這樣,就可以避免強(qiáng)行殺死進(jìn)程,造成數(shù)據(jù)丟失的情況
這樣的話,在線上,直接 restart 或者 reload,就更好了