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

螞蟻金服 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)

    分享創造快樂