复杂业务系统的演进

前言

设计是把双刃剑,没有最好的,也没有更好的,而是条条大路到罗马。同时不设计和过度设计都是有问题的,恰到好处的设计才是我们追求的极致。 ---摘抄

作为一名开发老兵,在进入阿里交易团队之前所认识所有的系统的都是面条行,即从端上一条线杀到数据库完成一个操作,仅有的一些设计集中在数据库上。

因此当我们作为一个新人接手的一个新业务系统时,我们首先要了解的是业务系统的背景,作为一个分布式系统,我们通常需要了解业务系统上下游有哪些系统,之后在深入了解完接口设计文档,和数据库设计文档后便开始无止境阅读复杂业务流程是如何将接口和数据库两个端点进行实现。

中台系统

中台系统的定义

企业级能力复用平台

「企业级」定义了中台的范围,区分开了单系统的服务化与微服务;
「能力」定义了中台的主要承载对象,能力的抽象解释了各种各样中台的存在;
「复用」定义了中台的核心价值,传统的平台化对于易复用性并没有给予足够的关注,中台的提出和兴起,让人们通过可复用性将目光更多的从平台内部转换到平台对于前台业务的支撑上;
「平台」定义了中台的主要形式,区别于传统的应用系统拼凑的方式,通过对于更细粒度能力的识别与平台化沉淀,实现企业能力的柔性复用,对于前台业务更好的支撑。

理想中的中台系统
中台系统生态.png
中台系统的复杂

中台复杂来源面对的需求方更加多样化。

  • 1 面对垂直业务方的需求(1688,淘宝,天猫...)
  • 2 自身产品化的需求(限时购,拼团,自主订单...)
image.png
中台系统的复杂带来的挑战
  • 针对不同业务方需求传统的标准化流程形成挑战。

  • 不断添加的业务需求使得,平台代码和业务代码耦合严重难以分离,业务和业务之间代码交织缺少拆解.

    • 平台代码 所有业务通用实现代码
    • 业务需要定制化的需求实现代码
  • 各个业务方的代码实际上融合在一块,在没有拆解平台代码,业务代码情况下,某一处代码变更很难度量影响到业务方,提高上线风险和测试回归成本。

  • 不断添加的业务需求使得难以抽象成能力。

  • 一套系统N个业务方,上下发布流程难以实现敏捷快速的发布。

  • 作为中台系统,并不了解前台系统,且由于人力资源的问题无法快速响应所有的业务方,在业务交付过程中中台反而成为了瓶颈。

  • 多样化配置需求

共享交易平台

早期共享交易1.0时代

1 传统三层架构,多个业务方使用同一套系统系统,系统逻辑堆砌在应用逻辑层。

分层模型——经典三层架构(集中式架构).png

共享交易2.0时代

分层模型——经典三层架构(集中式架构)改进型+流程+SPI引擎.png
解决哪些问题

1 针对针对不同业务方需求传统的标准化流程形成挑战。

针对不同业务方多样化流程梳理出可以复用的节点,针对不同业务方定制化流程特有流程,通过流程引擎驱动程序而非硬编码。这里流程通过下单打标到订单属性中。

交易流程.png

在每个流程节点中确认通用子流程,将代码实现和流程图做对应,提高了代码可读性

2 不断添加的业务需求使得,平台代码和业务代码耦合严重难以分离,业务和业务之间代码交织缺少拆解.

通过SPI机制实现,针对多业务方定制化的需求,通过SPI实现多业务多个实现规则化执行,将多个业务实现写入不同代码实现包下,具体参考这里闲鱼SWAK 框架

参考SWAK

3 作为中台系统,并不了解前台系统,且由于人力资源的问题无法快速响应所有的业务方,在业务交付过程中中台反而成为了瓶颈。

image.png

4 一套系统N个业务方,上下发布流程难以实现敏捷快速的发布。
人力每周发布,中台每周负责核心逻辑自动化回归。

存在哪些问题

1 项目风险问题

面对1000人维护的系统,面对数每周3~4需求的上线,测试回归成本巨大,

SPI实现并没做到ClassLoader隔离,也没有IOC容器隔离,共享交易中SPI 使用装饰者模式,被装饰对象可能因为装饰者对手BUG导致系统的错误。

2 能力复用的问题

2.0时代采用还是面向数据编程,也是就所谓面向过程的编程方式,并没有使用DDD类似面向对象,面向领域对象编程,所有的逻辑依旧通过上帝之手service来处理。

3 部署上线延迟
无法做到业务方环境独立部署

共享交易3.0时代

分层模型-----DDD分层架构.png
解决哪些问题

1 能力复用的问题

将原有的三层架构改变成DDD四层架构,将业务流程保留到应用层中,将业务逻辑下层到领域层。改变原先面向数据模型编程的方式,采用面向领域对象的编程。

---- 领域对象: 抽象出来业务模型

---- 领域服务:对于一个子流程处理节点

---- 能力:针对领域对象抽象出来可复用的能力

---- 扩展点:针对不同业务方需要定制需求实现,这里实现不在使用分包而是采用分JAR包的方式,包括如下:

  • 1 平台默认实现
  • 2 产品扩展实现
  • 3 业务扩展实现

---- 业务身份:请求业务身份标识,会在配置中心配置该业务身份需要执行业务扩展点实现,和产品的扩展点实现,以及对应优先级,

2 项目风险问题

在代码架构上将代码模块做划分,通用包,扩展包,

1 核心包:包括应用层代码,领域层代码

2 扩展模板:SPI实现模块

3

2 TMF2框架引入

TMF2.0解决的关键问题
面对这些挑战,TMF2.0框架需要六大关键问题。

业务可视化:平台能力、业务规则决定是否对外透出;
需求结构化支持:基于透出的业务能力、已有的业务规则完成需求结构化分解降低沟通成本;
业务配置化:这是可视化的前提,要在需求明确的情况下在线配置业务、快速发布上线;
业务测试一体化:根据修改的代码进行自动化用例筛选、自动化测试;
业务监控:以精细化的业务维度进行监控,而不仅仅局限于交易大盘;
故障排查:当业务故障时快速拿到故障快照、还原故障现场以及迅速定位问题原因。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342