浅谈架构
什么是架构
架构的定义
定义
架构(Architecture)=体系结构(Structure)+理念(Strategy)+模式(Patterns)
架构方法论中的架构分类定义
企业架构与软件架构
- 企业架构的构成TOGAF/PEAF
- 我们常说的软件架构更多是信息系统架构与技术架构
- 而我们常常关注的反而是业务架构(或者说信息系统中的应用架构)
软件架构分类
- 我们常说的信息系统架构是会分为应用架构、数据架构、基础架构
- 常见的架构结构:分布式
技术架构分类
- 常见的架构驱动设计类型:SOA/EDA/MDA
体系结构
体系结构的组成
体系结构的构成
- 框架(Framework):体系结构的约束定义
- 组件(Component):结构体的构成元素
- 连接器(Connector):组件间的关系
- 任务流(Flow):描述组件间如何利用连接器进行协作
- 视图(View):理解或表达展现体系结构的图形
框架
一种具象化的结构,描述体系结构与外部的交互关系,限制约束组件和连接器的设计
架构理念
什么是架构理念
- 采用什么样的架构方法和架构演进方法去解决当下或未来的问题
- 问题识别、架构目标、架构的特征分析、架构的演进迭代
架构理念的思维
- 体系化:结构性、目的性
- 抽象化:问题的抽象、场景的抽象、体系结构的抽象
演进化思维
- 架构没有绝对的好坏,只有对问题的可适性、尤其是对环境的可适,对未来问题的可适
- 所以一个好的架构理念是必须有演进化思维,也就是架构有演进路径
历史与知识
历史总是惊人的相似,架构没有新知识
经典的互联网分布式架构理念-BASE
Basic Available / Soft state / Eventually consisten
理念背后的问题与思考
- 分布式下的CAP问题与解决成本
- 确定性的范围
架构模式
软件架构的复用是最高级别的复用
- 从复用形式:代码复用-> 程序体(API)复用-> 设计模式复用-> 架构复用
- 从结构范围:方法(API)复用->结构(类)复用->模块复用->系统复用
架构设计模式的构成
- 架构设计模式实际上是一系列程序设计模式的场景化应用
- 上下文Context / 问题Problem / 约束Forces /
- 解决方法Solution / 结构Structure / 角色与职责P&R
架构模式的核心
- 架构理念:对问题的认知、对环境的认知、对目的的理解
- 架构方法:对方法论的掌握、工具的掌握、结构化表达
软件技术架构介绍
分布式技术架构中面临的常见问题
分布式节点间数据通信问题
- 网络质量、IO吞吐、通信状态
多节点(Node)协同计算效率问题
- 节点故障容错、计算协同(分布/对等/并行/时序)
CAP的平衡
- Consistency 一致性、Availability 可用性、Partition Tolerance 分区容错
互联网常见的架构模式
架构结构与特点
- 节点构成一致,节点间相对隔离无通信
- 由统一的控制器进行负载分片,Controller简单高效
- 负载不一定是流量,也可以是业务等任何用于节点隔离的因子
- 2结构增加共享节点用于共享数据,可以实现负载在节点间的迁移
形式与场景
- 1最为常见普遍的流量分片与负载均衡、业务分组
- 1节点如果过重,就往往是我们说的中心架构
- 2经常用于Failover,比如云主机、状态迁移
- 2模式中如果Controller弱化,其实就是企业层级数据分块
常见分布式架构-主备模式
架构结构与特点
- 由Master-Slave主从结构,且只有一个主节点
- 主节点提供全面服务•在变形情况下,备份节点可提供部分服务
- 2模式可动态任一节点可提供全面服务,数据副本是瓶颈
形式与场景
- 1常见为数据库
- 2为分布式数据,比如ZK
常见分布式架构-对等模式
架构结构与特点
- 对等节点,任一节点均可对外服务
- 节点间可相互通信,数据实时多副本同步策略
- 基于网络拓扑的节点管理及维护
- 模式增加管理节点,降低网络拓扑维护成本
形式与场景
- 1常见为DFS,也包括区块链分布式数据
- 2类似Hadoop,阿里单元化站点结构
- 2 在WAN层面其实就是网格计算的缩影
流行技术架构
互联网常见系统架构抽象说明
常见微服务架构前端流量入口采用负载分片模式
应用层常见是采取一级网络(通过配置推送的软负载)或者二级网络(通过应用网关负载隔离)模式。阿里是使用前者,百度、新浪使用后者,主要取决于微服务的展现形式(RPCorRest-API),差异是是否需要一个专职配置中心
为保证请求无状态地实现迁移,所以使用共享数据节点(存储各种形式的临时或中间数据)的形式实现。数据节点往往采用分片的主备模式
面向服务的架构SOA
核心理念
- 复用集成现有已经存在的应用基础能力ApplicationInfrastructure
- 可描述且编排的业务流程BusinessProcess•可组织的有机业务OrganicBusiness
SOA的核心构成
- 服务基础设施ServiceInfrastructure,比如Web服务(WSDL)
- 标准化服务协议:比如SOAP/UDDI•服务集成:ServiceBus比如ESB
- 服务编排:比如BPMN/BPEL
- 服务质量:QoS、SLA
- 服务治理:
SOA与Web服务
- SOA是一种架构设计思想和设计理念,Web服务只是实现工具
事件驱动架构EDA
核心理念
- 以生产-消费为基础的异步通信构建组件间松耦合关系的架构模式
- 改变以往面向过程的API轮询请求
EDA与消息机制的差异
- 带有语义性的事件定义
- 有确定性的事件产生、有规则性的事件路由、有响应的事件消费及回调
- 消息系统是实现EDA的常见基础设施,但不是唯一
EDA的适用性
- 基于异步松耦合,不适用高响应
- 避免跨平台/语言复杂异构环境
- 事件的路由需要清晰明确
- EDA与SOA的结合
模型驱动架构MDA
核心理念
- 以生产-消费为基础的异步通信构建组件间松耦合关系的架构模式
- 改变以往面向过程的API轮询请求
EDA与消息机制的差异
- 带有语义性的事件定义
- 有确定性的事件产生、有规则性的事件路由、有响应的事件消费及回调
- 消息系统是实现EDA的常见基础设施,但不是唯一
EDA的适用性
- 基于异步松耦合,不适用高响应
- 避免跨平台/语言复杂异构环境
- 事件的路由需要清晰明确
- EDA与SOA的结合
模型驱动架构MDA
基于面向对象技术的架构设计理念
- 2002年由OMG推出诞生
- UML–模型设计工具
- MOF–元数据对象机制,定义元数据接口与模型
- CWM–公共仓库元数据模型,处理对象转换
MDA的主要过程
- CIM(Computation Independent Model)-聚焦于系统环境及需求,但不涉及系统内部的结构与运作细节。
- PIM(Platform Independent Model)-聚焦于系统内部细节,但不涉及实现系统得具体平台。
- PSM(Platform Specific Model)-聚焦于系统落实于特定具体平台的细节
J2EE核心设计模式
诞生于2003年的核心模式
微服务
微服务是否是一种架构
微服务的改进思考
如何成为优秀架构师
清晰的架构理念
在架构设计之初一定要有鲜明的架构理念
- 架构理念没有对与错,它只反映我们对环境上下文、问题、约束的认知
体系化思考
- 结构性
- 目的性
演进化思维
- 架构没有绝对的好坏,只有对问题的可适性、尤其是对环境的可适,对未来问题的可适
- 所以一个好的架构理念是必须有演进化思维,也就是架构有演进路径
历史与知识
- 历史总是惊人的相似,架构没有新知识
方法论和应用
学习了解架构方法论
- 学习TOGAF中的信息系统架构、技术架构章节
- 了解PEAF架构方法构成
文档的结构化与标准化
- 别把业务架构、系统架构、技术架构混淆在一起
- 明确架构理念的文档
- 架构视图文档:视图反映受众、视角;是表达架构设计的重要构成,给谁看,看什么
架构的一致性匹配与持续治理
- 系统架构与业务架构的一致性匹配
- 架构设计与架构表达的一致性
- 系统实现与架构设计的一致性
- 持续的架构治理及优化
模式借鉴
常见的误区
- 不动脑筋的分层模式
- 职责链(ResponsibilityChain)与管道(Pipeline)的滥用
- SOA、MDA的混杂滥用
- 微服务的滥用
学习了解架构模式
- 业界已经有很多成熟的模式,比如PEAF中就定义了15种
- 学习模式切忌照猫画虎,要真正理解模式的结构和适用性
应用与反思 - 跳出框框,多设计
- 多问问自己,假设是否存在,应用是否合理
架构设计工具
关于架构设计的错误以为
- 架构设计≠PPT图•架构设计图≠PPT“砖块图”
- 软件架构的构成:组件图、组件协作图、视图、能力特征说明
学会最常用的设计工具-UML
- 结构设计:实体图•协作设计:CRC图(类、职责、协作)、通信模式(状态图)
其他设计工具
- 分层结构图:PPT分层L0->L2设计,抽象到具象
- 流程图:PPT/Visio
一些好书
- 面向模式的软件架构:5卷
- 企业应用架构模式
- 企业集成模式设计.构建及部署消息传递解决方案
- 软件架构:架构模式特征及实践指南
- 面向SOA的事件驱动架构设计与实现
- SOA原理·方法·实践
- J2EE核心模式(J2EECorePatterns
如果你觉得文章有用可以给博主打赏一瓶肥宅快乐水并添加微信:wzq657 获取以下图书的电子版:
- 面向模式的软件架构(卷4)-分布式计算的模式语言
- 面向模式的软件架构(卷5)-模式与模式语言
- 面向模式的软件体系结构(卷1):模式系统
- 面向模式的软件体系结构(卷2):用于并发与网络化对象的模式
- 面向模式的软件体系结构(卷3)
- 企业集成模式:设计、构建及部署消息传递解决方案
- 企业应用架构模式中文版