Netflix開發(fā)了一個叫“Conductor”的編制引擎,已經(jīng)在內(nèi)部生產(chǎn)環(huán)境中使用了一年了。在這段時間里,Netflix已經(jīng)運行了大約260萬個處理工作流,包括簡單的線性工作流,以及運行數(shù)天的動態(tài)工作流?,F(xiàn)在Netflix開源了Conductor,所有對工作流編制感興趣的人都能使用它。
根據(jù)Netflix的Conductor開發(fā)文檔的描述,這個引擎包含以下幾個主要特性:
能夠構(gòu)建復雜工作流 能夠通過微服務執(zhí)行任務 使用JSON DSL描述的工作流藍圖 執(zhí)行過程可見、可跟蹤 能夠暫停、恢復、重啟、停止任務 任務執(zhí)行通常是異步的,也可以強制同步執(zhí)行 處理工作流能夠擴展到百萬級別Conductor的架構(gòu)圖如下:
API和存儲層都是可插拔的,允許使用不同的隊列和存儲引擎。Netflix使用Dynomite做為存儲方案,但也能夠通過實現(xiàn)一個接口來轉(zhuǎn)換成別的方案。
工作流中的任務分為兩種類型:Worker,運行在遠端機器上的用戶任務;System,運行在引擎的JVM上的任務。后者是用來對Worker執(zhí)行任務進行branch、fork、join。Worker任務通過HTTP或者gRPC(基于HTTP/2)和Conductor通信。
Netflix決定開發(fā)一個編制(orchestration)而不是編排(choreography)引擎,是因為后者在他們的測試中擴展性不好。相關(guān)問題如下:
過程流被“嵌入到”多個應用的代碼里 通常,在輸入和輸出、SLAs等方面存在強耦合和假設,導致很難適應需求的變化 幾乎沒有辦法系統(tǒng)地回答“某過程X完成了多少”?Conductor在GitHub上開源,使用Apache License 2.0許可。
查看英文原文:Netflix Conductor, an Orchestration Engine for Microservices