【架构设计】架构设计规范

架构设计规范 前言 有人说:一千个人眼里有一千个哈姆雷特,每个人对“架构”的理解亦然,业务架构的使命是面向复杂系统构建,降低复杂度,更好地规划系统,承担业务与

架构设计规范

前言

有人说:一千个人眼里有一千个哈姆雷特,每个人对“架构”的理解亦然,业务架构的使命是面向复杂系统构建,降低复杂度,更好地规划系统,承担业务与技术之间的桥梁,重要性不言而喻,架构本质上没有好坏之分,只有是否合适,业务架构也会随着业务的增长与演变,不断完善。古人云:没有规矩不成方圆,为了进一步规范和统一公司业务架构设计、系统命名、系统结构、模块划分、技术选型等,保证运维人员、开发人员、测试人员、业务人员对系统架构有一个全局认知和共识,特此推出《架构设计规范》

业务架构设计评审清单:

名称 新项目是否必须 已有项目是否必须
技术选型 Y N
业务架构图 Y N
系统模块划分 Y N
业务时序图 Y Y

概要设计评审清单:

名称 新项目是否必须 已有项目是否必须
用例图设计 Y N
ER图设计 Y N
状态图设计 Y N

详细设计阶段需要提供评审清单:

名称 新项目是否必须 已有项目是否必须
数据库设计 Y N
接口时序设计 Y N
接口设计 Y N

技术选型规范

在建筑行业,如果需要构建一座大厦,首先打地基,然后再搭建主框架,最后才是添砖加瓦,系统建设同理,中间件是应用系统的基础设施,是应用的装备和工具,中间件的建设是大中型系统建设的前提。因此在搭建一个新应用时,我们需要首先确定,需要使用哪些技术。目前公司内部使用的技术如下:

名称 选型
JDK jdk1.7,特殊情况下需要使用jdk1.7以上版本,需要经过架构组确认
缓存 redis 主从模式
消息队列 rocket mq
关系型数据库 mysql 主备
配置中心 disconf
RPC框架 dubbo
监控平台 cat
日志平台 elasticSearch+filebeat+kibana
应用容器 tomcat 7、8
定时任务 elastic-job
负载均衡 tengine
规则引擎 drools
文件系统 oss
协调服务 zookeeper
非关系型数据库 mongodb

如需在项目过程中使用新的技术需要提前与架构组确认,并确认具体业务场景,由架构组统一规划。

中间件引进流程:

调查——>试用——>选型——>深入研究——>Demo——>Wiki——>分享推广——>业务系统试用——>改进完善——>小规模推行——>改进完善——>大规模推行

业务架构图设计规范

系统架构 = 系统 + 架构。应用就是系统的最小单元,应用分级和应用编排则构成了应用关系即应用的架构,它有利于应用的管理、交互和追踪。业务架构图即用画图的方式来描述系统及系统间联系,可以说是一图抵万言,架构图能够清晰的展现,业务系统在公司整体架构中的位置、职责,以及他们直接的关系,在业务架构图的设计过程中,我们应遵循以下几点规范:

  • 时序图应包含业务所涉及到的所有参与者
  • 架构图使用不同颜色对前端、Web应用,中台服务等做区分,让人一目了然
  • 需要对本次设计的业务系统做职责和边界的描述
  • 需要在架构图中体现出变更的内容

示例:

应用命名规范

一般要求: 选择有意义的名字,能快速地传达该应用的用途,多个字母间使用“-”连接
实际应用举例:

  • http接入层:以“-web”结尾,比如:sdk-web,shop-mall-web
  • 业务系统:以“-ms”结尾或者具体的业务模块,比如:shop-mall-order、share-mall-ms
  • 管理系统:以“-console”结尾,比如:shop-mall-console
  • 商户服务平台:以“-merchant”结尾,比如:shop-mall-merchant
  • 中台服务、基础服务:使用具体的服务名称,命名应与具体业务无关,比如:message-center
  • 服务提供者:多个字母间使用“-”连接,以“-facade”结尾,比如:shop-mall-order-facade

系统模块划分规范

有些系统不仅需要对外提供http接口,还需要对内提供rpc接口,需要将系统划分为web层和core服务层,以钱包系统为例,wallet-web对外提供http接口,wallet-core对内提供rpc服务,系统还可以对提供的rpc服务做细分,将rpc服务拆解成更小的粒度,以基础商城为例,将mall-core拆分成mall-show、mall-order、mall-pay,需要具体情况具体分析。系统工程生成可使用maven-archetype进行生成,保证各项目代码结构一致
示例:

其他规范

ER图: 新建表和库需要提供ER图,可参考:https://zhuanlan.zhihu.com/p/26129622
示例:

用例图: 新项目需要提供用例图,可参考:https://zhuanlan.zhihu.com/p/29874146
示例:

状态图: 涉及到有状态变更的需要提供状态图,可参考:http://www.cnblogs.com/ywqu/archive/2009/12/17/1626043.html

业务时序图: 描述业务处理流程,建议使用UML或者ProcessOn画图
示例:

接口时序图: 需要在时序图中标明业务在进行的过程中,调用的接口有哪些,以及本次涉及的改动点
示例: