一文讀懂微服務編排利器—Zeebe

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"一、工作流與微服務編排"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. 工作流"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"提到工作流,印象裏都是OA系統各種請假審批流。事實上,廣義上的工作流是對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。簡單理解,我們"},{"type":"text","marks":[{"type":"strong"}],"text":"爲了實現某個業務目標,抽象拆解出來的一系列步驟及這些步驟之間的協作關係,就是工作流"},{"type":"text","text":"。例如訂單發貨流、程序構建流等。業界通常用BPMN流程圖來描述一個工作流。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"(1)沒有工作流時的任務協作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以實現一個用戶購買邏輯爲例,如果不應用工作流模型,我們串聯多個任務(步驟)一般是通過顯示的代碼調用:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/0e\/0ea97e63674e021dae62102875ff9227.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"校驗、支付、發貨一氣呵成,流暢自然。正喝着枸杞紅棗,產品一臉笑意跑過來:“我們新搞個充會員卡的業務,大概步驟就校驗 -> 推薦 -> 支付 -> 充值。校驗和支付前面都做過了,應該很快實現吧?”"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"精通if-else的你,聽完的瞬間就已經構思好了代碼:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/c0\/c049df7bf1b499df197617eaf1668de5.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一通寫下來,總感覺哪裏不對,“爲什麼加新的任務節點,要改已有的代碼呢?這不符合開閉原則啊!”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"(2)應用工作流模型的任務協作"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"工作流模型正是爲了解決這類問題而生:"},{"type":"text","marks":[{"type":"strong"}],"text":"分離任務的實現和任務的協作關係"},{"type":"text","text":"。上面同樣的用戶購物邏輯,有了工作流模型,各個任務只實現自己原子的邏輯,任務協作關係使用流程圖來表達。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/bb\/bbd718b54ae0be52f43bf98f2b30f365.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當新的邏輯需要複用已有任務節點時,只需要調整流程圖,無需修改已有代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/e5\/e524be9b3e8029693ee436755ed27444.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. 工作流引擎"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"將任務實現與任務協作關係分離之後,就誕生了專門維護任務協作關係的程序 - 工作流引擎(也常稱作流程引擎)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/1a\/1afcf652f01dc1d0bbec6ccb97a8a71f.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其中最具有代表性的就非Activiti莫屬了。在企業應用蓬勃發展的21世紀初,它幾乎是實現流程自動化的標配。關於Activiti的介紹,網上已經有足夠多的文章。今天我們要介紹是由Activiti的核心成員打造的另一款專爲微服務編排而生的工作流引擎 -  Zeebe。在開始之前,我們先理解下什麼是微服務編排。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"3. 微服務編排"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"微服務架構的一大核心是把大的複雜的業務系統拆分成高內聚的微服務,每個服務負責相對獨立的邏輯。例如一個電商系統,可能會拆分出支付微服務、訂單微服務、倉儲微服務、物流微服務等。服務拆分的好處無需贅述,但是要實現業務價值,不是看單個服務的能力,而是要協調所有服務保證企業端到端業務流的成功。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那麼,哪個服務來負責端到端業務流的成功呢?答案是沒有。事實上,在公司內,端到端的業務流可能都沒有正式的文檔說明,從一個微服務到另一個微服務的事件流轉都是在代碼裏隱式表達的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"    "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很多微服務架構依賴一種相對純粹的編舞模式(choreography pattern)來解決這個問題。在這種模式下,微服務通過向一個消息隊列發送和接收事件來相互協作。編舞模式給開發者提供了很高的靈活度,但是編舞模式仍不能解決:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"可見性"},{"type":"text","text":":多少端到端業務流正在運行中,它們的狀態是什麼樣子。過去24小時,有多少業務流實例沒有成功結束?爲什麼這些業務流實例沒有成功結束?一個業務流或者某個任務完成的平均時間是多少?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"異常處理"},{"type":"text","text":":如果業務流裏有一個微服務失敗,誰負責處理這個異常?業務流的重試邏輯是怎麼樣的?如果需要人工介入,問題的升級處理規則是怎麼樣的?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"於是便誕生了一種更嚴格的編排模式(orchestration pattern),用於協調各個微服務。在這種模式下,會有一箇中控的引擎:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"按照業務邏輯的藍圖,編排各個微服務的調用關係;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"監控整個業務流的狀態;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"提供自動化的機制處理單個服務的失敗,保證整個業務流的成功。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可以借用下面的圖,來進一步理解微服務編排和微服務編舞模式的區別:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fd\/fdf8a80494d06b323e52bed6cced67ce.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"按照我們前面對工作流模型的闡述,工作流引擎很適合作爲中控引擎,來編排調度微服務。那爲什麼諸如Activiti等傳統的工作流引擎沒能繼續佔領微服務編排的市場,而是誕生了新的微服務編排引擎-Zeebe?更有趣的是,Zeebe的核心開發,也是來自最初的Activiti團隊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"答案是諸如Activiti等傳統工作流引擎的架構無法適應當下微服務的場景:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"傳統的工作流引擎,編排的大部分是人工審批任務,意味着任務流轉效率低,系統吞吐低。而當下微服務大部分是程序化的自動任務,意味着任務高效流轉,系統吞吐高。單點架構、同步響應、高度依賴DB的Activiti,顯然支撐不了這樣的場景。"}]}]}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/08\/08cd97aa18365bb3e451a54f4f478f15.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Activiti等工作流引擎,通常都以jar包的形式,嵌入到業務程序中,直接通過調用本地方法的方式調度起業務TaskHandler。在單體架構下,這種集成方式簡單易用。但是在微服務架構下,工作流的任務往往是分佈在多個服務的,而且同一個服務往往還會根據負載情況部署不同數量的實例。如果還是採用引擎主動調用的方式,怎麼尋址到具體的TaskHandler?當後端業務服務處理能力本身是瓶頸的時候,如果引擎還是不斷的調用,只會進一步壓垮服務。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":"br"}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/23\/23013e7a6f7d94115aadf08700061636.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而Zeebe在設計之初,就考慮到了這些問題,下文來爲大家詳細介紹。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"二、Zeebe特性與頂層架構"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"1. Zeebe核心特性"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Zeebe是專爲微服務編排設計的免費開源的工作流引擎,它提供了:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"可見性(visibility)"},{"type":"text","text":":Zeebe提供能力展示出企業工作流運行狀態,包括當前運行中的工作流數量、平均耗時、工作流當前的故障和錯誤等;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"工作流編排(workflow orchestration)"},{"type":"text","text":":基於工作流的當前狀態,Zeebe以事件的形式發佈指令(command),這些指令可以被一個或多個微服務消費,確保工作流任務可以按預先的定義流轉;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"監控超時(monitoring for timeouts)或其他流程錯誤"},{"type":"text","text":":同時提供能力配置錯誤處理方式,比如有狀態的重試或者升級給運維團隊手動處理,確保工作流總是能按計劃完成。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Zeebe設計之初,就考慮了超大規模的微服務編排問題。爲了應對超大規模,Zeebe支持:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"橫向擴容(horizontal scalability)"},{"type":"text","text":":Zeebe支持橫向擴容並且不依賴外部的數據庫,相反的,Zeebe直接把數據寫到所部署節點的文件系統裏,然後在集羣內分佈式的計算處理,實現高吞吐;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"容錯(fault tolerance)"},{"type":"text","text":":通過簡單配置化的副本機制,確保Zeebe能從軟硬件故障中快速恢復,並且不會有數據丟失;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"消息驅動架構(message-driven architecture)"},{"type":"text","text":":所有工作流相關事件被寫到只追加寫的日誌(append-only log)裏;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"發佈-訂閱交互模式(publish-subscribe interaction model)"},{"type":"text","text":":可以保證連接到Zeebe的微服務根據實際的處理能力,自主的消費事件執行任務,同時提供平滑流量和背壓的機制;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"BPMN2.0標準(Visual workflows modeled in ISO-standard BPMN 2.0)"},{"type":"text","text":":保證開發和業務能夠使用相同的語言協作設計工作流;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"語言無關的客戶端模型(language-agnostic client model)"},{"type":"text","text":":可以使用任何編程語言構建Zeebe客戶端。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"2. Zeebe架構"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Zeebe架構主要包含4大組件:client, gateway, brokers 以及 exporters."}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/4c\/4cd8c7989a0da746509df77677745971.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"1)Client"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"客戶端向Zeebe發送指令:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"發佈工作流(deploy workflows)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"執行業務邏輯(carry out business logic)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"創建工作流實例(start workflow instances)"}]},{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"發佈消息(publish messages)"}]},{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"激活任務(activate jobs)"}]},{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"完成任務(complete jobs)"}]},{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"失敗任務(fail jobs)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"處理運維問題(handle operational issues)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"更新實例流程變量(update workflow instance variables)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":1,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"解決異常(resolve incidents)"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"客戶端程序可以完全獨立於Zeebe擴縮容,Zeebe brokers不執行任何業務邏輯。客戶端是嵌入到應用程序(執行業務邏輯的微服務)的庫,用於跟Zeebe集羣連接通信。客戶端通過基於HTTP\/2協議的gRPC與Zeebe gateway連接。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Zeebe官方提供了Java和Go客戶端。社區提供了C#,Ruby,JavaScript客戶端實現。gRPC協議很方便生成其他語言的客戶端。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Client中,執行單獨任務的單元叫JobWorker。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"(2)Gateway"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Gateway作爲Zeebe集羣的入口,轉發請求到brokers。Gateway是無狀態(stateless)無會話(sessionless)的,可以按需增加節點,以負載均衡及高可用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"(3)Broker"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Broker是分佈式的流程引擎,維護運行中流程實例的狀態。Brokers可以分區以實現橫向擴容、副本以實現容錯。通常情況下,Zeebe集羣都不止一個節點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"需要重點強調的是,broker不包含任何業務邏輯,它只負責:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"處理客戶端發送的指令"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"存儲和管理運行中流程實例的狀態"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分配任務給job workers"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Brokes形成一個對等網絡(peer-to-peer),這樣集羣不會有單點故障。集羣中所有節點都承擔相同的職責,所以一個節點不可用後,節點的任務會被透明的重新分配到網絡中其他節點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"(4)Exporter"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Exporter系統提供Zeebe內狀態變化的事件流。這些事件流數據有很多潛在用處,包括但不限於:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"監控當前運行流程實例的狀態"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"分析歷史的工作流數據以做審計或BI"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"跟蹤Zeebe拋出的異常(incident)"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Exporter提供了簡潔的API,可以流式導出數據到任何存儲系統。Zeebe官方提供開箱即用的Elasticsearch exporter,社區也提供了其他Exporters。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"horizontalrule"},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"頭圖:Unsplash"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作者:唐炯"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文:https:\/\/mp.weixin.qq.com\/s\/tV4TBAUMY836fNmjrh9rGQ"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文:一文讀懂微服務編排利器—Zeebe"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"來源:雲加社區 - 微信公衆號 [ID:QcloudCommunity]"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"轉載:著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章