浅谈关于业务架构

简介: 一般的工程师接触到的是 应用架构 ,传统的MVC分层架构、事件驱动架构等等。第一次接触业务架构这个概念是在来到商品发布团队之后。商品发布是一个业务属性很重的系统,承载了淘宝、天猫、盒马、魅力惠、汽车、虚拟、SCM自营、苹果、村淘、公益 、教育等诸多业务(业务多的围起来可以绕地球一圈)的商品发布功能。

一、序章
  一般的工程师接触到的是 应用架构 ,传统的MVC分层架构、事件驱动架构等等。第一次接触业务架构这个概念是在来到商品发布团队之后。商品发布是一个业务属性很重的系统,承载了淘宝、天猫、盒马、魅力惠、汽车、虚拟、SCM自营、苹果、村淘、公益
、教育等诸多业务(业务多的围起来可以绕地球一圈)的商品发布功能。头半年对“业务架构”还是很懵逼的,随着慢慢的熟悉业务,研究框架代码,才对我们的业务架构框架有了清晰的认识。

二、单体应用的痛点

  在GPF框架(我们团队的业务架构框架)诞生前,上述的所有业务都在一个单体应用里承载。每新加一个业务,我们的应用工程就会变得更加的臃肿,软件熵变大,代码难以维护,不少类都有几千行以上。不同的业务代码都杂糅在一个类或者一个方法里。
  以商品上架时间组件为例,当我们承接教育行业时,我们的代码会做如下的改动(为了方便理解,我把源码改成了伪代码):

__20180929162429
每承接一个新的业务,我们都要添加很多if else式的打补丁代码。严重违反了开闭原则,这种写法是典型的代码坏味道。当承接的业务越来越多时,系统变的越来越庞大。不管是承接新的业务还是对老的业务进行改动,都越来越麻烦。马老师说:

“抱怨越多的地方,机会也越多”。

  这句话对软件工程同样适用。为了解决单体应用架构的痛点:新增业务就给老代码打补丁。实现业务代码给力功能的GPF框架面世。
  新架构的核心诉求:业务隔离。更加具体一点,代码隔离,配置文件隔离,运行时流程隔离。围绕业务隔离这个核心诉求,其实我们做了更多的事情,这个后面讲。

三、如何做到业务隔离
  我们给每个业务身份建立一个模型,并配一个业务id。业务模型包含这个业务要用到的组件,扩展点,流程配置。所有业务身份构成一个业务身份列表。每个业务模型都有一个业务识别逻辑——当前用户请求是否命中该业务。用户请求进来时,都会走一遍这个路由算法,以确定唯一的业务身份。

20180927181901494
唯一的业务身份id确定后,对应的组件集合,扩展点集合,流程配置也就确定了。

1. 组件
  每个业务的发布页都由十几个到几十个组件构成。这其中有平台通用的组件,比如说商品标题,商品条形码,类目属性,销售属性,sku等全行业都需要的业务组件。垂直业务有垂直业务的定制组件,比如说公益业务有捐赠金额的组件,除了公益业务,其他业务不可能用到这个组件;盒马业务有商品所属门店,管理机构等新零售行业特征的组件。
20180927181929880

“业务需要的组件 = 业务定制组件 + 需要的平台通用组件”

2. 扩展点
这里的扩展点可以理解为插件(plugin)

扩展点
组件扩展点
流程扩展点
扩展点同组件一样,也是有平台通用扩展点和业务定制扩展点构成。

"业务需要的扩展点 = 业务定制扩展点 + 需要的平台通用扩展点"

3. 隔离方案
  通过上述可以发现,平台通用的扩展点和组件是代码复用的!并没有达到之前的代码隔离要求。解决方法也简单:系统初始化时,每个业务身份id都会new一份通用组件和扩展点,并merge自己的定制组件和扩展点。于是,内存里,每个业务身份id都会有一套运行时的独立且完整的组件和扩展点集合。系统真正运行的时候,取到的是组件和扩展点的对象,并不是代码。这样,代码复用,业务数据隔离。这才是最合理的方案。

20180927181954201

