微服務低程式碼Serverless平台(星鏈)的應用實踐

導讀

星鏈是京東科技消金基礎研發部研發的一款研發效能提升的工具平台,面向後端服務研發需求,尤其是集成性、場景化、訂製化等難度不太高、但比較繁瑣的需求,如服務前端的後端(BFF)、服務流程編排、非同步消息處理、定時任務、運營後台、工作流程自動化、臨時性需求等,以低程式碼方式開發微服務,以聲明式進行Serverless部署,使研發人員聚焦業務邏輯而非各類細節,大幅提升研發效能、降本增效。

1 星鏈是什麼

星鏈是京東科技消金基礎研發部研發的一款研發效能提升的工具平台,面向後端服務研發需求,尤其是集成性、場景化、訂製化等難度不太高、但比較繁瑣的需求,如服務前端的後端(BFF)、服務流程編排、非同步消息處理、定時任務、運營後台、工作流程自動化、臨時性需求等,以低程式碼方式開發微服務,以聲明式進行Serverless部署,使研發人員聚焦業務邏輯而非各類細節,大幅提升研發效能、降本增效。

星鏈提供了一個統一的Web介面,用戶通過它可以完成微服務的開發、調試、構建、測試、部署完整流程。在開發方面,除了支援可視化配置、組件化流程編排,同時支援Java/JavaScript/Groovy等語言,支援引入第三方包,且與Git集成,在低程式碼的同時不降低靈活性與可控性。在部署方面,實現了聲明式部署, 用戶不需要關注伺服器細節,系統跨集群分組統一智慧調度共享的計算資源,在自動滿足部署需求的同時節省計算成本,此外,星鏈是熱載入,實現了秒級部署,還有,星鏈充分考慮了大中型企業內部的實際情況,不同團隊的服務完全隔離,測試、預發、生產服務完全隔離,支援灰度發布、加密參數等,計算資源既支援傳統虛機,也支援K8s,支援部署至私有雲和其他公有雲,實現了企業級Serverless。

星鏈自19年3月份第一版上線以來,不斷迭代完善,除廣泛支援消費金融各場景業務外,還支援了集團很多其他部門的業務,如財富、支付、營銷中台、保險等,歷經多次618、雙11性能和穩定性考驗。為了支援對外交付,應用於更為廣泛的場景,星鏈在21年進行了模組化和產品化改造,不再依賴京東特有中間件,在22年3月份上線京東公有雲,支援對外服務。

2 星鏈核心概念

星鏈有兩個核心概念:VMS和Serverless,下面分別介紹。

2.1 VMS

VMS是指可視化微服務(Visual MicroService),表示一個輕量級微服務應用,是星鏈中開發和部署的基本單元,稱為「可視化」主要是星鏈支援且提倡以可視化的方式來編排微服務邏輯,VMS同時表示一個簡單靈活的微服務編程模型,如圖1所示。

圖1 VMS編程模型

這個模型的基本思路是讓微服務應用的內外依賴組件化、配置化,使開發人員可以聚焦業務邏輯,包含三個核心概念:函數、連接器和觸發器。函數封裝業務邏輯,由標準的輸入/輸出以及函數體組成,支援程式碼函數和BPMN函數。程式碼函數支援Java、Groovy、JavaScript三種語言,未來會支援更多語言。BPMN函數利用BPMN標準可視化地編排業務邏輯,可以引用程式碼函數,也可以引用其他BPMN函數,構建複雜業務流程。連接器封裝第三方服務,包括RPC服務、HTTP服務、非同步消息、快取服務、配置服務、資料庫等。觸發器封裝函數對外提供服務的方式,支援RPC、HTTP REST API、定時任務和MQ消息觸發,每個觸發器關聯一個函數。星鏈會不斷拓展支援新的觸發器和連接器類型,未來也會開放SDK給用戶自定義星鏈不支援的類型。

2.2 Serveless

星鏈的Serverless概念不是沒有伺服器,而是盡量抽象,使用戶盡量減少對伺服器細節的關注。用戶仍然需要關注計算資源,尤其在企業內,用戶需要關注資源成本分攤,需要關注資源所處的機房以保證高可用性,星鏈對用戶需要關注的事情進行了抽象,建立了一個計算資源模型和聲明式部署模型。星鏈計算資源模型如圖2所示。

圖2 計算資源模型

