课程简介
随着网络与信息技术的高速发展,软件研发逐渐朝着大规模、高复杂度的大型软件系统发展。特别是随着近几年互联网的高速发展,带动着全行业的互联网转型,使得未来的软件系统还将向着持续性、深层次架构调整的方向发展。在这样的背景下,如何从全局的角度思考软件系统方方面面的问题,提前识别软件项目的技术风险点,并有针对性地制订技术方案,以及如何构建一个更加灵活、易于调整、快速变化的软件系统,成为大型软件系统至关重要的设计内容。
目标收益
本课程首先将系统地讲述高质量的软件架构该设计过程,包括如何运用领域驱动设计的思想贯穿整个架构设计,又如何使软件系统在衍变中调整架构,从而适应需求的变化;如何运用5视图的方法,全面地思考软件架构各方面的问题:从需求的角度进行可行性分析;从全局的角度进行软件分层、技术选型、模块划分等方面的设计;运用数据持久化的方式设计数据结构;运用“属性->场景->决策”的过程把握非功能设计;从部署、网络、性能的角度进行物理架构的设计,从而有效避免架构设计时遗漏关键风险点,使架构设计过程变得有序。
培训对象
中高级工程师、企业架构师、软件设计师、数据库/存储技术人员、技术决策/解决方案人员等。
课程大纲
第一部分 高质量架构设计 第一单元 软件架构设计概述 |
情景剧:软件架构设计的价值 1. 一个人的软件设计过程 2. 5个人的软件设计过程 3. 10个人的软件设计过程 4. 10个人以上的软件设计过程 结论:揭示架构设计的价值与架构师的作用 架构设计5视图法: 1. 介绍架构设计5视图法 2. 运用5视图法设计软件架构的过程 |
第二单元 逻辑架构设计过程 |
案例讲解逻辑架构的设计过程 1. 逻辑架构的概念与作用 2. 需求分析与用例模型设计 由粗到细的需求分析过程 不同类型的用例描述 3. 流程分析与行动图 4. 领域模型分析 讲解领域驱动设计的思想 在需求讨论中绘制领域模型 用原文分析法进行领域分析 5. 需求确认与可行性分析 探讨需求不可行给项目带来的风险 案例讲解主动式需求分析的过程 |
第三单元 开发架构设计过程 |
案例讲解开发架构的设计过程 1. 开发架构的概念与作用 2. 讨论合理的分层架构 案例:演示一个工资系统的需求变更过程 展示三次巨大需求变更及其分析设计过程 探讨什么样的架构能真正适应需求的变更 3. 技术选型与决策 4. 软件架构设计 案例讲解软件的可扩展设计 案例讲解软件的易维护设计 5. 模块划分与分包 6. 软件开发规范的制订 |
第四单元 数据架构设计过程 |
探讨传统的数据架构设计过程 讲解基于领域的数据架构设计过程 1. 如何将领域模型转换为数据库设计 传统的4种关系转换为数据库设计 继承关系的3种数据库设计 2. 如何将领域模型转换为软件 贫血模型 vs. 充血模型 |
第五单位 运行架构设计过程 |
探讨运行架构的设计过程 1. 关注关键点与难点而不是全局 2. 属性→场景→决策的分析过程 专题讨论运行架构需要决策的内容 1. 并发访问与串行操作 2. 同步操作与异步操作 3. 进程与线程 |
第六单元 物理架构设计过程 |
探讨物理架构设计过程 1. 案例讲解一些常见物理架构设计 2. 案例讲解应用架构设计 3. 案例讲解一些技术方案的编写 |
第七单元 逐步演化的架构设计 |
恰如其分的架构设计 1. 恰如其分的架构设计过程 案例:一个邮件系统的架构演变过程 2. 风险驱动的架构设计 逐步演化的架构设计过程 1. 探讨老系统维护过程中架构设计的问题 2. 剖析以往采取的办法及失败的原因 缝缝补补不能从根本上解决 走一步退两步浅尝辄止的根源 抛弃一切从头再来的风险 3. 剖析问题的根源与解决的办法 演化式改造的过程 平台建设与重构并行 改造与维护并举 剖析架构设计中的一些常见误区 |
第二部分互联网架构设计 第八单元 大并发相关的指标 |
高并发相关的指标 1. 吞吐量 / 每秒事务数 / 事务响应时间 2. 用户数 / 用户并发数 / 最大用户并发数 高并发问题的解决思路 1. 目标→问题→方案 2. 业务梳理与优化 |
第九单元 并发问题的快速优化策略 |
传统架构的演变过程 1. All-in-One的架构设计 2. 多级集中的架构设计 3. 传统架构面临的挑战 基于风险的架构设计思想 1. 先识别未来存在的风险,再进行有针对的架构设计 2. 用最快的速度解决最急迫的问题 并发问题的快速优化策略 1. 智能DNS及其优缺点 2. CDN内容分发网络及其优缺点 3. 负载均衡与反向代理 1)Nginx技术及其解决的问题 2)动静分离的设计 3)Zookeeper及其非中心化设计 |
第十单元 数据库瓶颈及其优化策略 |
数据库瓶颈 1. 现有数据库设计及其性能瓶 2. Shared Disk vs. Shared Nothing 3. 介绍PostgreSQL与GreenPlum 数据库读写分离的设计 1. 三种不同类型的操作及其优化策略 业务操作 / 随机查询 / 统计分析 2. MySQL主从机实现读写分离 1)MySQL主从机实现读写分离的思想与局限 2)在原有系统上实现读写分离的改造过程 3. 真正实现读写分离的设计方案 数据库分库的设计思想 1. 纵向拆分的设计思想及其注意的问题 案例:国家金税三期的架构设计 案例:阿里巴巴的架构设计 2. 横向拆分的设计思想及其注意的问题 1)按地域拆分的设计及其评价 2)按用户号进行拆分的设计及其评价 案例:淘宝网的架构设计解析 3. 在原有系统上如何实现数据库分库 1)纵向拆分的系统改造过程 2)横向拆分的系统改造过程 |
第十一单元 应用缓存的设计 |
应用缓存技术 1. 应用缓存技术解决的问题 2. 单机缓存 vs. 分布式缓存 3. 分布式缓存的特点及其设计 Memcached技术 1. Memcached技术及其特点 2. 分布式哈希算法及其一致性哈希 3. Memcached的部署结构及其应用方案 案例:负载均衡的session同步及其故障转移 如何在原有系统上进行应用缓存改造 1. Spring + Memcached的设计改造过程 2. Hibernate + Memcached的设计改造过程 3. Memcached的命中率分析及其调优 4. 应用缓存的设计过程中应当注意的问题 |
第十二单元 内存数据库的设计 |
内存数据库技术 1. 内存数据库的概念 2. 解析内存数据库的运行原理 3. Oracle TimesTen的介绍 4. Gemfire及其在12306的应用 Redis内存数据库技术 1. Redis的运行原理及其特点 2. Redis的部署形式 3. Redis的应用设计 案例:spring-redis-data的设计应用 案例:京东订单系统的优化过程 4. 内存数据库的设计局限 |
第十三单元 异步化操作的设计 |
1. 异步化操作的原理 案例:12306的异步化改造过程 2. 异步化操作的设计实践 3. 分布式队列的设计 |
第十四单元 互联网不断演进的架构设计过程 |
互联网+时代的架构设计特点 1. 互联网+带来的巨大变革 2. 互联网公司不断面对的升级改造 3. 传统行业必须面对的互联网转型 好的架构源于不断的衍变 案例:58同城的架构衍变过程 1. 最初的架构设计 2. 网络接入层的改造过程 3. 数据库拆分的改造过程 4. 服务化为中心的改造过程 |
第十五单元 大并发架构设计的验证 |
1. 设计测试用例与场景 2. 录制测试脚本执行测试 3. 测试结果的评价与调优 4. 编写性能测试报告 案例:某大型互联网开票系统的架构验证过程 |
第三部分针对大数据的架构设计 第十六单元 NoSQL数据库及其设计 |
NoSQL数据库的概念 1. 分布式架构与CAP理论 2. ACID vs. BASE 3. 强一致性与弱一致性 4. NoSQL数据库的特点 MongoDB数据库 1. MongoDB数据库简介 2. MongoDB数据库的概念模型 3. 插入、更新、删除、查询操作 案例:MongoDB实现企业征信报告的海量存储与快速查询 4. MongoDB数据库的优劣势分析与适用范围 |
第十七单元 Hadoop大数据处理技术 |
Hadoop大数据处理技术 1. Hadoop简介 2. Hadoop生态圈 3. Hadoop架构及其与传统架构的优势 Hadoop的核心组件 1. 解析HDFS分布式文件系统的运行原理 2. 解析MapReduce分布式运算框架的运行原理 3. MapReduce的优劣势与适用范围 案例:WordCount词频计算程序的分析设计过程 Hadoop的生态圈 1. Hive技术 1)Hive技术简介 2)Hive与传统关系型数据库的比较 3)Hive的建表、载入数据、查询数据的语句 2. Spark技术 1)Spark设计原理 2)Spark编程实践 案例:Spark小步快跑的设计过程 3. Sqoop技术 1)Sqoop技术简介 2)Sqoop导入语句 3)Sqoop导出语句 4. HBase数据库 1)HBase数据库的简介 2)HBase数据库的概念模型 3)HBase的面向列式存储 4)HBase的系统架构 案例:用HBase存储与展示搜索结果 5. ElasticSearch搜索引擎 1)ElasticSearch设计原理 2)ElasticSearch+Hive的设计方案 3)ElasticSearch的RUSTful数据搜索 案例:如何实现海量数据秒级响应 Hadoop的安装部署 1. Hadoop的物理部署架构 2. Hadoop的技术选型 3. Hadoop的组件部署结构 |
第十八单元 面向主题的数据仓库设计 |
数据仓库的概念 1. 大范围数据统计的操作特点与设计思路 2. 数据仓库的架构设计 大数据环境下的数据仓库设计 1. 大数据环境下数据仓库设计面临的困境 2. 讲解海量数据的多维数据模型设计方案 案例:HBase实现大数据多维模型 案例:企业征信大数据的设计过程 3. 浅析数据挖掘与机器学习过程 传统BI系统的大数据转型 1. 传统BI系统面临的难题 2. 案例讲解演化式BI转型过程 |
第一部分 高质量架构设计 第一单元 软件架构设计概述 情景剧:软件架构设计的价值 1. 一个人的软件设计过程 2. 5个人的软件设计过程 3. 10个人的软件设计过程 4. 10个人以上的软件设计过程 结论:揭示架构设计的价值与架构师的作用 架构设计5视图法: 1. 介绍架构设计5视图法 2. 运用5视图法设计软件架构的过程 |
第二单元 逻辑架构设计过程 案例讲解逻辑架构的设计过程 1. 逻辑架构的概念与作用 2. 需求分析与用例模型设计 由粗到细的需求分析过程 不同类型的用例描述 3. 流程分析与行动图 4. 领域模型分析 讲解领域驱动设计的思想 在需求讨论中绘制领域模型 用原文分析法进行领域分析 5. 需求确认与可行性分析 探讨需求不可行给项目带来的风险 案例讲解主动式需求分析的过程 |
第三单元 开发架构设计过程 案例讲解开发架构的设计过程 1. 开发架构的概念与作用 2. 讨论合理的分层架构 案例:演示一个工资系统的需求变更过程 展示三次巨大需求变更及其分析设计过程 探讨什么样的架构能真正适应需求的变更 3. 技术选型与决策 4. 软件架构设计 案例讲解软件的可扩展设计 案例讲解软件的易维护设计 5. 模块划分与分包 6. 软件开发规范的制订 |
第四单元 数据架构设计过程 探讨传统的数据架构设计过程 讲解基于领域的数据架构设计过程 1. 如何将领域模型转换为数据库设计 传统的4种关系转换为数据库设计 继承关系的3种数据库设计 2. 如何将领域模型转换为软件 贫血模型 vs. 充血模型 |
第五单位 运行架构设计过程 探讨运行架构的设计过程 1. 关注关键点与难点而不是全局 2. 属性→场景→决策的分析过程 专题讨论运行架构需要决策的内容 1. 并发访问与串行操作 2. 同步操作与异步操作 3. 进程与线程 |
第六单元 物理架构设计过程 探讨物理架构设计过程 1. 案例讲解一些常见物理架构设计 2. 案例讲解应用架构设计 3. 案例讲解一些技术方案的编写 |
第七单元 逐步演化的架构设计 恰如其分的架构设计 1. 恰如其分的架构设计过程 案例:一个邮件系统的架构演变过程 2. 风险驱动的架构设计 逐步演化的架构设计过程 1. 探讨老系统维护过程中架构设计的问题 2. 剖析以往采取的办法及失败的原因 缝缝补补不能从根本上解决 走一步退两步浅尝辄止的根源 抛弃一切从头再来的风险 3. 剖析问题的根源与解决的办法 演化式改造的过程 平台建设与重构并行 改造与维护并举 剖析架构设计中的一些常见误区 |
第二部分互联网架构设计 第八单元 大并发相关的指标 高并发相关的指标 1. 吞吐量 / 每秒事务数 / 事务响应时间 2. 用户数 / 用户并发数 / 最大用户并发数 高并发问题的解决思路 1. 目标→问题→方案 2. 业务梳理与优化 |
第九单元 并发问题的快速优化策略 传统架构的演变过程 1. All-in-One的架构设计 2. 多级集中的架构设计 3. 传统架构面临的挑战 基于风险的架构设计思想 1. 先识别未来存在的风险,再进行有针对的架构设计 2. 用最快的速度解决最急迫的问题 并发问题的快速优化策略 1. 智能DNS及其优缺点 2. CDN内容分发网络及其优缺点 3. 负载均衡与反向代理 1)Nginx技术及其解决的问题 2)动静分离的设计 3)Zookeeper及其非中心化设计 |
第十单元 数据库瓶颈及其优化策略 数据库瓶颈 1. 现有数据库设计及其性能瓶 2. Shared Disk vs. Shared Nothing 3. 介绍PostgreSQL与GreenPlum 数据库读写分离的设计 1. 三种不同类型的操作及其优化策略 业务操作 / 随机查询 / 统计分析 2. MySQL主从机实现读写分离 1)MySQL主从机实现读写分离的思想与局限 2)在原有系统上实现读写分离的改造过程 3. 真正实现读写分离的设计方案 数据库分库的设计思想 1. 纵向拆分的设计思想及其注意的问题 案例:国家金税三期的架构设计 案例:阿里巴巴的架构设计 2. 横向拆分的设计思想及其注意的问题 1)按地域拆分的设计及其评价 2)按用户号进行拆分的设计及其评价 案例:淘宝网的架构设计解析 3. 在原有系统上如何实现数据库分库 1)纵向拆分的系统改造过程 2)横向拆分的系统改造过程 |
第十一单元 应用缓存的设计 应用缓存技术 1. 应用缓存技术解决的问题 2. 单机缓存 vs. 分布式缓存 3. 分布式缓存的特点及其设计 Memcached技术 1. Memcached技术及其特点 2. 分布式哈希算法及其一致性哈希 3. Memcached的部署结构及其应用方案 案例:负载均衡的session同步及其故障转移 如何在原有系统上进行应用缓存改造 1. Spring + Memcached的设计改造过程 2. Hibernate + Memcached的设计改造过程 3. Memcached的命中率分析及其调优 4. 应用缓存的设计过程中应当注意的问题 |
第十二单元 内存数据库的设计 内存数据库技术 1. 内存数据库的概念 2. 解析内存数据库的运行原理 3. Oracle TimesTen的介绍 4. Gemfire及其在12306的应用 Redis内存数据库技术 1. Redis的运行原理及其特点 2. Redis的部署形式 3. Redis的应用设计 案例:spring-redis-data的设计应用 案例:京东订单系统的优化过程 4. 内存数据库的设计局限 |
第十三单元 异步化操作的设计 1. 异步化操作的原理 案例:12306的异步化改造过程 2. 异步化操作的设计实践 3. 分布式队列的设计 |
第十四单元 互联网不断演进的架构设计过程 互联网+时代的架构设计特点 1. 互联网+带来的巨大变革 2. 互联网公司不断面对的升级改造 3. 传统行业必须面对的互联网转型 好的架构源于不断的衍变 案例:58同城的架构衍变过程 1. 最初的架构设计 2. 网络接入层的改造过程 3. 数据库拆分的改造过程 4. 服务化为中心的改造过程 |
第十五单元 大并发架构设计的验证 1. 设计测试用例与场景 2. 录制测试脚本执行测试 3. 测试结果的评价与调优 4. 编写性能测试报告 案例:某大型互联网开票系统的架构验证过程 |
第三部分针对大数据的架构设计 第十六单元 NoSQL数据库及其设计 NoSQL数据库的概念 1. 分布式架构与CAP理论 2. ACID vs. BASE 3. 强一致性与弱一致性 4. NoSQL数据库的特点 MongoDB数据库 1. MongoDB数据库简介 2. MongoDB数据库的概念模型 3. 插入、更新、删除、查询操作 案例:MongoDB实现企业征信报告的海量存储与快速查询 4. MongoDB数据库的优劣势分析与适用范围 |
第十七单元 Hadoop大数据处理技术 Hadoop大数据处理技术 1. Hadoop简介 2. Hadoop生态圈 3. Hadoop架构及其与传统架构的优势 Hadoop的核心组件 1. 解析HDFS分布式文件系统的运行原理 2. 解析MapReduce分布式运算框架的运行原理 3. MapReduce的优劣势与适用范围 案例:WordCount词频计算程序的分析设计过程 Hadoop的生态圈 1. Hive技术 1)Hive技术简介 2)Hive与传统关系型数据库的比较 3)Hive的建表、载入数据、查询数据的语句 2. Spark技术 1)Spark设计原理 2)Spark编程实践 案例:Spark小步快跑的设计过程 3. Sqoop技术 1)Sqoop技术简介 2)Sqoop导入语句 3)Sqoop导出语句 4. HBase数据库 1)HBase数据库的简介 2)HBase数据库的概念模型 3)HBase的面向列式存储 4)HBase的系统架构 案例:用HBase存储与展示搜索结果 5. ElasticSearch搜索引擎 1)ElasticSearch设计原理 2)ElasticSearch+Hive的设计方案 3)ElasticSearch的RUSTful数据搜索 案例:如何实现海量数据秒级响应 Hadoop的安装部署 1. Hadoop的物理部署架构 2. Hadoop的技术选型 3. Hadoop的组件部署结构 |
第十八单元 面向主题的数据仓库设计 数据仓库的概念 1. 大范围数据统计的操作特点与设计思路 2. 数据仓库的架构设计 大数据环境下的数据仓库设计 1. 大数据环境下数据仓库设计面临的困境 2. 讲解海量数据的多维数据模型设计方案 案例:HBase实现大数据多维模型 案例:企业征信大数据的设计过程 3. 浅析数据挖掘与机器学习过程 传统BI系统的大数据转型 1. 传统BI系统面临的难题 2. 案例讲解演化式BI转型过程 |