1. 程式人生 > >開源|宜信開源專註業務邏輯的輕量級服務框架nextsystem4

開源|宜信開源專註業務邏輯的輕量級服務框架nextsystem4

經驗 可選 金融 狀態 qqbot 集成 理解 tom 其中

宜信於2019年3月29日正式開源nextsystem4(以下簡稱“NS4”)系列模塊。

此次開源的NS4系列模塊是圍繞當前支付系統笨重、代碼耦合度高、維護成本高而產生的分布式業務系統解決方案。NS4系列框架允許創建復雜的流程/業務流,對於業務服務節點的實現可串聯,可分布式。其精簡、輕量,實現了“脫容器”(不依賴tomcat、jetty等容器)獨立運行。NS4系列框架的設計理念是將業務和邏輯進行分離,開發人員只需通過簡單的配置和業務實現就可以實現邏輯復雜、性能高效、功能穩定的業務系統。

NS4系列包括4個開源模塊,分別是:ns4_frame 分布式服務框架ns4_gear_idgen ID 生成器組件

(NS4框架Demo示例)、ns4_gear_watchdog 監控系統組件(服務守護、應用性能監控、數據采集、自動化報警系統)和ns4_chatbot通訊組件

NS4系列模塊的核心優勢主要體現在以下幾個方面:

  • 具有很好的伸縮性,可以優雅地擴容和降級;

  • 集中化管理,對各個節點的消息進行集中式管理和分發;

  • 易維護,將復雜的流程性業務拆分成多個模塊系統進行交互,減少代碼耦合;

  • 完善的調用鏈路,對於鏈路復雜的系統可以準確地定位出錯的環節。

  • 可以通過在線聊天機器人實現及時的自動提醒。

項目開源地址:https://github.com/newsettle

一、ns4_frame

技術分享圖片

開源地址:https://github.com/newsettle/ns4_frame

ns4_frame是一個高性能優秀的分布式服務框架,允許創建復雜的流程/業務流,對於業務服務節點的實現可串聯,可分布式。其精簡、輕量,實現了“脫容器”(不依賴tomcat、jetty等容器)獨立運行。ns4_frame將業務和邏輯進行分離,開發人員只需通過簡單的配置和業務實現就可以實現邏輯復雜、性能高效、功能穩定的業務系統。

項目結構

ns4_frame是一套MAVEN父子項目,由五個子項目組成:

  • NS_MQ :負責和底層消息隊列進行通信,提供了對消息隊列進行操作的API。目前NS4底層支持redis作為消息中間件,同時提供通用的接口,可以擴展多種消息中間件,對消息中間件的操作被封裝入了NS_MQ項目中。

  • NS_TRANSPORTER:通過調用NS_MQ提供的API,對業務消息進行收取、處理、轉發。它本質是一套消息收發處理框架,主要負責接收消息後反向回調業務代碼,並將消息交給業務層處理,當業務層處理完畢後,再將處理後的消息返回給redis中。

  • NS_CHAIN:一個可選開發框架,負責對同一個JVM中的業務處理步驟進行鏈條式的整合,組成當前業務模塊的業務處理流程。

  • NS_CONTROLLER:一個業務消息轉發應用,負責將接收到的消息轉給對應的業務模塊進行處理,同時根據整體業務將業務模塊進行關聯.NS_CONTROLLER本質是一個獨立的應用系統,構建於 NS_TRANPORTOR和NS_CHAIN之上。

  • NS_DISPATCHER :NS4架構規定的消息入口,以NETTY框架作為基礎,通過提供的HTTP服務接受業務系統邊界外的http請求,並將請求轉化成業務系統內部通信使用的消息協議格式。

技術分享圖片

上圖展示了NS4每個系統的層次結構。

運行流程

NS4整套系統本質上其實就是一套消息中間件服務加開發框架,整體的結構圖如下:

技術分享圖片

