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