歡迎光臨
每天分享高質量文章

螞蟻金服 SOFADashboard 啟動開源共建 | SOFAStack 一站式管控平臺

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

    已同步到看一看
    贊(0)

    分享創造快樂