宜信开源专注业务逻辑的轻量级服务框架nextsystem4

2020 年 2 月 11 日

宜信开源专注业务逻辑的轻量级服务框架nextsystem4

宜信于 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


1555286978775005432.png


开源地址: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请求,并将请求转化成业务系统内部通信使用的消息协议格式。


1554969661298045437.png


上图展示了 NS4 每个系统的层次结构。


运行流程


NS4 整套系统本质上其实就是一套消息中间件服务加开发框架,整体的结构图如下:


1554969715878006747.png


上图展示了一个 NS4 整体分布式项目的运行流程。一个消息的运转流程按如下顺序:


  • NS_DISPATCHER收到http请求并将其转化为内部消息协议放入指定的消息队列中(根据配置文件) 。

  • NS_CONTORLLER从步骤1指定的队列接收到消息,并根据配置的服务编排开始按照顺序将消息发送到每个业务系统步骤对应的消息队列中。

  • 业务系统收到步骤2中NS_CONTROLLER指定的消息队列的信息,开始处理,处理完毕后,将结果返回。

  • NS_CONTROLLER收到业务系统的响应,开始根据配置好的服务将返回的消息结果发送到下一个业务系统对应的消息队列中。

  • 消息被所有的业务系统处理完成后,NS_CONTROLLER把消息处理结果放入到指定的消息队列里,NS_DISPATCHER从对应的消息队列里取出消息结果,响应给http调用者。


二、ns4_gear_idgen


1555286991497036056.png


开源地址: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


1555287001309033126.png


开源地址: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 中,进一步通过分析数据和现实运行情况总结制定出的指标相结合,将该以上因素数据通过微信机器人实时通知提醒相关负责人。


1554969692954093650.png


[ns4_gear_watchdog 基本结构图]


四、ns4_chatbot


1555287009986023842.png


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


ns4_chatbot 是一个机器人的聊天框架,集成了 qqbot、WxChat、rasa 以及 web 服务。ns4_chatbot 提供微信和 qq 聊天接口,可以对某个群组发送系统监控消息等,还可以把 ns4_gear_watchdog 监控信息发送到对应的群组中。


ns4_chatbot 实现的功能:


  • 接受内部系统(如监控系统)的系统调用,从而把消息推送给 QQ 或者微信用户。内部系统调用服务时,需要提供以下信息:

  • 发给哪个群组

  • 发给这个群组中的哪个用户

  • 发送的消息内容

  • 可以接受 QQ、微信用户的对话,理解其意图,并且回应用户。


未来展望


宜信一直践行以科技推动金融发展的技术信念,并愿意将技术实践成果开源分享,以期通过宜信的实践经验推动金融科技行业的发展和创新。 目前,宜信技术学院已开源了多个宜信的技术成果与研发实践,面向软件研发行业分享宜信的技术理念,本次 NS4 系列模块的开源将保持长期更新和维护,也希望有更多的技术伙伴加入到开源项目中,共同维护与发展开源成果。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/233


2020 年 2 月 11 日 20:24311

评论

发布
暂无评论
发现更多内容

腾讯面试题: 百度搜索为什么那么快?

小松漫步

面试

第7周作业

文古

信创舆情一线--两部门发文加强对数字货币等新型权益的保护

统小信uos

【区块链+通证经济】从量变到质变区块链发展的下一阶段是什么?

CECBC区块链专委会

数字货币 防篡改 通证

LeetCode题解:1. 两数之和,JavaScript,双循环暴力解法,详细注释

Lee Chen

LeetCode 前端进阶训练营

如何识别刷屏文章中的伪科学

Lee Chen

随笔杂谈 前端进阶训练营

2. 妈呀,Jackson原来是这样写JSON的

YourBatman

Java json Jackson Fastjson

Vue 学习笔记-3

多选参数

vue.js Vue vuejs

性能优化

独孤魂

最高法主张加强数字货币产权保护有法可依

CECBC区块链专委会

数字货币 法偿货币 中国人民银行 虚拟财产

Redis系列(六):你说要看Redis线程模型?安排

z小赵

redis 高并发

高能预警!Apache Flink Meetup · 上海站返场啦

Apache Flink

flink

架构师训练营第八周笔记

Melo

LeetCode001-两数之和-easy

书旅

算法 LeetCode 数据结构与算法

Docker网络学习第四篇-Namespace通信实战

Lazy

Docker Linux 网络

OAM 深入解读:如何基于 OAM Runtime 编写一个扩展 Trait?

钱王骞

云原生 k8s OAM

Vue 学习笔记-2

多选参数

vue.js Vue vuejs

B站新一代golang规则引擎的设计与实现

calo

golang B站 高并发 AST 规则引擎

四十个鹏城春夏,一场数字繁花

脑极体

IO系列——用户空间与内核空间

Java联盟

io 零拷贝 用户空间 内核空间 zero copy

Demo 示例:如何原生的在 K8s 上运行 Flink?

Apache Flink

flink

敏捷软件开发宣言及十二原则

Young先生

敏捷开发

架构师训练营第八周学习总结

张明森

除了技术,加密货币开发者更应关注可使用性

CECBC区块链专委会

加密货币 用户为本 可使用性 容错机制

脑洞:基于Enterprise Continuum证明DDD用于构建汽车的可行性

Winfield

企业架构 领域驱动设计 DDD 架构演进

JVM系列之:对象的锁状态和同步

程序那些事

JVM GC 同步

关于中台,可能都是正确的废话

fino星君

中台 业务中台

推荐 16 款 IDEA 插件,让你的开发速度飞起来!

Bruce Duan

idea插件

报志愿|想学区块链,要上什么大学?报什么专业?

CECBC区块链专委会

高考 报考志愿 区块链专业 高校学院

我的 20 条工作原则

泰稳@极客邦科技

成长 知识管理 职场成长

22种超全用户触点采集,易观方舟SDK又更新了

易观大数据

宜信开源专注业务逻辑的轻量级服务框架nextsystem4-InfoQ