架构的设计与实践

Architecture

Posted by Claire on December 27, 2020

架构的设计与实践

一、对架构的疑问

1.1 什么是架构,对产品有什么影响

  • 把木头加起来,组成一定的结构
  • 系统中的架构要素(子系统、模块、应用服务),结构是针对不同场景设计的,连接是描述要素之间的交互继承关系

1.2 架构有哪些类型

  • 架构域
    • 业务架构

      • 战略

        • 业务需求初期:梳理问题域,确定产品方向和功能范围,为产品架构提供输入
      • 内容

        • 业务规划
        • 业务模块
        • 业务流程
      • 目的

        • 对业务进行拆分,对领域模型进行设计,把显示业务转化为抽象对象
      • 输出

        • 企业战略方向图
        • 问题域列表
        • 业务流程图
    • 数据架构

      • 从业务架构分析业务流程、定义数据架构,流程和数据结合定义产品架构
      • 内容

        • 系统需要什么样的数据

          • 静态数据

            • 元数据
            • 业务对象数据模型
            • 主数据
            • 共享数据
          • 动态数据

            • 数据流转
            • ETL
            • 数据全生命周期管控治理
        • 如何存储这些数据

          • 存储策略

            • 集中式存储
            • 分布式存储
        • 如何进行数据架构设计

          • 通过领域建模,清晰反映企业业务域,清晰描绘企业数据模型
          • ER图

            • 实体

              • 领域对象
            • 属性

              • 领域对象的属性
            • 联系

              • 领域对象之间的关系
    • 产品架构

      • 直接关系的功能模块组成子系统

        • 解决相同问题域的子系统就能够形成一个功能层级
      • 简介关系的功能模块通过直接关系的模块产生联系
      • 产品架构分层
    • 应用架构

      • 承接业务架构,影响技术架构

        • 说明产品架构要分为哪些应用系统,系统如何集成
        • 考虑子系统之间的关系
        • 考虑可复用的组件或模块进行下沉,为业务提供统一支撑
        • 原则

          • 简单性

            • 层次清晰明确,耦合度低
          • 灵活性

            • 可适应业务的快读变化,保持稳定性
          • 整合性

            • 对外提供一致的服务接口,体现共享和协作
    • 技术架构

      • 落地

        • 应对应用架构的技术需求,进行技术选型
        • 问题

          • 如何进行技术层面分层

            • 微服务架构分层模型
            • 单个应用的技术分层
          • 开发框架的选择
          • 开发语言的选择
          • 非功能性需求的选择
        • 各个技术点的分析、方案选择

          • 关键技术清单

            • 技术架构图

1.3 为什么要画架构图

  • 梳理对产品和技术方向的判断

    • 产品发展方向
    • 功能迭代周期和落地
    • 与其他产品的依赖关系
    • 技术方案的演进
  • 提供产品&技术&运营的输出

    • 根据架构图,拆分里程碑
    • 产出运营计划方案
    • 产出技术架构方案
  • 让人可视化的理解架构

    • 勾画产品边界
    • 勾画技术边界
    • 指明发展方向
    • 对产品结构、功能、技术有认知
  • 提供面向不同人员的视图语言

    • 气象学家眼里的中国地图
    • 地理学家眼里的中国地图
    • 面向产品给产品视图,面向技术给技术视图

1.4 何时需要画架构图

  • 设计一个系统的、完整的系统时
  • 随时都可以尝试,不论项目正在开展或者已经结束

1.5 架构图怎么画

  • 根据架构域,进行架构分解
  • 从无到有、从粗到细、从模糊到清晰
  • 依次产出业务架构图、数据架构图、产品架构图、应用架构图、技术架构图

二、业务架构与产品架构设计实践

2.1 分解业务域/问题域/问题空间

  • 根据原始需求,列出问题域

    • 将当前需要解决或者未来可能需要解决的问题放入产品框架

2.2 确定产品方向

  • 经过问题域罗列后,能够找到模糊的产品方向和功能范围
  • 产品用户
  • 核心目标
  • 依赖系统

2.3 绘制业务流程

2.4 业务功能矩阵

  • 分析业务流程,垂直拆分功能职责,识别业务功能和业务服务

2.5 功能架构分层

  • 关注每个流程下,各个功能的枚举和模块之间的分解
  • 将明显同一个产品范围、同一组产品功能的模块放在同一层级,得到基础的产品框架