這個模型既支援傳統虛機,也支援K8s,集群和分組都是計算資源的抽象,一個集群下有多個分組。集群主要是為了方便管理多個分組,主要屬性就是名稱和備註,分組有一個環境屬性:測試、預發或生產,還有資源類型屬性,資源類型支援虛機和K8s。對於K8s類型,一個分組關聯一個K8s namespace,星鏈自動創建和管理計算引擎Pod。對於虛機,需通過其他方式創建計算引擎,然後將引擎IP關聯至星鏈分組。用戶在開發、調試、測試階段不需要申請任何計算資源。部署生產時,需自行申請K8s資源或虛機資源,然後關聯到星鏈集群和分組,每個團隊只需申請和配置一次。聲明式部署對於K8s分組和虛機分組都是一樣的,模型如圖3所示。

圖3 聲明式部署模型

每個環境(測試、預發、生產)有不同的部署配置。每個環境下可以有多個部署配置,以流量入口加以區分。每個入口配置可能包括多個條目,每個條目聲明在哪個集群分組、部署哪個版本、期望的實例個數配置等。系統將智慧分配計算資源,監控運行狀況,確保滿足部署聲明要求。

3 星鏈應用場景

星鏈有很多應用場景,下面分別介紹。

3.1 業務流程編排

在微服務系統中,有很多各類微服務,但可以粗分為兩類,一類是相對穩定的、與場景關係不大的、沉澱下來的領域原子微服務,另一類是相對變化多端的、面向場景的、數量眾多的場景化微服務,場景化微服務往往通過整合編排原子化微服務來實現業務流程,而針對不同場景,其流程是不同的,針對一個新的場景,通過創建VMS,可以快速可靠地編排流程,並且將流程可視化,使得業務、產品、測試也都能夠理解該流程,提升協作效率,同時每個新場景獨立開發和部署,易於管理,不影響現有業務。

3.2 服務前端的後端(BFF)

前端有多種介質,如PC、移動APP、H5、小程式等,每種介質需要的介面可能是不太一樣的,前端需要的數據格式與後端微服務也可能不同,另外,前端一個介面需要的數據往往需要後端多個微服務組合提供,可以通過創建VMS來快速滿足這些面向前端的介面數據聚合、介面數據適配等需求。

3.3 非同步消息處理

在微服務架構中,不同微服務之間往往依賴非同步消息進行協同,在一個系統中往往有大量的消息監聽邏輯,其中很多處理邏輯往往比較簡單,如只是維護快取、同步狀態、轉換消息格式等,可以將這些膠水層的消息處理邏輯放到VMS中,以便開發和管理。

3.4 運營後台服務

運營後台往往有很多訂製需求,這些需求往往只是一些查詢需求,或者是一些簡單的更新邏輯,實現這些需求難度不大,但很繁瑣耗時,通過VMS來實現這些需求,使用流程編排和配置資料庫相關連接器就可以滿足需求,不需要寫程式碼。

3.5 定時批處理任務

在一個微服務架構的系統中,往往有很多定時批處理任務,這些任務往往只是凌晨執行,將這些任務構建為VMS,Serverless部署可以大幅節省計算資源。

3.6 臨時性業務需求

在實際業務中,往往有很多臨時性的業務需求,如提供臨時性的運營活動介面、報表、臨時數據處理等,通過VMS來實現這些需求,一方面可以快速交付,另一方面Serverless部署,不需要關注計算資源,此外,與現有穩定業務程式碼相隔離,獨立開發和部署,便於管理,不用時可以隨時下線。

3.7 工作流程自動化

在日常工作中,往往有一些工作需要自動化,比如異常日誌管理:每日查詢線上異常日誌,將重要的異常日誌匯總,通過郵件發送給團隊成員,團隊成員進行回饋。傳統方式是手工操作的,比較繁瑣,用程式實現也比較麻煩,且沒有合適的應用/伺服器承載這些功能,通過星鏈開發和部署進行工作流程自動化,開發方便,部署簡單。

3.8 工作流程自動化

一個VMS內可以創建多個觸發器、函數和連接器,可以寫Java/Groovy/JavaScript程式碼,可以引用第三庫,可以通過配置的方式訪問資料庫,且支援事務,這樣,業務邏輯不太複雜的普通業務需求都可以通過VMS來實現。

