国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

使用分布式部署GatewayWorker,定時器在每臺服務器上都在運行

cbcbcb

請問如何控制只在主機上運行定時任務
或者有沒有可能生成一個獨立的業(yè)務進程,專供定時器運行

2213 1 0
1個回答

phpcreeper

比如設定: $worker->count = 5
我只想在1、2號進程上運行定時器:

$worker->onWorkerStart = function($worker){
    if(in_array($worker->id, [1,2])){
        Timer::add(...);
    }
};
  • phpcreeper 2020-02-20

    另外分布式的話,可以將定時器存儲到mysql或redis組件以便共享。

  • cbcbcb 2020-02-20

    @614:可能我沒描述清楚,現(xiàn)在的問題是部署在了ABC3臺機器,運行起來后ABC3臺上都有定時任務,但是只想在A的0號worker上運行定時任務,請問這樣應該如何處理?

  • phpcreeper 2020-02-20

    這個看你具體怎么實施系統(tǒng)管理了,方法很多,比如:
    可以將所有參與分布式部署的機器以及對應的worker服務以及定時器等等信息匯總起來進行集中性的系統(tǒng)(共享)存儲管理,然后在某臺特定的機器上運行一個監(jiān)控腳本,通過分析前面的匯總數(shù)據(jù)定制啟動目標服務。

  • cbcbcb 2020-02-20

    @614:如果我想簡單點處理的話,可不可以A上開5個gateway進程,B和C還是4個,然后定時器只在$worker->id === 5的時候運行;這樣能否確保整個負載均衡只運行一次定時器?

  • phpcreeper 2020-02-20

    按照你設定的這個簡單處理邏輯,希望不同機器上同一份代碼能夠預期工作,如果非要這么做(若更改進程數(shù)代碼判定邏輯就會受影響),我認為也是可以的,不過代碼邏輯要注意需要判定的是 $worker->id == 4 而不是5,因為進程編號索引是從0開始計數(shù)的。

  • cbcbcb 2020-02-20

    @614:確實是有點簡單粗暴了,想請教一下“將定時器存儲到mysql或redis組件以便共享”,可以說的再具體一點怎么解決我現(xiàn)在這個問題嘛?

年代過于久遠,無法發(fā)表回答
??