Categories
程式開發

國信證券開源自研的微服務開發框架 Zebra


Zebra 為國信證券自主研發的一個高性能微服務開發框架,應用於國信證券金太陽 App 各個業務的後端,已穩定運行 2 年多。

發展歷程如下:

  • 2017.10 – 2018.04:完成首版本的設計與開發。
  • 2018.04 – 至今:應用於國信證券金太陽 App 後端;同時持續優化框架。
  • 2019.12:發布第一個開源版本。
  • 2019.12 – 後續:計劃在國信證券內部推廣使用,並持續將代碼貢獻到開源社區中。

背景

隨著國信證券業務的發展及用戶數的增長,對技術的要求日益提高。原有系統的基礎架構已不能很好地支撐業務的訴求,制約了業務的快速創新和敏捷交付。

新基礎架構的推出迫在眉睫,需滿足下面幾個基本訴求:

  • 架構本身方面:高性能、穩定,券商 App 最主要業務為股票交易,對於後台的性能和穩定性要求十分苛刻。
  • 開發方面:框架輕快,支持 DevOps,快速打包,獨立部署。
  • 運維方面:支持高效運維,多維度立體化的監控,支持灰度發布等。

微服務架構可以較好滿足上述需求。

2015 年為微服務的元年,到 2017 已有兩年多,在互聯網有較多的應用,相關的基礎組件也較為成熟,新架構採用微服務可謂水到渠成。

系統介紹

自研微服務框架原因

在微服務框架選型階段調研了當時業界使用較多的兩個框架:Spring Cloud 和 Dubbo。

各自存在的不足之處如下:

1.Spring Cloud

  • 使用基於 HTTP 的 RESTful 通信協議,性能比 RPC 低。
  • 接口協議約定比較自由且鬆散。
  • 各種管理 UI 分散且較為簡陋,運維不方便。

2.Dubbo

  • 17 年 Dubbo 處於停滯狀態,下半年才重啟維護。
  • 其定位為 RPC 框架,為微服務生態體系中的一個重要組件,不是一套完整的微服務解決方案,只提供少量的服務治理功能。
  • 僅支持 Java 語言。

兩個框架都不能很好滿足國信證券的需求,所以最終決策自研微服務框架。當然也不是從零開始另造輪子,而是藉鑑已有的微服務框架設計思想,引入已有的開源軟件,在其上面構築出符合國信證券需求的微服務框架。

架構

架構圖

Zebra 架構圖

組件說明

組件 說明
配置中心 微服務配置統一管理、版本支持、配置分離,保證服務無狀態。
服務中心 展示服務狀態,服務依賴關係,服務 API 管理,監控展示。
註冊中心 服務自動註冊、自動發現、負載均衡、異常保護、異常通報下發、服務降級。
監控中心 基於 Prometheus 協議,實現應用監控、異常上報、功能主動監控。
Zebra 微服務 基於 SpringBoot,極大地簡化開發工作
微服務通信協議採用高性能的 gPRC
使用阿里巴巴的 Sentinel 做流量控制
API 網關 通過服務中心界面配置路由,對外暴露 HTTP 端口,路由後自動轉換為內部 gRPC 調用。

關鍵組件

通信協議採用 gRPC

由於性能的原因,通信協議一開始就確定使用 RPC,而非 HTTP + RESTful。

在對比了谷歌 gRPC、阿里 Dubbo 和騰訊 TARS 之後,最終確定使用 gPRC 作為底層 RPC 框架。

gRPC 由 Google 開發。使用最新的網絡傳輸協議 HTTP2,通過使用流的單個 TCP 連接來實現低延遲和多路復用請求。與 REST over HTTP / 1.1 相比,gRPC 非常快速和靈活。

選用 gRPC,因為 gRPC 有以下幾個優勢:

  • 多語言支持,涵蓋了國信金太陽使用的開發語言;
  • 社區活躍,生命力強;
  • 支持 IOS、Android,支持 SSL 和自定義鑑權(支持國密),可以簡單實現客戶端到後台的多路復用、RPC 調用;
  • 配套有相應的開源組件可以使用,最終可以做到全面自主掌控;
  • 只有通信層依賴於 gRPC,所以容易替換;
  • TARS 與管理平台過於耦合,gRPC 只是負責通信,不與管理平台耦合,這樣容易做到已有架構到 gRPC 架構的平滑遷移;
  • gRPC 通信組件為 Netty,Netty 是現在最流行的通信組件,而 TARS 是騰訊自己寫的,騰訊如果不維護就將無法維護;
  • gRPC 使用 PB 協議,此協議在互聯網上廣泛使用,生命力強;
  • 支持流 stream,在流的基礎上實現了 Server Push,方便做變更通知,不再需要客戶端做費力的 Long Pull;

註冊中心採用 Etcd

註冊中心選型對比了 Etcd 和 Zookeeper。

Etcd 為 Zookeeper 的後起之秀,靈感來源於 Zookeeper,在實現上做了較多的改進。

  • 接口輕量化,基於 HTTP,不依賴專有客戶端。
  • 使用更加簡單的 Raft 來實現一致性。
  • 開發及運維相對 Zookeeper 更加簡單。

從技術的發展趨勢來看,容器化是大勢所趨,當微服務發展到一定程度時,基本都會上 Kubernates,Kubernates 也使用 Etcd 作為其核心組件,採用 Etcd 也可以減少後期維護成本。

最終選型了 Etcd 做為服務註冊中心。

集中管理界面

通過服務中心將各個管理界面統一集成,方便運維操作。

服務中心

不僅僅是微服務框架

Zebra 不僅僅是一個微服務框架,更是集成了開發常使用的 Java 第三方軟件,方便業務開發者的開發。

無論是傳統的單體開發還是現代的微服務開發,開發者往往會使用到各種第三方軟件(比如Mybatis、MQ 等),而各種軟件都必須開發者做各種大同小異的集成工作或者公共代碼的開發。為此 Zebra 微服務框架提供了常用的第三方軟件的集成,以便

  • 減少開發者的重複工作,提高開發效率。
  • 適配 Zebra 配置中心,讓其可以通過 Zebra 配置中心進行統一的配置,方便運維管理。

已集成的第三方組件如下:

  • MyBatis
  • MQ(基於 RocketMQ)
  • 本地、Redis 緩存
  • 分庫分錶(基於 Sharding-JDBC)
  • 讀寫分離(基於 Sharding-JDBC)
  • 分佈式鎖(基於 Redis)

後續會根據業務和社區的需求,不斷集成各種第三方軟件,如 Elastic-Job(計劃 2020 年提供)等。

應用效果

Zebra 已應用於國信證券金太陽的交易、理財、資訊、業務辦理和首頁等業務,上線的微服務數量 30+ 個,穩定運行 2 年多。

開源

當前代碼已開源,歡迎大家使用和貢獻代碼 :-]

代碼地址:https://gitee.com/gszebra/zebra

文檔地址:https://www.kancloud.cn/gszebra/zebra_doc/content

作者介紹:

鄧啟翔 ,國信證券 Zebra 微服務技術負責人,具有多年網絡框架和分佈式系統架構設計及研發經驗,對微服務有深刻理解。曾就職於平安、匯添富基金,資深架構師。

陳培新, 國信證券軟件工程師,2019 年加入國信證券參與 Zebra 微服務研發。 2012 至 2019 年就職於華為,先後參與電信領域 OSS 系統、編排中台的設計與研發工作。 Java 資深工程師,目前專注於微服務領域的設計與開發。