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

2022-09-19 12:01:12

導讀

星鏈是京東科技消金基礎研發部研發的一款研發效能提升的工具平臺,面向後端服務研發需求,尤其是整合性、場景化、客製化化等難度不太高、但比較繁瑣的需求,如服務前端的後端(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,計算資源利用率高、成本低。