SOFAStack
Scalable Open Financial Architecture Stack 是螞蟻金服自主研發的金融級分散式架構,包含了構建金融級雲原生架構所需的各個元件,是在金融場景裡錘煉出來的最佳實踐。
為了建設更完整的 SOFAStack 微服務體系,我們計劃發起 SOFADashboard 專案,計劃透過社群的方式共建,將其打造為一站式的 SOFAStack 管控平臺。歡迎共建~
SOFADashboard:
https://github.com/alipay/sofa-dashboard [1]
背景
從 2018 年 4 月 19 日宣佈開源至今,SOFAStack 目前已經開源了包括 SOFABoot、 SOFARPC、SOFALookout、SOFATracer、SOFARegistry 等在內的一系列微服務相關的專案,並投入分散式事務 Seata 進行重要貢獻。隨著 SOFAStack 架構體系的不斷豐富和完善,外部對於 SOFAStack 的管控平臺的需求也愈加強烈。
由於 SOFAStack 內部的管控平臺依賴眾多的內部基礎設施,為了建設更完整的 SOFAStack 微服務體系,我們計劃發起全新的 SOFADashboard 專案,計劃透過社群的方式共建,將其打造為一站式的 SOFAStack 管控平臺。
能力大圖
SOFADashboard 作為一站式 SOFAStack 管控臺,希望對 SOFAStack 各個元件的使用等進行統一管理。為此我們為 SOFADashboard 規劃一版能力圖,包含了微服務裡的一些能力點,例如應用資訊管理、服務治理、配置管控、動態模組等等。見下圖所示:
每個能力點對應的實現我們都做了一層抽象。例如服務檢視需要從註冊中心獲取資料,我們封裝了一層服務串列獲取介面,底層可以是從 Zookeeper 或者 SOFARegistry 等不同的註冊中心實現讀取服務串列。
技術棧選擇
為了最大限度的降低開發成本、部署成本及運維成本,SOFADashboard 會基於開源社群優秀的產品來進行開發構建。經過討論,最終選擇社群主流的前後端分離思路,具體的元件包括:
-
Ant Design:基於 React [2] 封裝的一套 Ant Design 的元件庫,主要用於研發企業級中後臺產品。從產品成熟度、社群活躍度、框架上手難易程度等各個方面均有很好的表現。
-
SOFABoot:螞蟻金服開源的基於 Spring Boot 的研發框架,它在 Spring Boot 的基礎上,提供了諸如 Readiness Check,類隔離,日誌空間隔離等能力。在增強了 Spring Boot 的同時,SOFABoot 提供了讓使用者可以在 Spring Boot 中非常方便地使用 SOFA 中介軟體的能力。
-
MyBatis:Mybatis 相對於 JPA 來說,上手難度略低,JPA 更加傾向於結合 DDD 使用(業務越複雜,對於DDD 的需求越高);對於簡單的增刪改查業務操作,Mybatis 相對來說更靈活和可控。
v1.0 釋出
4 月 30 日,我們上傳了第一個 SOFADashboard 版本,主要能力包括:應用資訊、服務檢視、動態模組管控等。
目前演示地址:
http://dashboard.dev.sofastack.tech:8000 [3]
詳細設計圖
基礎依賴
從架構圖中可以看到,目前 SOFADashboard 中的服務治理、SOFAArk 管控等需要依賴於 Zookeeper 和 MySQL;它們承擔的解決如下:
外部依賴 | 作用 | 備註 |
Zookeeper | 註冊中心 | SOFARPC 服務治理 |
配置推送 | SOFAArk 管控 | |
MySql | 資源儲存 | 註冊的 ark-biz 資訊,外掛與應用的關聯資訊,外掛版本資訊等 |
應用面板
SOFADashboard 支援檢視應用的 IP、埠、健康檢查狀態等基本資訊,此功能依賴 SOFADashboard client。SOFADashboard client 用於向 SOFADashboard 服務端註冊 IP、埠、健康檢查狀態等應用基本資訊;SOFADashboard client 並非是直接透過 API 呼叫的方式將自身應用資訊直接註冊到 SOFADashboard 服務端 ,而是藉助於 Zookeeper 來完成。
客戶端向 Zookeeper 中如上圖所示的節點中寫入資料,每一個 ip:port 節點代表一個應用實體,應用本身資訊將寫入當前節點的 data 中。
如果一個應用需要將應用資訊展示到 SOFADashboard 管控端,可以透過引入客戶端依賴即可,具體使用參考 SOFADashboard client 快速開始 [4]。
服務治理
SOFADashboard 服務治理是對 SOFARPC 的服務進行管理,服務治理管控臺部分,主要包括基於服務名查詢和服務資訊串列展示兩個基礎能力。在服務治理管控臺介面,可以直觀的看到當前服務的一些基本元資料資訊:
當點選 服務 ID 對應的超連結時,會進入到當前服務的詳情頁;服務提供者詳情頁中,可以看到當前服務所有的提供方資訊串列,每個 item 行對應一個服務提供方實體,透過此介面可以快速檢視服務的 providers 資訊。
服務消費者詳情頁中,可以看到當前服務所有的消費方資訊串列。
SOFAArk 管控
SOFAArk [5] 本身提供了多種方式來支援多應用(模組)合併部署 ,包括基於命令列的管控,基於 API 的管控等;SOFAArk 管控是 SOFADashboard 針對 API 管控的一種實現。透過面向 Zookeeper 進行命令的推送和命令的解析執行。SOFAArk 管控主要包括以下功能:
-
外掛註冊
將 ark-biz 外掛註冊到 SOFADashboard,作為基礎資料,統一管控。
外掛基本資訊錄入:
外掛串列:
-
關聯應用
將 ark-biz 外掛與宿主應用進行系結,此關聯資訊在 SOFAArk 多應用(模組)合併部署中作為重要的基礎資訊存在。在後續的操作中,可以透過此關聯關係檢視到某個外掛下掛載的應用資訊。
-
外掛詳情
透過外掛詳情頁,可以看下當前 ark-biz 外掛下所有關聯的宿主應用資訊,以及宿主應用中的 ark-biz 狀態資訊,外掛詳情頁中,可以檢視所有關聯此外掛的應用中,外掛的狀態資訊。
-
命令推送
命令推送是 SOFADashboard 中提供 SOFAArk 管控的核心能力,透過面向 Zookeeper 程式設計的方式,將指令資訊傳遞給各個宿主應用中的 ark-biz 模組,ark-biz 在接收到相關指令之後再進行相應的行為,如安裝、切換、解除安裝等。
可以針對應用維度、IP 維度推送一些指令,比如 install、uninstall 等等,當這些命令被寫入到 Zookeeper 的某個節點上時,所有監聽此節點的宿主應用均會解析此指令,併進行相關的操作。
基於 IP 維度推送如圖例所示,每個應用實體表單預設會有對應的操作,可以透過展示的命令按鈕操作當前實體行為:
點選 安裝按鈕,延遲 1~1.5s 之後 介面將會掃清新的狀態:
基於應用維度此處不再贅述。
社群共建
SOFADashboard 作為整個 SOFA 體系的“管家”,目前在能力上還比較薄弱;與其他 SOFAStack 產品不同的是,SOFADashboard 是一款從一開始就希望社群共建的,天然定位開放到社群的產品。隨著 SOFAStack 體系內產品的不斷豐富,SOFADashboard 希望透過社群共建的方式來錘煉和完善功能,大家可以提出不同的需求,建設更多的能力,從而更好的服務整個 SOFAStack 技術體系。
待建設串列如下,歡迎大家參與貢獻:
任務串列 | 進度 | 計劃版本 |
整合 SOFARegistry | 開發中 | 1.1.0 |
完善應用面板功能,支援多維度的應用資訊展示 | — | 1.1.0 |
完善服務治理能力,包括權重設定,服務降級等 | — | 1.1.0 |
增加鏈路分析展示功能 | — | 1.2.0 |
整合 Apollo | — | 1.3.0 |
支援 Docker | — | — |
支援 Kubernetes | — | — |
前端最佳化 | 持續進行中 | — |
小結
本文介紹了 SOFADashboard 產生的背景,並對 SOFADashboard 提供的功能進行了介紹。隨著 SOFAStack 架構體系的不斷完善,SOFADashboard 也將會承擔更多的管控能力。在功能豐富和前端最佳化上,希望可以有更多的同學能夠參與,一起打造一個功能完備、簡單易用的 SOFADashboard。
文章涉及相關連結
[1] SOFADashboard:
https://github.com/alipay/sofa-dashboard
[2] React:
http://facebook.github.io/react/
[3] 演示地址:
http://dashboard.dev.sofastack.tech:8000
[4] SOFADashboard client 快速開始:
https://github.com/alipay/sofa-dashboard-client
[5] SOFAArk:
https://www.sofastack.tech/sofa-boot/docs/sofa-ark-readme
朋友會在“發現-看一看”看到你“在看”的內容