2.6 明确功能边界

  • 用户感知层
  • 功能模块层
  • 数据层
  • 处理不同信息层级的边界
  • 处理同一层级内子模块的边界

    • 相互独立,界限分明

2.7 明确系统间边界

  • 架构图用不同颜色区分不同系统
  • 自己团队使用亮色标识,外部系统使用暗色标识

2.8 加入信息流

  • 用箭头表明模块间信息流动的方式
  • 可用不同颜色表名各个模块之间的信息交互

三、从领域模型提取数据架构

3.1 ER图

  • 通过领域建模逐步提取系统数据架构图
  • 业务架构-领域建模

    • 四色原型法

      • 时效性原型MI

        • 关系
      • 参与方地点物品原型PPT

        • 实体模型
      • 角色原型ROLE
      • 描述原型DESC
    • 梳理关键流程
    • 领域模型骨干
    • 领域模型角色
    • 领域模型描述
    • 提取ER图,并调整

四、单体式和分布式的应用架构

4.1 通过对产品结构,水平和垂直划分应用

  • 水平划分
  • 垂直划分

4.2 单体式应用

  • 展现层/表现层

    • 用户通过表现层与系统交互
  • 业务层/应用逻辑层

    • 解决业务需求
  • 基础通用层

    • 中间件/业务无关性
  • 数据层

    • DB/NoSQL/分布式文件系统

4.3 分布式应用

  • SOA:通过服务形式相互调用
  • 应用间调用关系

    • 应用集成架构图,标注调用链路中的业务含义,标注应用之间发生的业务关系
  • 外部系统调用
  • 明确应用调用边界

    • 源系统
    • 内部应用
    • 应用依赖系统
    • 输出系统

五、技术架构的战略和战术原则

5.1 相关问题

  • 如何进行纯技术层面分层
  • 开发框架选择
  • 非功能性需求
  • 开发语言选择

5.2 战略层设计原则

  • 合适原则

    • 适合优于业界领先
  • 简单原则

    • 结构复杂性
    • 逻辑复杂性
    • 大道至简
  • 演化原则

    • 扩展、重构、重写

5.3 战术层设计原则

  • 高并发原则

    • 无状态

      • 便于水平扩展
      • 有状态配置的可通过配置中心实现无状态
      • 子主题 3
    • 拆分

      • 系统维度拆分
      • 功能纬度拆分
      • 数据读写纬度
      • 根据访问特征,AOP纬度
      • 模块纬度
    • 服务化

      • 服务化演进
      • 考虑分组、隔离、黑白名单、超市、重试机制、路由、故障补偿
    • 消息队列

      • 服务解耦,异步处理,流量削峰缓冲
      • 牺牲强一致性,保障最终一致性
      • 数据校对:解决数据丢失问题
    • 数据异构

      • 异构数据变更,原子化存储
      • 数据闭环
    • 缓存

      • 用户层:dns/浏览器/操作系统dns/客户端缓存/浏览器缓存/app缓存
      • 代理层:cdn缓存
      • 接入层: nginx代理缓存/nginx +lua+redis做业务数据缓存
      • 应用层:页面静态化,业务数据缓存,消息队列
      • 数据层
  • 高可用原则

    • 降级

      • 降级开关集中化管理
      • 可降级的多级读服务器
      • 开关前置化
      • 业务降级
    • 限流

      • 防止恶意请求攻击或超过系统峰值
      • 请求流量只到cache
      • nginx做请求次数limit限制
      • nginx对指定ip做黑名单决绝或者iptables
    • 可回滚

      • 应用版本可快速回退
  • 业务设计原则

    • 防重设计
    • 幂等设计
    • 流程定义
    • 状态与状态机
    • 后台系统操作可反馈
    • 后台系统审批化
    • 文档注视
    • 备份

5.4 技术架构图

  • 功能需求技术架构图-逻辑架构图

    • 产品架构图和应用架构图为基础
    • 主要体现什么技术,技术实现逻辑
    • 将产品+应用+技术结合起来,呈现在图上
  • 非功能性需求架构图-物理架构图

    • 偏向网络设计、集群设计、中间件设计、数据存储设计等
    • 体现流量访问、数据刘庄、数据存储和技术组件之间的运转

XMind: ZEN - Trial Version