4 星鏈優勢
星鏈所能做的事情,通過傳統開發和部署也可以做,那用星鏈有什麼優勢呢?以下這些是來自大量用戶的回饋。

  • 開發快:比如,原來開發一個功能要四五天,現在兩三天就可以了,而且流程可視化,功能邏輯一目了然。
  • 部署快、省心:原來部署經常要1~2個小時,現在幾秒鐘就完成了;VMS部署粒度更小了,獨立部署,不像原來一個大應用里改了部分公共程式碼,老擔心影響其他業務流程。
  • 不用管理伺服器:不用每個應用都申請計算資源,團隊申請一次就可以了。
  • 節省成本:大多數伺服器計算資源利用率都比較低,星鏈通過讓多個VMS共享計算引擎和動態調度,可以大幅提升計算資源利用率,節省成本。
  • 常用庫、中間件升級方便:公司內部各種中間件經常升級、由於安全漏洞等原因各種常用庫也需要經常升級,使用星鏈,不需要用戶修改程式碼,只需要一鍵更新星鏈引擎就可以了。
  • 便於協作:產品、研發、測試通過統一的Web視圖進行協作,方案評審、程式碼評審不需要再畫單獨的流程圖,BPMN圖即真實流程,點擊節點即可查看實現細節。
  • 賦能前端研發:後端很多服務只有Java SDK,而沒有Node.js SDK,對於BFF層的工作,即使前端研發有時間可以做,也因為缺乏Java技能而做不了,星鏈提供了低程式碼平台,且支援JavaScript,這樣,原來必須要後端做的事情前端研發也可以做了。
  • 促進產生更好的設計:通過BPMN圖表達業務邏輯,可以更容易促使用戶去思考和梳理整體邏輯,將實現細節封裝到具體節點中,從而產生更清晰完善的設計。

5 星鏈產品功能

下面介紹星鏈提供的各種功能及特色。

5.1 可視化低程式碼 Cloud Web IDE

星鏈提供了一個低程式碼Cloud Web IDE,通過可視化微服務編排提高開發效率,如圖4所示。

圖4 Cloud Web IDE

星鏈IDE支援的特性有下面這些。

  • 可視化BPMN編排:支援編排各種連接器方法、程式碼函數、其他BPMN函數,支援分支、異常處理,支援DB事務,自動提示請求參數、環境變數、中間節點的輸出結果等上下文資訊,支援使用表達式表達複雜的條件分支、輸入變數。
  • 自定義DB/HTTP連接器:可自定義連接器方法列表,出入參定義支援三種模式:表格、YAML、CSV,支援根據JSON示例推斷參數定義,配置的連接器方法可用於BPMN編排和程式碼函數,DB連接器方法可參與事務。
  • 可視化觸發器配置:各種觸發器通過介面配置觸發機制和調用的函數即可,不需要開發。
  • 表達式編輯器:支援語法高亮、程式碼提示,有方便的示例和幫助文檔,有豐富的內置函數庫,可方便構造Map和List組成的複雜對象,支援各種運算。
  • 在線開發程式碼函數:可視化定義函數出入參,支援Java/JavaScript/Groovy,語法高亮,內置API訪問日誌、各個連接器、環境變數等。
  • 在線函數Debug:可以在Web上直接運行函數,查看運行結果,查看日誌,診斷問題。對於BPMN函數,可以可視化地顯示執行軌跡,可顯示執行經過的每個節點的輸入、輸出或異常資訊。支援對於遠程調用設置Mock返回值,以便於聯調。
  • 多Tab頁編輯:可以同時編輯多個函數,調試和運行歷史都是獨立的。
  • 實時保存和校驗:實時保存用戶的修改到Cloud工作區,實時校驗並進行提示。

在DB/HTTP連接器中,可以自定義方法列表。圖5展示了一個自定義DB連接器的例子,用戶只要定義SQL、輸入輸出參數就能生成一個方法,在定義過程中,可以隨時測試以驗證定義是否正確。目前,需要用戶使用MyBatis語法輸入SQL,未來,星鏈會提供更為易用、更為智慧的方式定義DB連接器。

圖5 自定義DB連接器示例

圖6展示了一個自定義HTTP連接器的例子,熟悉HTTP基本協議就能快速定義一個方法。未來,星鏈會提供更為易用和豐富的功能,且支援OpenAPI規範,導入OpenAPI定義文件即可生成HTTP連接器。

圖6 自定義HTTP連接器示例

當在線調試BPMN函數時,星鏈會可視化地顯示執行軌跡,方便用戶定位問題,執行正確的以綠色顯示,錯誤的以紅色顯示,且顯示錯誤資訊,如圖7所示。未來,星鏈會支援BPMN斷點調試。

圖7 BPMN函數執行軌跡示例

5.2 自定義業務組件庫

星鏈提供了獨特的業務組件庫功能,除了提供系統公共組件,星鏈還支援自定義團隊組件。公共組件由系統維護,每個用戶都可以使用。系統將不斷完善公共組件庫建設,在私有化部署中,客戶可以自定義系統組件。團隊組件由團隊自己維護,對其他團隊不可見。用戶在VMS內自定義的連接器組件(如DB/HTTP連接器)可以導出為團隊組件。用戶可以在星鏈控制台中維護團隊組件,包括組件分組等。在BPMN編排中,用戶可以瀏覽、查詢團隊或公共組件,並直接拖拽到編排面板中。如圖8所示。

圖8 業務組件庫

