開源 | 螞蟻金服分散式中間件開源第二彈:豐富微服務架構體系

開源 | 螞蟻金服分散式中間件開源第二彈:豐富微服務架構體系

螞蟻金服自主研發的分散式中間件(Scalable Open Financial Architecture,以下簡稱 SOFA 中間件)包含了構建金融級雲原生架構所需的各個組件,包括微服務研發框架,RPC框架,服務註冊中心,分散式定時任務,限流/熔斷框架,動態配置推送,分散式鏈路追蹤,Metrics監控度量,分散式高可用消息隊列,分散式事務框架,分散式資料庫代理層等組件,是一套分散式架構的完整的解決方案,也是在金融場景里錘鍊出來的最佳實踐。

一個多月前,螞蟻金服開源了 SOFABoot 和 SOFARPC 兩個組件,受到了社區的熱烈歡迎(點擊文章閱讀《開源|螞蟻金服啟動分散式中間件開源計劃,用於快速構建金融級雲原生架構》,了解更多),也收到了很多大家的反饋,其中大家對開源更多組件的呼聲很大哦~!

本次 SOFA 中間件將繼續開源微服務體系下的幾個組件:包括分散式鏈路追蹤(SOFATracer)客戶端、Metrics監控度量(SOFALookout)客戶端、SOFARPC 的 Nodejs 版實現。同時還開源了SOFABoot 下的模塊化開發框架,以及 SOFARPC 的 HTTP/2 能力等。下面將逐一進行簡單介紹。

SOFATracer

SOFATracer 是一個用於分散式系統調用跟蹤的中間件,通過統一的 traceId 將調用鏈路中的各種網路調用信息以日誌或者上報的方式記錄下來,以達到透視化網路調用的目的。這些日誌可用於故障的快速發現,數據統計,服務治理等。

為了解決在實施大規模微服務架構時的鏈路跟蹤問題,SOFATracer 基於 OpenTracing(opentracing.io) 規範並擴展其能力,包括基於Disruptor 高性能無鎖循環隊列的非同步落地磁碟的日誌列印能力,自定義日誌格式,日誌自清除和滾動能力,基於SLF4J MDC 的擴展能力,統一的配置能力等。同時 SOFATracer 也對接了開源生態,可以選擇將 Tracer 數據對接到 Zipkin 等開源產品。

SOFATracer 的 Github 的地址是:

github.com/alipay/sofa-

歡迎大家使用反饋、貢獻代碼。

SOFALookout

SOFALookout 是一個利用多維度的 Metrics 對目標系統進行度量和監控的中間件。

Lookout 的多維度 Metrics 參考 Metrics 2.0(metrics20.org/spec)標準,提供一整套 Metrics 的處理,包括數據埋點、收集、加工、存儲與查詢等。SOFALookout 包括客戶端與伺服器端服務兩部分,本次先開源客戶端部分,服務端部分代碼在整理中。

SOFALookout 客戶端提供了一套 Metrics API 標準,通過它可以方便地對 Java 應用的 Metrics 進行埋點統計。為了方便使用,SOFALookout 客戶端默認提供一些擴展模塊,它們提供 JVM,OS 等基本 Metrics 信息的統計,遵循該擴展機制,我們可以自定義或集成更多的 Metrics 數據。

另外,SOFALookout 客戶端除了支持向 SOFALookout 服務端上報數據外,還支持與社區主流的相關產品,包括Dropwizard,(SpringBoot)Actuator以及 Prometheus 等進行集成和數據適配。

SOFALookout 的 Github 的地址是:

github.com/alipay/sofa-

歡迎大家使用反饋、貢獻代碼。

Eggjs 集成

每種語言都有自己最擅長的領域,跨語言友好性對於分散式架構也是非常重要的。

在螞蟻內部還有一套 Nodejs 版本的 SOFA 中間件的實現,包含了絕大部分 Java 版本的功能,並將它們集成到已經開源的企業級 Nodejs 框架 Eggjs(eggjs.org)中,形成了一套完整的 Web MVC 和 BFF (Backend ForFrontend) 解決方案。

這套架構目前廣泛應用於螞蟻的 Web 開發和多端適配等場景,讓各崗位有了更清晰的職責劃分,服務端(一般是 Java)提供基於領域模型的 RPC 介面,前端調用介面拿到數據後進行剪裁和格式化,並實現人機交互。領域模型與頁面數據是兩種思維模式,通過分層可以很好地解耦,讓彼此更專業高效。後面我們也會陸續開源 SOFA 中間件的 Nodejs 版本實現,本期會先放出 SOFARPC 相關的兩個模塊:

SOFARPC Node 的 Github 的地址是:

github.com/alipay/sofa-

SOFABolt Node 的 Github 的地址是:

github.com/alipay/sofa-

歡迎大家使用反饋、貢獻代碼。

SOFABoot

在最新的 SOFABoot 2.4.0 版本中,SOFABoot 新增加了基於 Spring 上下文隔離的模塊化開發能力。

在企業級應用場景,隨著應用系統模塊的增多,每個業務模塊之間的耦合也會越來越嚴重,業務模塊的自測更加複雜,團隊之間的溝通成本增加。模塊化開發是該問題的有效解決方案,但是 Spring Boot 默認不支持模塊化開發,所有 Bean 共用一個 Spring 上下文。為此,SOFABoot 提出 SOFABoot 模塊的概念,每個業務團隊專註於開發自己的 SOFABoot 應用模塊,模塊自包含模塊的代碼和配置,擁有獨立的 Spring 上下文,便於開發及自測,減少團隊間的溝通成本。

SOFABoot 模塊間通信使用 JVM 服務進行通信,避免模塊之間的耦合;如果遠程服務在本地其它本地模塊中存在,可優先調本地提高性能。同時 SOFABoot 提供了模塊並行啟動及 Bean 非同步初始化能力,大幅提高應用啟動速度。

SOFABoot 的 Github 的地址是:

github.com/alipay/sofa-

歡迎大家使用反饋、貢獻代碼。

SOFARPC

在最新的 SOFARPC 5.4.0 版本中,SOFARPC 基於事件擴展機制,集成了 SOFATracer 和 SOFALookout 兩個微服務體系產品,完善了自身的服務監控度量以及分散式跟蹤功能。

用戶可以通過 SOFATracer 對接到 Zipkin 查看服務調用跟蹤信息,也可以通過 SOFALookout 對接到 Prometheus 查看服務度量信息。

新版本的 SOFARPC 中還增加了 HTTP/1.1 和 HTTP/2 協議的支持,在跨語言等場景下可以快速通過標準的 HTTP 協議進行通信。SOFARPC 也與 Eggjs 進行了打通了 Bolt 協議,方面用戶在 Java 和 Nodejs 之間高效通信。

SOFARPC 的 Github 的地址是:

github.com/alipay/sofa-

歡迎大家使用反饋、貢獻代碼。

Jarslink 2.0

JarsLink 是螞蟻金服內部使用的一個基於 JAVA 的模塊化開發框架,它提供在運行時動態載入模塊(一個JAR包)、卸載模塊和模塊間調用的 API。

目前 Jarslink 2.0 在緊張開發之中,Jarslink2.0是在 Jarslink1.0 基礎之上,結合 SOFABoot類隔離框架,提供了更加通用的應用(模塊)隔離和通信的實現方案,敬請期待!

Jarslink 的 Github 的地址是:

github.com/alibaba/jars

歡迎大家使用反饋、貢獻代碼。

附錄

附本文中提到的鏈接:

SOFATracer: github.com/alipay/sofa-

SOFALookout: github.com/alipay/sofa-

SOFABoot: github.com/alipay/sofa-

SOFARPC Node: github.com/alipay/sofa-

SOFABolt Node: github.com/alipay/sofa-

Eggjs: eggjs.org

SOFARPC: github.com/alipay/sofa-

JarsLink: github.com/alibaba/jars

SOFAStack系列文章知乎專欄:zhuanlan.zhihu.com/sofa

交流社群

最後,我們也為對 SOFA 中間件感興趣的同學準備了微信的交流群,歡迎感興趣的同學掃描下方二維碼聯繫加群小助手加入我們 SOFA 交流群討論和諮詢相關問題哦。

加 「Ant-Techfin01」 好友回復「SOFA」進群

推薦閱讀:

什麼是redis?Redis的各項功能解決了哪些問題?以及redis的入門實戰
快速排障,VI能幫你做什麼
健身不忘編程序,阿里巴巴工程師研發「代碼單車」
如何配置WAS服務跟隨系統啟動
(譯) IBM WAS 6.1 Web container problem determination

TAG:分散式系統 | 中間件 | 微服務架構 |