企业商务模型的主要内容包括主营业务、商务模式、商务主体、竞品分析、组织架构、商务运作模型和业务流程等。
主营业务即公司做什么业务,商务模式即公司怎么赚钱,商务主体即哪几个人在一起做这门生意,竞品分析即了解竞争对手的情况,组织架构即公司部[ ]是怎么划分的。在组织架构图中标出人数,根据系统与业务之间的对应关系,可以了解系统中哪些模块使用的频率高,以及业务与其对应模块的复杂度。商务运作模型即公司是如何运作的,售前做计划,找供应商把东西买进来后,经过服务和结算,再卖给经销商和采购商,使我们获得利润,售后进行大数据分析后又指导我们的售前,整个过程形成良性循环。可以把一家公司想象成一台机器, 输入的是钱,转一转后,又能够生出更多的钱出来。商务运作模型如下图所示。
最后是业务流程和附档资料。业务流程包括预订流程、订单处理流程、产品供应流程、财务结算流程、账户管理流程。企业商务模型的建立,指导整个应用系统模型的建立,它是整个应用系统建设的基础和前提,毕竟应用系统是为业务服务的。
架构现状的内容主要包括功能架构、应用架构、数据设计和物理架构。
功能架构
采购商的功能如下图所示。
功能架构主要包括功能、角色和权限三部分。
功能是企业服务,用户使用的每一个功能就是企业的每一个服务。
角色是用户操作的归类,
功能与角色的对应关系即权限。
了解系统架构的现状,从功能架构开始。
应用架构
应用就是处理器,应用架构的内容包括现有架构图、Web应用现状、作业小应用(Job)现状和接口架构。其中,接口是应用层面的关键,它是一个程序与另外一个程序交互的部分。
业务逻辑被多少个应用调用,就需要被重复开发多少次,一旦改了一个地方,就要同时改多个地方,导致系统开发效率非常低下。各业务逻辑如预订逻辑,虽然被多个应用调用,但它与应用是没有关系的,业务逻辑可以独立存在,也可以寄宿于多个应用。业务逻辑是一个业务操作的抽象,而业务应用与业务部门]共同完成了业务操作。
数据设计
100多个数据库,一万多张表,能否使用一张E-R图来表示呢?可以的。数据设计依赖于企业的数据,而不是数据库的设计,将企业数据适当归类,会直接导致数据设计,最终画出E-R图,数据设计完成后,数据库设计就自然而然出来了。超越库、超越表去看这张E-R图,可以看出它包括产品、订单、结算、用户、基础设施这五类数据。低层的E-R图可以变,但是高层的E_R图一般不会变化,因为它是根据业务模型而定的,业务模型稳定,高层E-R图也是稳定的。数据库只要早期设计得好,是可以做到易伸缩、易拆分的。下图从内往外看,一个框既可以是一个库, 也可以是一个模块,还可以是一个表。在业务发展的早期它可以是一个库,里面有5个模块,中期可以分为5个库,后期以更低级别可以分为更多的库,这与业务阶段及系统复杂度相关。在数据的设计完成后,数据库的设计也就很容易进行规划和调整。
以上是数据库、数据表之间的静态关系,接下来我们介绍数据的流转状态,即状态图。通过数据状态图去了解现有数据的流转变迁,从等待支付到支付成功,中间有一个支付行为,通过这个支付行为把数据状态变更为支付成功,否则继续等待,直到超时关闭订单。这个支付行为可以做成一个微服务,然后由不同的应用去调用。
物理架构
物理架构的内容主要包括IDC机房、机房之间的访问关系、机房内服务器物理部署图、机房与业务分布、网站架构、数据库架构、集群清单和域名清单。将这些内容以列表和图形方式整理出来,就很容易了解和发现问题,只有发现问题才能解决问题,特别是在全局体系架构方面,这也是表和图的价值所在。当时这家公司共有5个地区、8个机房,虽然只有200 多台服务器,但分布很散,导致物理结构复杂,通信也很复杂。技改前故障不断,主要的原因就是物理架构不合理,运维要占60% ~ 70%的责任,当时却把责任归咎为应用架构,这是错误的方向。物理架构不合理,应用架构是很难合理的,因为物理架构是我们的基础设施,位于底层,下层为上层服务,运维要为应用服务,应用要为业务服务,业务要为客户服务。
领域模型
领域模型关注概念、关注职责、关注边界、关注交互,只有先确定职责和边界,交互才会很清晰。领域模型是针对现有问题域提出一个系统解决方案,然后在图表上建立完整的模型,如同用AutoCAD画的施工图纸一样。领域模型属于概要设计阶段,对于单个应用架构设计,首先需要了解业务和功能需求、用例图、用例活动图,然后才是领域模型。业务流程图是对业务操作的抽象,领域图是对业务逻辑代码的抽象。
预订模型如下图所示。
建立领域词汇是建立领域模型的第一步,它能统一词汇、 明确概念,以减少一词多义、一义多词的情况。概念一旦确定,再扩展属性和行为,然后把它当作一个单元与其他事物构建在一起,就很容易形成模型,领域模型与企业商务模型中的业务流程图有对应关系。领域模型在实现时可大可小,在业务的早期,系统比较小的情况下,它有可能是一个类。当系统做大了以后,它可能是一个DLL库。再做得更大一点的时候,它可能是一个服务,给不同的应用去调用。每一个方法都有成为服务的潜质,特别是在系统的中后期。领域模型是业务逻辑代码的施工图纸,它不仅有利于我们对现有系统业务逻辑的了解,也指导未来的架构改造。
顶层架构规划
以下是顶层架构的俯视图和剖面图。第一张图是俯视图,整个顶层架构最外层的是功能,中间的是业务操作,内层的是数据。功能对应业务系统的用户界面,操作对应业务系统的服务,数据对应业务系统的数据存储,如数据库。第二张图是剖面图,切一刀来看,上层是应用,中层是服务和框架,下层是基础设施数据中心。从图中的服务层可以看出,服务的归类跟业务流程的归类有很大关系。
网站功能规划
网站功能规划就是对功能的重新划分,对照架构现状,未来的功能应该如何调整?例如,案例中的国内网站功能规划,分别画出了全局功能图、采购商功能图、平台商功能图和供应商功能图。其实在做网站功能规划的时候,更多需要考虑现状,而不是未来调整的部分,如果没有很大问题,则不做调整,尊重历史。因为有些东西(如名称)用户已经使用很久了,调整往往比较难,合理大于准确。
应用规划
系统是什么?系统:元素+关系。应用架构是什么?应用架构=应用+架构。应用就是系统的最小单元,应用分类和应用编号构成了应用关系即应用的架构。如下图中的案例,应用分类新建框架Fx和公共业务系统CBS ,原有的200多个应用中并没有这两个产品线,而是分布在了不同的业务线中,从而导致重复建设。应用编号是给每个应用分配一个六位的数字ID,如同我们的身份证一样,头两位表示产品线,中间两位表示子系统,最后两位表示应用,如100206。 应用编号是应用管理、依赖和追踪的基础,集中式日志和监控框架都使用了应用编号。
SOA规划
SOA规划就是接口规划,它的归类与商务模型中的业务流程有对应关系。下图中的案例有五个服务中心:预订服务、订单处理服务、产品供应服务、财务结算服务和公共服务。每个服务只需要实现一套自己的逻辑,前台、后台、接口、作业小应用等都可以调用,服务的逻辑跟业务逻辑是一致的,修改代码的时候只需要改一个地方就可以影响所有调用这服务的前端应用。
分层架构
分层架构看似很简单,但保证整个研发中心都使用统一的分层架构就不容易了。那么如何保证整个研发中心都使用统一的分层架构,以达到提高编写代码效率、保证工程统一性的目的?先简单介绍当前两种比较流行的分层架构体系,一种是领域架构:包括仓储层( Repository Layer)、领域层( Domain Layer)、应用服务层( Application Layer )、表现层( Presentation Layer)和基础公共层( Infrastructure Layer),如下图所示。
另一种是相对传统地分为三层包括数据层( Data Layer )、业务逻辑层( Business Layer)和表现层( Presentation Layer),如下图所示。
领域架构和三层架构之间有什么区别?在早期做三层架构的时候,大都以表来驱动,在做领域架构的时候,大都以业务逻辑来驱动,两者的区别确实比较明显,但到了现在,如果都以业务逻辑为中心,那么两者并没有本质区别。当时,笔者所在的公司采用了第二种分层法,我们希望把分层做得极简,也就是说,哪怕刚毕业进入公司的员工,在分层时基本上也不会乱。相对于第一种分层法, 第二种分层法简单得多。每一个应用的代码量都不应该很大,一旦工程变得过大,我们就会把它适当拆分,而不是全部放在一个单体应用里。总之,分层越简单,整个软件结构就越清晰,代码就越容易统一。把工程做得极简,才有利于复制,有利于业务的快速构建,有利于规模化,使系统稳定可靠。
架构实施
做完架构规划后,就是架构实施落地了。我们的架构实施整体思路是:树目标、给地图、立榜样、抓重点、造文化、建制度、整环境、组建架构部。架构部内部招几名老程序员,外部招几个架构师。内部人员走出去,提高眼界。外部牛人请进来,落地了解历史和业务。技术建议是: SOA服务化、基础设施平台化、公共业务服务化、加强项目概要设计。当研发团队达到200 多人、有了几百个应用,且在故障不断的情况下,不能与以前一样没有设计就开始编码,而是要加强项目概要设计及评审。后面的补与前面的防,“两手都要抓, 两手都要硬”。具体计划是: Roadmap 分步实施,改造一期、改造二期、改造三期,近细远粗、实事求是、逐步细化、逐步完善。不断立技改项目,不断将技改与业务研发项目相结合,技改即是工单、工单即是技改。避免过多地影响业务,并不断有业务价值输出,这是架构改造得以持续实施的关键!
后记
以上简单地介绍了总体架构的编写方法,我们的编写思路是先了解业务,建立企业商务模型,主要包括静态的商务主体、组织架构、动态的商务运作模型和业务流程。再了解架构现状,建立现有信息系统模型,主要包括功能架构、应用架构、数据设计和物理架构。一个是商务,另一个是电子,两者是整个公司的电子商务系统。然后在企业商务模型和现有系统模型之上建立领域模型,领域模型相对稳定,直接指导接下来的架构规划,最后一定要落地,即架构实施。