开源|宜信开源专注业务逻辑的轻量级服务框架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

开源地址: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系列模块的开源将保持长期更新和维护,也希望有更多的技术伙伴加入到开源项目中,共同维护与发展开源成果。

内容来源:宜信技术学院

原文地址:https://blog.51cto.com/14159827/2379509

时间: 2024-07-29 23:43:37

开源|宜信开源专注业务逻辑的轻量级服务框架nextsystem4的相关文章

宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

宜信开源|UAV心跳机制与容器、进程数据采集

服务心跳机制主要用于确认服务的存活状态,UAVStack的心跳数据还负责上报节点的容器及进程监控数据,支持在前端实时查看应用容器和进程的运行状态,并根据这些数据对容器和进程做出预警. 一.背景 在微服务架构中,服务心跳是一个简单但非常重要的机制,用于确认微服务的存活状态.UAVStack中的心跳是一个Http请求,MonitorAgent(以下简称MA)通过定时向HealthManager(以下简称HM)发送一个带有特定报文格式的Http请求完成一次心跳的发送过程.心跳报文含有发送时的时间戳,用

宜信开源微服务任务调度平台(SIA-TASK)

背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.常常需要一些任务调度系统帮助开发者解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此的背景下,很多原先的任务调度平台已经不能满足业务系统的需求.于是出现了一些基于分布式的任务调度平台.这些平台各有其特点,但各有不足之处,比如不支持任务编排.与业务高耦合.不支持跨平台等问题.非常不符合新一代微服务架构的需求,因此宜信公司开发了微服务任务调度平台(SIA-TASK). SIA是宜信公司基础开发平台Simpl

宜信开源|Davinci一键部署:如何三句代码跑起Davinci

导读:之前喜欢Davinci的小伙伴儿在安装部署Davinci遇见问题时需要在github issue区等待技术人员的解答.现在不用怕啦,社区热心用户白菜君帮我们支持了docker-composer一键启动,以后只需寥寥几行代码,Davinci就能舒畅的run起来了.还等什么,赶紧部署起来吧~ 敲重点 Davinci Docker原部署教程在这里: https://github.com/edp963/davinci-docker 里面会不定时更新 记得收藏啊!! 下面是部署教程: 一.环境要求

101JAVA设计模式--业务逻辑实现扩展,框架使用分析总结

23中设计模式目录如下: 工厂模式抽象工厂模式单例模式建造者模式原型模式适配器模式桥接模式过滤器模式组合模式装饰器模式外观模式享元模式代理模式责任链模式命令模式解释器模式迭代器模式中介者模式备忘录模式观察者模式状态模式空对象模式策略模式模板模式访问者模式 1.哪些JAVA不能用?3种 内存相关的:克隆模式,享元模式,备忘录模式. 特殊的:解释器模式,空对象模式. 2.哪些JAVA已经支持?3种 代理模式:JDK自动的动态代理:CGLIB,接口代理 观察者模式:JAVAEE中的拦截器,过滤器,Sp

宜信微服务任务调度平台建设实践|分享实录

本文主要围绕SIA平台展开,包括研发背景设计思路和技术架构,以及如何支持业务方. 内容来源:宜信技术学院第4期技术沙龙-线上直播|宜信微服务任务调度平台建设实践 主讲人:宜信高级架构师&开发平台负责人 梁鑫 导读:如今,无论是互联网应用还是企业级应用,都充斥着大量的批处理任务,常常需要一些任务调度系统帮助我们解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构. 在此背景下,很多之前的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台.这些平台各

平安、宜信、飞贷,谁将称霸移动互联网贷款市场?

如果把2015年看做是我国个人征信市场化的元年,那在这个千亿级别的征信市场上,借贷成为了首当其冲的战场,无论是传统金融大佬平安.还是互联网巨头阿里.腾讯,抑或是创业新秀宜信.飞贷都使出浑身解数,准备打一场持久战.但现实情况是虽然国家近一步放宽了借贷市场,借贷市场依然吃紧,再加上整个行业的残酷厮杀,无担保.无抵押依靠信用贷款的借贷模式到底能不能迎来爆发,又将面临着什么样的问题? 夹缝中求生存,痛点里找机会 从目前看,我国的借贷仍不成熟,尤其是中小企业的借贷困难重重.尽管现有借贷渠道如银行等对中小企

宜信的105条数据库军规

作为一家金融科技企业,宜信的大量业务都依赖于数据库.如何提高公司整体数据库应用水平,是对DBA的一大挑战,也非常具有现实意义.笔者在宜信的多年工作中,与团队一起总结整理了针对传统关系型数据库的使用规则,并借助自研的数据库审核平台落地,借此帮助研发团队评估数据库开发质量,达到尽早发现问题.解决问题之目的.下图正是这一系统的简单原理图. 如上图所示,针对规则部分又可细分为如下分类(部分).简单描述如下,后面将逐一详细说明. 一.Oracle规则(对象) 1.1 表.分区 [规则1] 规则说明:超过指

环信开源计划开启即时通讯云开源平台时代

12月22日,在"首届移动社交创新价值峰会"上,环信即时通讯云(http://www.easemob.com)发布了被称为"4X100计划"的<环信开源平台计划>,此计划将推动即时通讯云行业进入开源平台时代.而一个中国IT界崭新的开放共赢的生态体系也将随之逐步建立起来. 图注:环信CEO刘俊彦在峰会上解读环信开源平台计划 "2014年,即时通讯云获得了很好的发展,环信也帮助了很多合作伙伴实现了移动社交的创新.那么2015年,如何驱动移动社交创新