5.3 支援本地IDE開發

與大多數低程式碼平台是黑盒子不同, 星鏈開發的VMS保存在Git程式碼倉庫上,源碼是完全可見的,用戶可以克隆到本地,使用本地IDE開發、調試和運行單測,在本地開發中,可以引入第三方包(如Java語言的jar包,JavaScript語言的npm包等),並在程式碼函數中使用這些包,而且,本地提交後,在Cloud Web IDE上也完全兼容可見。在Cloud Web IDE上也支援Git操作,包括切換分支、提交、查看提交歷史、對比變更等,如圖9所示。

圖9 基於Git的本地與雲協作開發

5.4 集成構建發布流程

星鏈支援一鍵在線構建打包,可以實時查看構建日誌。為了管控上線品質,星鏈集成上線審批流程,如圖10所示。

圖10 集成構建發布流程

5.5 企業級Serveless

在星鏈中開發、測試、部署,不需要關注伺服器細節,在部署時,只需要說明部署的集群分組、需要部署的實例個數、部署的版本即可,可以在一次部署中聲明多個集群分組,這些分組可以位於不同的機房、可用區,系統自動調度。聲明式部署可以方便地支援灰度發布、擴縮容,只需要修改版本聲明、實例個數即可,系統自動調整。支援部署環境隔離,區分測試、預發、生產不同環境。復用計算引擎資源,沒有冷啟動,熱載入,部署快。支援部署態加密環境變數,針對敏感變數加密存儲,確保安全。示例部署配置如圖11所示。

 

圖11 聲明式部署配置

星鏈有獨立的Serverless部署控制網關和計算引擎模組,可以部署至私有雲和其他公有雲。用戶創建的計算資源,系統提供若干管理功能,包括添加引擎、禁用引擎、啟用引擎等,系統會根據可用引擎情況動態調度VMS。

5.6 集成的可觀測性

星鏈部署狀態一目了然,包括整體狀態是否符合預期,部署的集群、分組、引擎詳情等,如圖12所示。

圖12 部署狀態

星鏈為函數主要執行節點自動添加日誌。可以在部署狀態設置日誌級別,可以在星鏈上直接查看和搜索日誌,以便於問題診斷,如圖13所示。

圖13 集成的日誌

在京東內部和京東公有雲上,星鏈集成了京東的日誌、監控等更為專業的服務,用戶可以利用這些工具進行日誌查看、監控和報警。

5.7 高性能可拓展的多語言執行引擎

自19年3月份上線以來,星鏈執行引擎在京東內部應用中已歷經多次618、雙11考驗。星鏈引擎是為高性能、低延時場景設計的,如果用戶沒有配置有狀態節點(如在流程中間等待非同步消息),星鏈是無狀態記憶體執行的,相比業界大多基於資料庫或消息系統的編排引擎,延時低,更適合服務編排,廣泛應用於面向C端用戶的高並發、低延時場景。此外,星鏈引擎是一個多語言執行引擎,目前支援Java、JavaScript、Groovy,各個語言都支援調用各種連接器方法、都提供常用API,也在規劃支援更多語言(如Python)。此外,星鏈引擎採用了微內核、模組化架構,可以方便地根據場景進行擴展、調整。未來,也將允許用戶自定義觸發器、連接器、及其他功能組件。

5.8 團隊協作與管理

星鏈提供了方便的VMS協作與管理功能。在星鏈中,VMS和計算資源都屬於一個團隊,團隊中成員有四種角色:開發、測試、訪客和管理員,每種角色有不同許可權,管理員可以添加/刪除成員。一個用戶可以加入多個團隊,默認有一個專屬的個人團隊,可以在其中試用星鏈,還會默認加入demo團隊,以方便查看系統提供的示例VMS。在創建VMS時,可以通過克隆已有VMS的方式快速新建VMS。VMS支援分組、分級管理。管理員可以將VMS遷移至其他團隊,以方便實現在大中型企業中經常發生的組織和業務調整需求。

6 小結

本文介紹了星鏈的功能、核心概念、應用場景、優勢和主要產品功能,簡單總結來說,星鏈是一個微服務低程式碼Serverless平台,用戶通過統一的Web介面完成可視化微服務(VMS)的開發、調試、構建、測試、部署完整流程,以可視化、組件編排方式低程式碼開發微服務,以聲明式進行Serverless部署,快速交付如服務前端的後端(BFF)、服務流程編排、非同步消息處理、定時任務、運營後台、工作流程自動化、臨時性需求等場景化、訂製化業務研發需求,降本增效。星鏈的特色是滿足高並發、低延時C端服務要求,低程式碼但不犧牲靈活性和可控性,支援企業級Serverless,計算資源利用率高、成本低。