Biz-SIP金融级业务中台(http://bizsip.bizmda.com))是一套基于领域驱动设计(DDD)架构,能快速构建金融级云原生架构的服务整合中间件,整合了在金融场景里锤炼出来的最佳实践。
Biz-SIP业务中台涉及三类服务:
- App服务:负责服务的整合和编排,对Source层接入的服务,进行服务编排,并通过Sink模块接入要编排的服务。
- Source服务:负责聚合服务的接入,包括通讯协议适配和消息格式转换,并统一接入App层的App服务。
- Sink服务:统一被App服务所调用,实现业务逻辑的处理,或接入外部第三方服务,包括和外部服务对接时的通讯协议适配和消息格式转换。
以上三类服务在规划时,涉及到二大类问题:
- 服务垂直功能划分:主要涉及服务功能在垂直层面的功能划分,Source、App、Sink层服务应各司其职,有明确的功能划分边界。
- 服务水平拆分划分:主要涉及Source、App、Sink层服务的拆分问题,服务粒度太大或太小都是不合适的。
一、服务的垂直功能划分
- 外部应用和渠道对本系统的调用,应在Source服务中实现。
- 系统接入的个性化处理,包括通讯适配、消息转换、安全验证,应在Source服务中实现。
- App服务应集中实现主要业务逻辑。
- App服务能实现公共的服务消息检验。
- 分布式事务是由App层的延迟服务来实现的。
- 对数据库的更新服务,原则上应在sink服务来实现(只有非高频的数据库更新服务,才可以放在Source服务和App服务中实现,但不推荐)。
- 数据库的查询服务,可以在Source、App、Sink服务中进行使用,但应做好未来数据库连接切换到只读备库的准备。
- 调用外部系统的服务,应在Sink服务中实现。
- 对数据库的更新服务,原则上不应该在有调用外部系统的Sink服务中使用,如果在调用外部系统的sink服务中需要做数据库更新操作,建议把这块功能拆分成另一个Sink服务,由App服务来组装为妥。
二、服务的水平功能划分
- Source服务,应以外部应用接入和渠道接入点来划分,每个Source服务对应一个外部应用接入(渠道接入);
- App服务,服务粒度和服务接口尽量和软件设计文档中的业务流程设计相一致,需要参考业务人员和产品经理的意见;
- Sink服务,包括连接第三方应用的、执行纯交易逻辑的二类sink服务:
- 【服务拆分】调用第三方应用的Sink服务,每个Sink服务对应一个外部应用的调用,而且调用每三方应用的sink服务,原则上不要再进行数据库的更新操作;
- 【服务拆分】执行纯交易逻辑的Sink服务,拆分时可以以数据库的拆分为参照,一个Sink服务一般建议只连接一个业务数据库,如果一个Sink服务连接二个以上的业务数据库,就建议要拆分成多个Sink服务;如果sink服务未来可能会连接二个以上的业务数据库,也建议提前进行拆分;
- 【服务拆分】执行纯交易逻辑的Sink服务,除了满足上面数据库拆分规则外,其它需要参考DDD架构中领域服务的划分,参考DDD架构中对微服务拆分的原则和方法。
- 【接口拆分】执行纯交易逻辑处理的Sink服务,在拆分时,应避免拆分过细,导致频繁的服务调用而影响执行效率;同时也应避免拆分过粗,导致业务逻辑呈现在Sink层而不是App层,同时也影响未来新业务的扩展。
- 【接口拆分】执行纯交易逻辑处理的Sink服务,应尽量避免在App层拆分成2个sink服务接口,建议放在1个Sink服务接口中统一做事务完整性处理。
- 【服务拆分】可以做异步处理的Sink服务,尽量封装成RabbitMQ异步调用的Sink服务,异步Sink服务和传统的同步Sink服务肯定是要分开的;
Biz-SIP网站:http://bizsip.bizmda.com
Gitee源代码:https://gitee.com/szhengye/biz-sip