上圖展示了一個NS4整體分布式項目的運行流程。一個消息的運轉流程按如下順序:

  • NS_DISPATCHER收到http請求並將其轉化為內部消息協議放入指定的消息隊列中(根據配置文件) 。

  • NS_CONTORLLER從步驟1指定的隊列接收到消息,並根據配置的服務編排開始按照順序將消息發送到每個業務系統步驟對應的消息隊列中。

  • 業務系統收到步驟2中NS_CONTROLLER指定的消息隊列的信息,開始處理,處理完畢後,將結果返回。

  • NS_CONTROLLER收到業務系統的響應,開始根據配置好的服務將返回的消息結果發送到下一個業務系統對應的消息隊列中。

  • 消息被所有的業務系統處理完成後,NS_CONTROLLER把消息處理結果放入到指定的消息隊列裏,NS_DISPATCHER從對應的消息隊列裏取出消息結果,響應給http調用者。

二、ns4_gear_idgen

技術分享圖片

開源地址:https://github.com/newsettle/ns4_gear_idgen

ns4_gear_idgen (ID生成器)是基於NS4框架實現的,它支持分布式部署,生成全局唯一的 ID,其中長度、前綴、後綴、步長、進制也可根據自己的業務自由配置,還可以通過ns4_gear_idgen對NS4.0框架進行測試。

優點

  • 很方便的線性擴展,能夠支撐大多數業務場景。

  • 生成ID規則多樣,可根據業務需求自由配置,且支持10進制、36進制、62進制。

  • 業務之間ID相互隔離,互不影響。

  • 獲取ID不用頻繁操作數據庫,快消耗完號段內ID時才會操作數據庫,減輕了數據庫的壓力。

  • 提前初始化號段內的ID,保證在每個號段內ID使用完之前完成初始化,避免業務使用完ID後再初始化所帶來的影響。

  • 可以自定義 key_value 的大小,業務可以很方便地從原有的ID方式遷移過來。

  • 容災性高,服務內部有號段緩存,即使DB宕機,短時間內仍能正常對外提供服務。

三、ns4_gear_watchdog

技術分享圖片

開源地址:https://github.com/newsettle/ns4_gear_watchdog

ns4_gear_watchdog是ns4_frame進程的父進程,守護並管理ns4_frame進程。它的職責包括以下幾個方面:

  • 對ns4_frame進行遠程啟動和停止、實時監測ns4_frame進程的健康狀態、內存消耗、CPU使用、內部線程;

  • 收集ns4_frame實現的業務日誌歸集、實現業務內部實時流轉的業務數據,達到實時對ns4_frame進程在線上的運行狀態、實現的業務以及業務數據的流轉狀態等方面的監控,並精準、快速、便捷地定位出異常以及CPU、線程等運行狀態。

ns4_gear_watchdog是作為父進程存在的,通過父進程啟動目標項目(子進程),並針對子進程應用生存的環境因素(包括系統層面的內存消耗、CPU 使用、負載、線程等)、實現功能的代碼因素(代碼健康程度)、業務因素等數據進行實時監控。父子進程通過 jmx 方式進行通訊,采集以上因素數據,並將這些數據保存到 ElasticSearch 中,進一步通過分析數據和現實運行情況總結制定出的指標相結合,將該以上因素數據通過微信機器人實時通知提醒相關負責人。

技術分享圖片

[ns4_gear_watchdog基本結構圖]

四、ns4_chatbot

技術分享圖片

開源地址:https://github.com/newsettle/ns4_chatbot

ns4_chatbot是一個機器人的聊天框架,集成了qqbot、WxChat、rasa以及web服務。ns4_chatbot提供微信和qq聊天接口,可以對某個群組發送系統監控消息等,還可以把ns4_gear_watchdog監控信息發送到對應的群組中。

ns4_chatbot實現的功能

  • 接受內部系統(如監控系統)的系統調用,從而把消息推送給 QQ 或者微信用戶。內部系統調用服務時,需要提供以下信息:

    • 發給哪個群組

    • 發給這個群組中的哪個用戶

    • 發送的消息內容
  • 可以接受 QQ、微信用戶的對話,理解其意圖,並且回應用戶。

未來展望

宜信一直踐行以科技推動金融發展的技術信念,並願意將技術實踐成果開源分享,以期通過宜信的實踐經驗推動金融科技行業的發展和創新。 目前,宜信技術學院已開源了多個宜信的技術成果與研發實踐,面向軟件研發行業分享宜信的技術理念,本次NS4系列模塊的開源將保持長期更新和維護,也希望有更多的技術夥伴加入到開源項目中,共同維護與發展開源成果。

內容來源:宜信技術學院

開源|宜信開源專註業務邏輯的輕量級服務框架nextsystem4