课程简介
本课程首先将系统地讲述高质量的软件架构该设计过程,包括如何运用领域驱动设计的思想贯穿整个架构设计,又如何使软件系统在衍变中调整架构,从而适应需求的变化;如何运用5视图的方法,全面地思考软件架构各方面的问题,从需求入手逐步落实到可行的技术架构;从全局的角度进行软件分层、技术选型、模块划分等方面的设计;运用数据持久化的方式设计数据结构;运用“属性->场景->决策”的过程把握非功能设计;从部署、网络、性能的角度进行物理架构的设计,从而有效避免架构设计时遗漏关键风险点,使架构设计过程变得有序。
目标收益
培训对象
课程大纲
第一章 企业架构设计概述 |
什么是软件架构 情景剧:软件架构设计的价值 一个人的软件设计过程 7-8个人的软件设计过程 几十个人的软件设计过程 结论:软件架构是从宏观上说明一套系统的组成与特性 1)业务架构设计 2)应用架构设计 3)数据架构设计 4)技术架构设计 5)物理架构设计 什么是企业架构设计 1.站在全局角度去规划整个企业的架构 1)企业中各个产品线的业务规划 → 打通业务流 2)企业中各个产品线的技术规划 → 建立技术平台 3)企业中各个产品线的数据规划 → 建立数据中台 4)企业中各个产品线的组织规划 → 建立开发规范与组织原则 2.需求驱动 vs. 架构驱动 需求驱动:整理现有的、已知的碎片化需求 架构驱动:从全局的角度探索未知的业务,摸索未来发展的模态 1)业务上 → 各部门精益协作,降本增效(敏捷转型) 2)数据上 → 打通上下游产业链,建立生态(数字化转型) 3)技术上 → 搭建统一、规范的平台,并持续改进(架构演化) 软件架构设计的发展历程 1. 什么是软件架构及其架构发展历程 2. 介绍与比较当今主流的企业架构设计框架与方法论: Zachman,TOGAF,FEAF/FEA,DDD与中台架构 3. TOGAF架构设计思想与框架 4. DDD架构设计思想与框架 5. 中台架构设计思想与框架 |
第二章 业务架构设计与领域驱动 |
业务架构的规划与设计过程 一、业务架构的概念与重要作用 二、业务架构的梳理与设计过程 1. 对现有架构的梳理:对企业当前IT建设现状的梳理与分析 2. 价值流分析:以客户价值为中心,识别业务能力短板,制订架构建设目标 3. 组件化模型分析:从内部、外部两个方向梳理,制订组件化改造方向 对现有架构的梳理与架构蓝图 实战演练:某服装行业的企业业务架构梳理过程 1. 组织模型与应用架构覆盖率的分析,发现应用架构的短板 2. 基于价值流的分析,建立业务能力与应用架构的映射 3. 基于价值流的业务能力,规划企业的应用架构与数据架构 价值流分析与业务架构梳理过程 1. 分析企业的组织架构(内部/外部/利益相关者) 2. 分析组织架构中不同角色的价值主张,形成价值流地图 3. 分析价值流与相关的业务能力之间的关系 4. 将价值流进一步细化,形成端到端的流程清单 5. 在流程清单中增加角色智能,绘制端到端的流程图 基于组件的模型分析与优化 一、CBM组件化模型的概念与设计思想 1. 内部专业化:整合内部业务职能,把流程优化转变为业务模块化建设 2. 外部专业化:集成外部商业合作伙伴,打造端到端的行业生态系统 二、CBM分析与改造的三个阶段:洞察、架构、投资 DDD领域驱动设计与领域模型 DDD是解决业务复杂性的问题 1.最初的产品需求并不复杂,但随着业务的拓展越来越复杂 2.随着业务的拓展,系统规模越来越大,交付速度越来越慢 3.越来越激烈的市场竞争,需要越来越快的交付速度 4.越来越快的技术更迭,需要软件系统越来越快速的技术更迭 解决方案: 1.认知负载理论揭示系统越复杂,业务变更成本越高 2.领域驱动设计的解决方案: 1)问题空间与解空间的设计思路 2)划分子域、限界上下文与领域建模 3)将限界上下文的划分落实到微服务的开发 基于业务领域知识的业务探索 1. 传统的业务需求分析方法 2. 领域驱动设计:原文分析法 3. 领域驱动设计:事件风暴法 事件风暴领域建模过程 事件风暴法与敏捷软件开发的融合 演练案例:在线订餐系统的领域设计过程 1. 从领域中吸取业务领域知识 2. 统一语言建模:与用户沟通需求的高级技巧 3. 事件风暴会议 1) 梳理业务流程,识别领域事件 2) 为每个领域事件识别参与者、行为、相关事物 3) 标记事物之间的关系、聚合、聚合根 4) 根据业务划分限界上下文 5) 遍历所有事件,确定上下文映射 4. 业务领域建模 1) 为每个领域事件构建业务领域模型 2) 划分主题域、支撑域、通用域 3) 落实各子域之间的联系、接口及事件通知机制 |
第三章 应用架构设计与架构规划 |
应用架构的概念与设计思路 一、系统规划与接口定义 案例:远程智慧医疗平台的系统规划过程 二、系统分层与技术中台设计 剖析常见的架构设计模式及其设计思想 1. 整洁架构与六边形架构设计 2. CQRS架构设计与读写分离 3. 互联网与分布式架构设计 三、开发架构的技术选型 四、软件开发规范的制订 基于领域驱动的微服务架构设计 1. 小而专的微服务设计 2. 限界上下文与微服务拆分 3. 上下文地图与微服务接口 4. 各微服务中实体、值对象与服务的设计 5. 各微服务中聚合、工厂与仓库的设计 6. 领域模型4种关系3种继承的数据库设计 7. 聚合层的设计、工厂和仓库的实现 8. 基于DDD的微服务架构分层 DDD+微服务的设计难题与解决思路 1. 跨库查询的设计难题与设计实现 2. 领域事件的通知机制与设计实现 3. 微服务接口的防腐层设计 4. 状态查询跟踪的设计思路与代码实现 |
第四章 数据架构设计与数据库设计 |
数据架构设计思路与过程 一、数据架构的设计思路:将数据从资源变为资产 1.数据生产:信息化建设过程中,制订数据标准、提高数据质量 2.数据加工:将分散在各系统的数据收集起来,通过加工形成资产 3.数据利用:进行数字化建设,让数据为业务赋能 数据资产管理与数据治理 数据资产管理的思路 1. 数据资产的构成:业务数据、分析数据、主数据 2. 数据资产管理的核心是数据治理 数据治理面临的难题 1. 杂乱无章的数据来源 2. 晦涩难懂的数据语义 3. 千差万别的数据格式 4. 无处不在的数据问题 数据治理的目标 1. 数据资产清理 2. 数据标准统一 3. 数据质量管理 4. 数据职责清晰 数据治理的过程 1. 通过领域模型梳理各业务系统的业务 2. 将领域模型转换成多维数据模型 3. 探查数据质量,建立ETL过程 4. 将数据导入数据仓库,划分主题模型 案例:智慧远程大数据平台的建设过程 将领域模型转换成多维数据模型 1. 建立多维数据模型 a) 动态数据:核心业务数据,有业务发生时间,最终形成事实表 b) 静态数据:相关的档案、信息表、数据字典,最终形成维度表 2. 多维数据模型优化 a) 雪花模型转换为星型模型 b) 日期维、组合维、层级维 c) 一对多、多对多的模型转换 3. 数据主题域的划分 4. 数据中台的分层: 原始数据层、细节数据层、轻度综合层、数据集市层 5. 数据集市与数据分析挖掘 |
第五章 技术架构设计与技术规划 |
探讨技术架构的设计过程 1. 关注关键点与难点而不是全局 2. 属性→场景→决策的分析过程 3. 架构跑道、意图架构与使能故事 互联网分布式系统的架构演化 案例:讲解某互联网系统的架构演进过程 初始状态:All-in-One集中式架构设计 1) 多级集中式架构及其弊病 2) CDN内容分发网络及其应用 1000万以内:前后端分离的架构设计 1) 前后端分离的应用实战 案例:基于vue+springboot+mybatis的架构实践 2) 数据接入的高可用设计实践 案例:Nginx的高可用设计实践 案例:F5+LVS多层负载均衡的设计实践 案例:k8s接入层ingress的设计实践 1000万以上:读写分离的架构设计 案例:生产库和基于生产库微服务设计实践 1. 数据库的横向纵向切分 1) 数据库的纵向切分与微服务的设计 2) 数据库的横向切分与分布式数据库 2. 分布式缓存的设计 3. 异步化操作与分布式队列 4. NewSQL数据库的原理与应用 案例:查询库和基于查询库微服务设计实践 1. 读写分离后查询库的设计思路 1) 查询库“宽表”的设计思路与实践 2) T+1模式与基于消息的实时数据同步 2. NoSQL数据库的原理及其应用 亿级流量的架构设计:通过分层实现逐级限流 1. SOA架构的设计局限 2. 高并发、高可用微服务的架构设计 1) 微服务的拆分原则与分布式云部署 2) 通过Kubernetes实现微服务的弹性扩容与高可用 3) 微服务的高可用措施:故障转移、熔断、降级、限流措施 |
第六章 物理架构设计与云部署 |
探讨物理架构设计过程 1. 案例讲解一些常见物理架构设计 2. 案例讲解IT架构规划与网络部署 3. 案例讲解一些技术方案的编写 云原生(Cloud Native)的概念 1. 面向互联网分布式系统运维的难点与痛点 2. 云原生=微服务+DevOps+持续交付+容器化bus 3. 云原生架构的核心思想与“12因素(12-Factors)” 4. 云原生的设计实现:Kubernetes、微服务、服务网格 分布式云原生的自动化运维平台 1.基于Jenkins与pipeline构建持续发布平台 2.基于SonarQube与Jacoco构建质量监督平台 3.基于Docker+Kubernetes构建容器化部署平台 4.包含各种分布式缓存、分布式队列、分布式事务的PaaS云平台 5.基于NoSQL/NewSQL分布式数据库的DaaS数据平台 6.基于Skywalking的链路跟踪与系统调优平台 7.基于Prometheus+Grafana的自动化监控告警平台 8.基于EFK的分布式日志监控平台 |
第一章 企业架构设计概述 什么是软件架构 情景剧:软件架构设计的价值 一个人的软件设计过程 7-8个人的软件设计过程 几十个人的软件设计过程 结论:软件架构是从宏观上说明一套系统的组成与特性 1)业务架构设计 2)应用架构设计 3)数据架构设计 4)技术架构设计 5)物理架构设计 什么是企业架构设计 1.站在全局角度去规划整个企业的架构 1)企业中各个产品线的业务规划 → 打通业务流 2)企业中各个产品线的技术规划 → 建立技术平台 3)企业中各个产品线的数据规划 → 建立数据中台 4)企业中各个产品线的组织规划 → 建立开发规范与组织原则 2.需求驱动 vs. 架构驱动 需求驱动:整理现有的、已知的碎片化需求 架构驱动:从全局的角度探索未知的业务,摸索未来发展的模态 1)业务上 → 各部门精益协作,降本增效(敏捷转型) 2)数据上 → 打通上下游产业链,建立生态(数字化转型) 3)技术上 → 搭建统一、规范的平台,并持续改进(架构演化) 软件架构设计的发展历程 1. 什么是软件架构及其架构发展历程 2. 介绍与比较当今主流的企业架构设计框架与方法论: Zachman,TOGAF,FEAF/FEA,DDD与中台架构 3. TOGAF架构设计思想与框架 4. DDD架构设计思想与框架 5. 中台架构设计思想与框架 |
第二章 业务架构设计与领域驱动 业务架构的规划与设计过程 一、业务架构的概念与重要作用 二、业务架构的梳理与设计过程 1. 对现有架构的梳理:对企业当前IT建设现状的梳理与分析 2. 价值流分析:以客户价值为中心,识别业务能力短板,制订架构建设目标 3. 组件化模型分析:从内部、外部两个方向梳理,制订组件化改造方向 对现有架构的梳理与架构蓝图 实战演练:某服装行业的企业业务架构梳理过程 1. 组织模型与应用架构覆盖率的分析,发现应用架构的短板 2. 基于价值流的分析,建立业务能力与应用架构的映射 3. 基于价值流的业务能力,规划企业的应用架构与数据架构 价值流分析与业务架构梳理过程 1. 分析企业的组织架构(内部/外部/利益相关者) 2. 分析组织架构中不同角色的价值主张,形成价值流地图 3. 分析价值流与相关的业务能力之间的关系 4. 将价值流进一步细化,形成端到端的流程清单 5. 在流程清单中增加角色智能,绘制端到端的流程图 基于组件的模型分析与优化 一、CBM组件化模型的概念与设计思想 1. 内部专业化:整合内部业务职能,把流程优化转变为业务模块化建设 2. 外部专业化:集成外部商业合作伙伴,打造端到端的行业生态系统 二、CBM分析与改造的三个阶段:洞察、架构、投资 DDD领域驱动设计与领域模型 DDD是解决业务复杂性的问题 1.最初的产品需求并不复杂,但随着业务的拓展越来越复杂 2.随着业务的拓展,系统规模越来越大,交付速度越来越慢 3.越来越激烈的市场竞争,需要越来越快的交付速度 4.越来越快的技术更迭,需要软件系统越来越快速的技术更迭 解决方案: 1.认知负载理论揭示系统越复杂,业务变更成本越高 2.领域驱动设计的解决方案: 1)问题空间与解空间的设计思路 2)划分子域、限界上下文与领域建模 3)将限界上下文的划分落实到微服务的开发 基于业务领域知识的业务探索 1. 传统的业务需求分析方法 2. 领域驱动设计:原文分析法 3. 领域驱动设计:事件风暴法 事件风暴领域建模过程 事件风暴法与敏捷软件开发的融合 演练案例:在线订餐系统的领域设计过程 1. 从领域中吸取业务领域知识 2. 统一语言建模:与用户沟通需求的高级技巧 3. 事件风暴会议 1) 梳理业务流程,识别领域事件 2) 为每个领域事件识别参与者、行为、相关事物 3) 标记事物之间的关系、聚合、聚合根 4) 根据业务划分限界上下文 5) 遍历所有事件,确定上下文映射 4. 业务领域建模 1) 为每个领域事件构建业务领域模型 2) 划分主题域、支撑域、通用域 3) 落实各子域之间的联系、接口及事件通知机制 |
第三章 应用架构设计与架构规划 应用架构的概念与设计思路 一、系统规划与接口定义 案例:远程智慧医疗平台的系统规划过程 二、系统分层与技术中台设计 剖析常见的架构设计模式及其设计思想 1. 整洁架构与六边形架构设计 2. CQRS架构设计与读写分离 3. 互联网与分布式架构设计 三、开发架构的技术选型 四、软件开发规范的制订 基于领域驱动的微服务架构设计 1. 小而专的微服务设计 2. 限界上下文与微服务拆分 3. 上下文地图与微服务接口 4. 各微服务中实体、值对象与服务的设计 5. 各微服务中聚合、工厂与仓库的设计 6. 领域模型4种关系3种继承的数据库设计 7. 聚合层的设计、工厂和仓库的实现 8. 基于DDD的微服务架构分层 DDD+微服务的设计难题与解决思路 1. 跨库查询的设计难题与设计实现 2. 领域事件的通知机制与设计实现 3. 微服务接口的防腐层设计 4. 状态查询跟踪的设计思路与代码实现 |
第四章 数据架构设计与数据库设计 数据架构设计思路与过程 一、数据架构的设计思路:将数据从资源变为资产 1.数据生产:信息化建设过程中,制订数据标准、提高数据质量 2.数据加工:将分散在各系统的数据收集起来,通过加工形成资产 3.数据利用:进行数字化建设,让数据为业务赋能 数据资产管理与数据治理 数据资产管理的思路 1. 数据资产的构成:业务数据、分析数据、主数据 2. 数据资产管理的核心是数据治理 数据治理面临的难题 1. 杂乱无章的数据来源 2. 晦涩难懂的数据语义 3. 千差万别的数据格式 4. 无处不在的数据问题 数据治理的目标 1. 数据资产清理 2. 数据标准统一 3. 数据质量管理 4. 数据职责清晰 数据治理的过程 1. 通过领域模型梳理各业务系统的业务 2. 将领域模型转换成多维数据模型 3. 探查数据质量,建立ETL过程 4. 将数据导入数据仓库,划分主题模型 案例:智慧远程大数据平台的建设过程 将领域模型转换成多维数据模型 1. 建立多维数据模型 a) 动态数据:核心业务数据,有业务发生时间,最终形成事实表 b) 静态数据:相关的档案、信息表、数据字典,最终形成维度表 2. 多维数据模型优化 a) 雪花模型转换为星型模型 b) 日期维、组合维、层级维 c) 一对多、多对多的模型转换 3. 数据主题域的划分 4. 数据中台的分层: 原始数据层、细节数据层、轻度综合层、数据集市层 5. 数据集市与数据分析挖掘 |
第五章 技术架构设计与技术规划 探讨技术架构的设计过程 1. 关注关键点与难点而不是全局 2. 属性→场景→决策的分析过程 3. 架构跑道、意图架构与使能故事 互联网分布式系统的架构演化 案例:讲解某互联网系统的架构演进过程 初始状态:All-in-One集中式架构设计 1) 多级集中式架构及其弊病 2) CDN内容分发网络及其应用 1000万以内:前后端分离的架构设计 1) 前后端分离的应用实战 案例:基于vue+springboot+mybatis的架构实践 2) 数据接入的高可用设计实践 案例:Nginx的高可用设计实践 案例:F5+LVS多层负载均衡的设计实践 案例:k8s接入层ingress的设计实践 1000万以上:读写分离的架构设计 案例:生产库和基于生产库微服务设计实践 1. 数据库的横向纵向切分 1) 数据库的纵向切分与微服务的设计 2) 数据库的横向切分与分布式数据库 2. 分布式缓存的设计 3. 异步化操作与分布式队列 4. NewSQL数据库的原理与应用 案例:查询库和基于查询库微服务设计实践 1. 读写分离后查询库的设计思路 1) 查询库“宽表”的设计思路与实践 2) T+1模式与基于消息的实时数据同步 2. NoSQL数据库的原理及其应用 亿级流量的架构设计:通过分层实现逐级限流 1. SOA架构的设计局限 2. 高并发、高可用微服务的架构设计 1) 微服务的拆分原则与分布式云部署 2) 通过Kubernetes实现微服务的弹性扩容与高可用 3) 微服务的高可用措施:故障转移、熔断、降级、限流措施 |
第六章 物理架构设计与云部署 探讨物理架构设计过程 1. 案例讲解一些常见物理架构设计 2. 案例讲解IT架构规划与网络部署 3. 案例讲解一些技术方案的编写 云原生(Cloud Native)的概念 1. 面向互联网分布式系统运维的难点与痛点 2. 云原生=微服务+DevOps+持续交付+容器化bus 3. 云原生架构的核心思想与“12因素(12-Factors)” 4. 云原生的设计实现:Kubernetes、微服务、服务网格 分布式云原生的自动化运维平台 1.基于Jenkins与pipeline构建持续发布平台 2.基于SonarQube与Jacoco构建质量监督平台 3.基于Docker+Kubernetes构建容器化部署平台 4.包含各种分布式缓存、分布式队列、分布式事务的PaaS云平台 5.基于NoSQL/NewSQL分布式数据库的DaaS数据平台 6.基于Skywalking的链路跟踪与系统调优平台 7.基于Prometheus+Grafana的自动化监控告警平台 8.基于EFK的分布式日志监控平台 |