gRPC-Nebula微服務(wù)框架
東方證券宣布開源其基于 gRPC 框架開發(fā)的微服務(wù)框架 gRPC-Nebula。據(jù)了解,gRPC-Nebula 框架具有服務(wù)自動注冊、服務(wù)發(fā)現(xiàn)、鏈路跟蹤、服務(wù)治理等特性,為證券行業(yè)自身所特有的痛點提供了解決方案。
目前提供 Java 和 C++ 兩種語言版本:
基于原生的 gRPC 框架做了很多服務(wù)治理的功能開發(fā),相當于使 gRPC 從一個簡單的 RPC 框架變成了微服務(wù)框架。項目從 2018 年 7 月開始建設(shè),2019 年 1 月份一期上線,開發(fā)周期 5 個月,今年 6 月份選擇開源,時間不到一年。
gRPC 本身對于研發(fā)團隊是一個新的技術(shù)方向,對源代碼的熟悉、與業(yè)界的交流也都是近一年才開始;另外 gRPC 框架本身并不具有微服務(wù)特性,技術(shù)框架、注冊中心的選型,服務(wù)治理的特性開發(fā)也都經(jīng)歷了非常多的討論和取舍;同時微服務(wù)框架對于整個券商來說也是新生事物,都會有個逐步接受的過程。
gRPC-Nebula 最早是基于 gRPC1.12 版本做的開發(fā),目前開源的版本基于 1.17.2 版本,業(yè)務(wù)方面對 Nebula 也提出了很多需求,光是針對 1.12 版本就經(jīng)過了 6 個版本的迭代優(yōu)化。
主要有 5 大方面改進:
-
服務(wù)自動注冊與發(fā)現(xiàn):采用 zookeeper 為注冊中心,服務(wù)與注冊中心之間保持長連接,具有心跳檢測機制,能夠周期性的檢查服務(wù)的狀態(tài),確保服務(wù)可用性狀態(tài)一致性,可處理服務(wù)進程意外終止,服務(wù)器宕機等場景。
-
服務(wù)調(diào)用負載均衡:對于多實例的服務(wù)的調(diào)用,提供對多個服務(wù)實例的負載均衡調(diào)度,實現(xiàn)負載按照預期的調(diào)度算法進行調(diào)度執(zhí)行。
-
服務(wù)流量控制:通過設(shè)置請求數(shù)或連接數(shù)上限,動態(tài)實現(xiàn)對各服務(wù)接口的流控管理。
-
服務(wù)黑白名單機制:通過設(shè)置服務(wù)端實例的黑名單、白名單,動態(tài)實現(xiàn)請求流程的轉(zhuǎn)移以及服務(wù)端實例的訪問控制。
-
服務(wù)調(diào)用異常處理:當客戶端調(diào)用服務(wù)實例連續(xù)多次出錯時,框架會自動進行服務(wù)實例切換。
gRPC-Nebula 開發(fā)框架在東方證券內(nèi)部應(yīng)用主要包括:行情中心、日志中心、交易接受中心、運營平臺等,7 到 8 個能力中心、產(chǎn)品線在應(yīng)用,下一步計劃內(nèi)部進行大規(guī)模的推廣,會使其成為內(nèi)部的架構(gòu)標準。
相對于原生 grpc 框架,gRPC-Nebula 主要是引入了注冊中心,Java、C++ 嵌入了服務(wù)注冊發(fā)現(xiàn)功能、黑白名單、鏈接 / 流量控制等安全方面的功能;同時開發(fā)了服務(wù)治理平臺,對服務(wù)進行統(tǒng)一管控;結(jié)合 APM 系統(tǒng),利用 kafka 進行整體調(diào)用鏈的信息收集,并使用 MySQL 數(shù)據(jù)庫存儲元數(shù)據(jù),在治理平臺上進行各類數(shù)據(jù)展示。
性能:與 Dubbo 及原生 gRPC 框架相對 ,gRPC-Nebula 性能差距不大,大概損耗 1% 到 2% 左右。
優(yōu)勢:跨語言,具有服務(wù)治理、微服務(wù)的特性;
介紹內(nèi)容來自 InfoQ
