一、架构
软件架构是系统的一个草图,阐述了各个组件之间的通信,层次划分,一旦系统开始详细设计,架构蓝图就很难甚至无法改变。
- 传统分层架构
- 前后端分离架构
- 微服务架构
分层架构
分层架构是一种设计软件架构的思想。
- 开放API层:可直接封装Service接口暴露成RPC接口;通过Web封装成http接口;网关控制层等。
- 终端显示层:各个端的模板渲染并执行显示的层。当前主要是Velocity 渲染,JS渲染,JSP渲染,移动端展示等。
- Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
- Service 层:相对具体的业务逻辑服务层。
- Manager 层:通用业务处理层,它有如下特征:对第三方平台封装的层,预处理返回结果及转化异常信息,适配上层接口。对 Service 层通用能力的下沉,如缓存方案、中间件通用处理。 与 DAO 层交互,对多个 DAO 的组合复用。
- DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase、OB 等进行数据交互。
- 第三方服务:包括其它部门 RPC 服务接口,基础平台,其它公司的 HTTP 接口,如淘宝开放平台、支付宝付款服务、高德地图服务等。
- 外部数据接口:外部(应用)数据存储服务提供的接口,多见于数据迁移场景中。
通常意义上的三层架构就是将整个业务应用划分为展现层(表示层)(User Interface Layer)、业务逻辑层(Buesiness Logic Layer)、数据访问层(Data Access Layer)。区分层次的目的是为了体现“高内聚,低耦合”的思想。
分层领域模型规约
- DO(Data Object),此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
- DTO(Data Transfer Object),数据传输对象,Service或Manager向外传输的对象。
- BO(Business Object),业务对象,可以由Service层输出的封装业务逻辑的对象。
- VO(View Object),显示层对象,通常是Web向模板渲染引擎层传输的对象。
- Query,数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
二、微服务架构
Martin Fowler于2014年提出的Micro Service概念,谈论多年的SOA(Service-Oriented Architecture,面向服务的架构)终于有了新的解决方案,不再需要ESB(Enterprise Service Bus,企业服务总线),并随着Docker的普及,一个轻量级SOA架构MSA诞生。
单体应用架构
若干业务模块打包封装到一个war包。单块架构/单体应用架构
单体应用架构:尽管已经进行了模块化,但UI和若干业务都被打包在一个war包中,该war包包含了整个系统所有的业务功能。
缺点在于:
- 复杂性高。模块多、边界模糊、依赖不清晰、代码质量参差不齐。
- 技术债务。随着时间推移、需求变更、人员更迭,导致不坏不修,且代码难以被修改。
- 部署频率低。构建和部署时间增加,全量部署耗时长、风险高。
- 可靠性差。某个应用bug,如死循环、OOM等导致整个应用崩溃。
- 拓展能力受限。有些模块计算密集,有些IO密集,导致在cpu、内存等硬件选择上无法兼顾。
- 阻碍技术创新。