浅谈架构

fcb226b79e150279769d6becdf281c7.jpg

什么是架构

架构的定义

定义

架构(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
架构模式的核心
  • 架构理念:对问题的认知、对环境的认知、对目的的理解
  • 架构方法:对方法论的掌握、工具的掌握、结构化表达

软件技术架构介绍

二十年来分布式架构模式演进1.png
二十年来分布式架构模式演进2.png

分布式技术架构中面临的常见问题

分布式节点间数据通信问题
  • 网络质量、IO吞吐、通信状态
    多节点(Node)协同计算效率问题
  • 节点故障容错、计算协同(分布/对等/并行/时序)
    CAP的平衡
  • Consistency 一致性、Availability 可用性、Partition Tolerance 分区容错

互联网常见的架构模式

架构结构与特点
  • 节点构成一致,节点间相对隔离无通信
  • 由统一的控制器进行负载分片,Controller简单高效
  • 负载不一定是流量,也可以是业务等任何用于节点隔离的因子
  • 2结构增加共享节点用于共享数据,可以实现负载在节点间的迁移
    形式与场景
  • 1最为常见普遍的流量分片与负载均衡、业务分组
  • 1节点如果过重,就往往是我们说的中心架构
  • 2经常用于Failover,比如云主机、状态迁移
  • 2模式中如果Controller弱化,其实就是企业层级数据分块

架构结构.png

常见分布式架构-主备模式

架构结构与特点
  • 由Master-Slave主从结构,且只有一个主节点
  • 主节点提供全面服务•在变形情况下,备份节点可提供部分服务
  • 2模式可动态任一节点可提供全面服务,数据副本是瓶颈
    形式与场景
  • 1常见为数据库
  • 2为分布式数据,比如ZK

常见分布式架构-主备模式.png

常见分布式架构-对等模式

架构结构与特点
  • 对等节点,任一节点均可对外服务
  • 节点间可相互通信,数据实时多副本同步策略
  • 基于网络拓扑的节点管理及维护
  • 模式增加管理节点,降低网络拓扑维护成本
    形式与场景
  • 1常见为DFS,也包括区块链分布式数据
  • 2类似Hadoop,阿里单元化站点结构
  • 2 在WAN层面其实就是网格计算的缩影

常见分布式架构-对等模式.png

流行技术架构

互联网常见系统架构抽象说明

image.png
常见微服务架构前端流量入口采用负载分片模式

应用层常见是采取一级网络(通过配置推送的软负载)或者二级网络(通过应用网关负载隔离)模式。阿里是使用前者,百度、新浪使用后者,主要取决于微服务的展现形式(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)-聚焦于系统落实于特定具体平台的细节
    模型驱动架构MDA.png

J2EE核心设计模式

诞生于2003年的核心模式
  • 最早诞生于99年的SunPetstore
  • 2003年推出第一版•2007年推出第二版
    核心理念与策略
  • 基于MVC的展现与处理逻辑分离
  • 分层模式
  • 基于网络的数据处理优化
  • 面向服务

image.png

微服务

微服务是否是一种架构

微服务.png

微服务的改进思考

image.png

如何成为优秀架构师

清晰的架构理念

在架构设计之初一定要有鲜明的架构理念
  • 架构理念没有对与错,它只反映我们对环境上下文、问题、约束的认知
    体系化思考
  • 结构性
  • 目的性
    演进化思维
  • 架构没有绝对的好坏,只有对问题的可适性、尤其是对环境的可适,对未来问题的可适
  • 所以一个好的架构理念是必须有演进化思维,也就是架构有演进路径
    历史与知识
  • 历史总是惊人的相似,架构没有新知识

方法论和应用

学习了解架构方法论
  • 学习TOGAF中的信息系统架构、技术架构章节
  • 了解PEAF架构方法构成
    文档的结构化与标准化
  • 别把业务架构、系统架构、技术架构混淆在一起
  • 明确架构理念的文档
  • 架构视图文档:视图反映受众、视角;是表达架构设计的重要构成,给谁看,看什么
    架构的一致性匹配与持续治理
  • 系统架构与业务架构的一致性匹配
  • 架构设计与架构表达的一致性
  • 系统实现与架构设计的一致性
  • 持续的架构治理及优化

模式借鉴

常见的误区
  • 不动脑筋的分层模式
  • 职责链(ResponsibilityChain)与管道(Pipeline)的滥用
  • SOA、MDA的混杂滥用
  • 微服务的滥用
    学习了解架构模式
  • 业界已经有很多成熟的模式,比如PEAF中就定义了15种
  • 学习模式切忌照猫画虎,要真正理解模式的结构和适用性
    应用与反思
  • 跳出框框,多设计
  • 多问问自己,假设是否存在,应用是否合理

架构设计工具

关于架构设计的错误以为
  • 架构设计≠PPT图•架构设计图≠PPT“砖块图”
  • 软件架构的构成:组件图、组件协作图、视图、能力特征说明
    学会最常用的设计工具-UML
  • 结构设计:实体图•协作设计:CRC图(类、职责、协作)、通信模式(状态图)
    其他设计工具
  • 分层结构图:PPT分层L0->L2设计,抽象到具象
  • 流程图:PPT/Visio

一些好书

  • 面向模式的软件架构:5卷
  • 企业应用架构模式
  • 企业集成模式设计.构建及部署消息传递解决方案
  • 软件架构:架构模式特征及实践指南
  • 面向SOA的事件驱动架构设计与实现
  • SOA原理·方法·实践
  • J2EE核心模式(J2EECorePatterns

c992a5265037459df5f89ec98c7651e.jpg
如果你觉得文章有用可以给博主打赏一瓶肥宅快乐水并添加微信:wzq657 获取以下图书的电子版:

  • 面向模式的软件架构(卷4)-分布式计算的模式语言
  • 面向模式的软件架构(卷5)-模式与模式语言
  • 面向模式的软件体系结构(卷1):模式系统
  • 面向模式的软件体系结构(卷2):用于并发与网络化对象的模式
  • 面向模式的软件体系结构(卷3)
  • 企业集成模式:设计、构建及部署消息传递解决方案
  • 企业应用架构模式中文版

3c973a36379404eba87bc15f64815f5.jpg