定時任務的灰度發布實現思路
1、啟動階段-注冊執行節點
所有執行節點在啟動的時候注冊自己能執行哪些定時任務
執行節點如果停機重啟(如:停機重啟,發布重啟),主節點會感知這個變化,從而從上述注冊中剝離該執行節點,后續任務就不會再分配到原先節點
2、啟動階段-選舉管理節點,
所有節點注冊完畢,會參與選舉,產生一個管理節點
管理節點可以參與或不參與任務執行。
管理節點隨機在執行節點中產生,如果管理節點停機,zk會感知并通知所有節點重新選舉產生新管理節點。
3、運行階段-管理節點創建定時任務實例,分配給合適的執行節點
管理節點選舉出來,就會周期性的掃描定時任務模版,提前創建定時任務實例并分配執行節點, 分配執行節點其實是更新實例的節點字段。 這叫做主動分配。
管理節點為任務實例分配執行節點時遍歷具備該業務執行能力的執行節點集合,依次分發給執行節點,
開始時記錄開始節點,每輪掃描回到開始節點,就結束為本實例分配執行節點動作
如果此節點沒有執行節點,就放棄等待下一輪掃描。
4、運行階段-執行節點收到通知,掃描執行任務實例
管理節點分配定時任務實例后,會通知執行節點,
執行節點受到通知,會到數據庫里撈取執行分配給自己的待執行任務實例
5、 關于灰度發布
發布人員會修改系統參數greyRegions,并刷新到緩存
發布人員會停機需要升級灰度版本的部分節點,修改配置標記為灰度節點
發布人員發布灰度應用并啟動應用實例
灰度節點啟動過程中重新注冊到定時任務管理機制中,標記自己是灰度節點,注冊自己的定時任務業務能力,參與執行分配
管理節點發現要執行的實例屬于灰度region時,會尋找具備該能力的灰度節點執行該定時任務,
如果沒有找到就放棄等待下一輪再掃,可能此時灰度節點還沒有啟動或注冊加入執行節點集合。