四、如何做到灵活易接入的中台化产品
  仅仅达到业务代码解耦并不够,商品发布系统要做一个中台化的产品。能够快速的支持新业务接入,让新的业务一起共建甚至新业务的同学独立的在GPF框架上接入他们的业务,是我们的目标之一。要做到高扩展,快速接入新业务,这里不得不提到“微内核 + 插件化”技术。
微内核技术:

微内核是内核的一种精简形式。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入插件 这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。

20180927182016963

微内核技术源于操作系统,但是在互联网产品“平台化”的大浪潮之下,这个技术得到了广泛的应用。

GPF微内核会暴露一系列的SPI(Service Provider Interface)接口,不同的业务按需去实现这些插件接口。系统启动时,程序扫描出所有实现了SPI接口的插件,并集成到系统中对外提供服务。当新业务需要接入时,定义好一个业务身份,同时实现需要的SPI接口,即可完成业务的接入,同时做到业务的隔离。

**
五、 结语**
  架构不是设计出来的,是演进而来的。演进式架构才有生命力。从Xsell 到 GPF1 GPF2 GPF3, 每个版本我们都解决了前一个版本的痛点同时往前看半步。一个产品要走平台化道路,业务架构一定是标配。

目录
相关文章
|
敏捷开发 架构师 项目管理
架构师才能看懂的大型网站架构面临的挑战:业务架构的基本思路
业务架构的基本思路 大型网站系统有很多功能,一次性明确所有的功能需求并设计出一个庞大的业务架构是一件费力不讨好的事情。因为在项目前期,难免会忽视一些琐碎功能,而随着开发的进行,也会有很多新的想法产生,基本上不会存在完全按照最初的业务架构设计完成的软件产品。因此,业务架构不仅要做到“规整功能模块,厘清产品业务逻辑”,更重要的是如何做到“有规划性地应对项目过程中的需求变更”。
|
运维 架构师 前端开发
架构地图-业务架构1
架构地图-业务架构1
|
存储 缓存 架构师
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
578 0
程序员架构修炼:架构设计概要,业务、应用、技术、数据架构
|
人工智能 运维 Kubernetes
我把传统业务架构升级到业务中台架构的心得
此为实战经验输出章节,重点在于自我的经验总结和实践经验记录,自己在整个过程角色是架构师和研发部门负责人角色,即设计和执行合一
|
SpringCloudAlibaba 中间件 数据库
关于微服务架构业务思考
关于微服务架构业务思考
1260 0
|
NoSQL Redis 数据中心
架构优化与业务迭代,你会怎么选?
对于每个软件系统,我们都可以通过业务和架构两个维度来体现它的价值。 尤其是软件开发人员,应该确保自己的系统在这两个维度上的实际价值都能长时间维持在很高的状态。
架构优化与业务迭代,你会怎么选?
|
消息中间件 存储 缓存
读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》
帅哥美女,知道你们时间宝贵,那么就由小菜为你读好一本书,读一本好书,取其精华,与你共享~!今天带来的是 《软件架构设计:大型网站技术架构与业务架构融合之道》 的读书笔记
487 0
读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》
|
存储 固态存储 关系型数据库
架构思考-业务快速增长时的容量问题
之前做过一个项目,数据库存储采用的是mysql。当时面临着业务指数级的增长,存储容量不足。
架构思考-业务快速增长时的容量问题
|
存储 消息中间件 SQL
架构师之路--视频业务介绍,离线服务架构和各种集群原理
  先聊聊业务。我们媒资这边目前的核心数据是乐视视频的乐视meta和专门存储电视剧,综艺节目,体育赛事这种长视频的作品库。乐视视频的数据都是多方审核的,需要很多运营。但是作品库部分却是弱运营的,运营都不超过10个人。结果做了两个app,日活都有四五百万的样子。我们其实都有各样的技术储备,很容易可以抓取人家数据,自己套上一个壳子在线解码。但是我们逼格很高,都不这么做的。乐视是个非常注重版权的公司。我名下都有近百个专利了。   撇开这个项目,先看这边一般web项目的常用JVM配置。
架构师之路--视频业务介绍,离线服务架构和各种集群原理
下一篇
无影云桌面