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

宜信於2019年3月29日正式開源nextsystem4(如下簡稱「NS4」)系列模塊。git

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

NS4系列包括4個開源模塊,分別是:ns4_frame 分佈式服務框架ns4_gear_idgen ID 生成器組件(NS4框架Demo示例)、ns4_gear_watchdog 監控系統組件(服務守護、應用性能監控、數據採集、自動化報警系統)和ns4_chatbot通信組件web

NS4系列模塊的核心優點主要體如今如下幾個方面:redis

  • 具備很好的伸縮性,能夠優雅地擴容和降級;
  • 集中化管理,對各個節點的消息進行集中式管理和分發;
  • 易維護,將複雜的流程性業務拆分紅多個模塊系統進行交互,減小代碼耦合;
  • 完善的調用鏈路,對於鏈路複雜的系統能夠準確地定位出錯的環節。
  • 能夠經過在線聊天機器人實現及時的自動提醒。

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

1、ns4_frame

開源地址:https://github.com/newsettle/...緩存

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

項目結構

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調用者。

2、ns4_gear_idgen

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

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宕機,短期內仍能正常對外提供服務。

3、ns4_gear_watchdog

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

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基本結構圖]

4、ns4_chatbot

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

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

ns4_chatbot實現的功能

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

    • 發給哪一個羣組
    • 發給這個羣組中的哪一個用戶
    • 發送的消息內容
  • 能夠接受 QQ、微信用戶的對話,理解其意圖,而且迴應用戶。

將來展望

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

內容來源:宜信技術學院

相關文章
相關標籤/搜索