课程介绍
近些年,随着互联网的不断发展,市场变化越来越快,需求变更越来越频繁。为了能够跟上市场变化的脚步,在市场竞争中占得先机,越来越多的研发团队选择敏捷开发、快速迭代。然而,越来越庞大的软件系统,越来越复杂的业务逻辑,使得系统维护变得越来越困难,变更成本越来越大,团队工作效率越来越低。许多用户需求需要拖延数月才能交付,使得软件企业痛失有利商机,在市场竞争中处于不利地位。微服务架构正是解决复杂系统的应对之策。
微服务架构将复杂系统化整为零,拆分成一个一个的微服务。然后,将庞大的开发团队拆分成一个一个的独立功能团队,去维护各自的微服务。采用微服务架构降低了团队沟通的成本,降低了系统维护的复杂度,更降低了系统发布的周期,使得我们可以快速交付、快速应对市场需求。
但是,微服务应当如何架构?它有哪些技术特点与技术难点?本课程将会用许多的真实案例讲解,什么是微服务,如何用微服务架构我们的系统,并用工作坊的形式,实际带领学员去架构微服务,在动手中获得知识。
此外,微服务只是工具,只学会工具不行,还要学会如何去运用。微服务背后的理论基础是单一职责原则、领域驱动设计。因此,本课程会带领学员站在更深的层次,去深入领悟单一职责原则的本质,深入学习领域驱动设计的过程,以及如何运用它们在复杂的系统中提高代码质量、应对需求变更,并以此为基础将需求转换为微服务系统的设计。
课程的最后将更加务实地探讨一些在微服务转型过程中大家普遍关心的问题:传统架构如何转型微服务?初创型企业如何建设微服务?成熟型企业开展微服务的思路,以及微服务如何与大数据相结合。
课程特色
本课程注重实战,并以工作坊的形式提供很多案例,让学员通过练习掌握微服务架构设计的过程,以及从传统架构向微服务改造的过程。同时,通过大量真实的案例,讲解许多公司在开展微服务转型过程中面临的难题、解决的思路,以及最终的设计。
课程对象
中高级工程师、企业架构师、软件设计师、技术决策/解决方案人员等。
课程大纲
授课内容 | |
第一单元 微服务架构概述 | 什么是微服务架构 微服务是未来互联网发展的必然结果 1. 互联网的发展及其面临的挑战 案例:分析淘宝近十年的发展及其面临的挑战 互联网在面临横向扩展、服务隔离等问题的局限 2. 微服务能够更好地解决互联网问题 讲解什么是微服务架构 剖析微服务架构在解决诸多互联网问题时的思路
微服务架构是应对快速市场变化的必然结果 1. 技术进步与快速市场变化面临的挑战 市场需要更快速的价值交付与技术迭代 软件规模化发展导致软件交付速度的降低 2. 微服务如何解决规模化敏捷的问题 特性团队组织与微服务架构 去中心化技术治理与去中心化数据管理
|
第二单元 微服务常用架构 | 基于SpringCloud的微服务技术框架 1. Spring Cloud简介 2. Spring Boot简介
最简版的微服务架构 1. 服务注册与发现Spring Cloud Eureka 2. 服务网关Spring Cloud Zuul 3. 微服务及其相互调用Spring Cloud Ribbon/Feign 4. 配置管理 Spring Cloud Config
|
第三单元 服务注册与发现 | 服务注册与发现的概念与作用 实现服务注册与发现的方案 1. Dubbo的简介 2. Zookeeper的简介 3. ETCD的简介 4. Netflix Eureka的简介
Spring Cloud Eureka方案 1. Spring Cloud Eureka的系统架构 2. Eureka Server的设计 3. Eureka Client的设计 4. 服务发现的设计 Ø 使用ribbon的设计 Ø 使用feign的设计 5. 熔断机制 Ø 断路器设计模式 Ø 线程池隔离、优雅降级与熔断 Ø Hystrix的断路器设计
练习:使用Eureka构建微服务系统 1. Eureka Server 2. Eureka Client 3. 使用ribbon/feign进行微服务间调用 4. 设计熔断器
|
第四单元 微服务层的设计 | 微服务架构的6种设计模式 1. 聚合模式 案例:电商网站购物功能的设计 Ø 微服务前后端分离的设计 Ø 分布式事务的两阶段提交 Ø TCC方案与阿里GTS Ø 采用分布式事务解决跨库的事务操作 案例:电商网站下单服务的设计 单一职责原则与领域驱动设计 Ø 互联网纵向切分在微服务的实现 Ø 纵向切分应当注意的设计问题 Ø 避免跨库关联查询的设计 2. 代理模式 案例:电商网站支付功能的设计思路 案例:电商网站多渠道支付的微服务实现 3. 链式模式 4. 分支模式 5. 数据共享模式 案例:微服务+数据中台的建设思路 案例:分布式数据库的架构设计 6. 异步消息模式 案例:12306的异步化操作 案例:电商网站异步化操作的微服务实现
微服务的粒度 1. 微服务的拆分原则 2. 微服务的拆分方式
微服务设计的反模式 1. 太多数据迁移 2. 数据共享反模式 3. 频繁交互反模式 探讨:如何解决微服务接口太多的问题
|
第五单元 领域驱动设计 | 所有软件企业不得不面对的问题 1. 我们现在面对的是快速变化的时代 2. 软件研发却出现了问题: 变更越频繁,代码质量下降越快 案例:演示电商网站付款功能代码质量下降的过程 3. 揭示软件退化的根源 案例:演示软件退化的过程与高质量设计的过程 深度解读高内聚与单一职责原则
领域驱动设计 1. 软件变更过程中的设计难题 2. 领域驱动的设计思想 案例:重新演练电商网站付款功能的变更过程 第一个版本的领域模型与设计 Ø 构建用例模型 Ø 构建领域模型 Ø 构建领域事件 第一次变更的分析设计过程 Ø 演示领域分析不断深入的过程 Ø 演示领域驱动指导软件变更的过程 第二次变更与两顶帽子的设计方式 第三次变更与限界上下文 Ø 聚合、工厂、仓库的设计 Ø 限界上下文与微服务 3. 领域驱动的设计实现 贫血模型 vs. 充血模型 领域驱动在传统架构中的实现 领域驱动在微服务架构中的实现
|
第六单元 实战演练微服务+领域驱动设计 | 实战演练:在线订餐系统的领域驱动设计过程 领域建模分析过程 1. 从领域中吸取知识 2. 统一语言建模 3. 事件风暴会议 1) 事件即事实的设计思路 2) 召开事件风暴会议 3) 聚合与聚合根 4) 问题子域与限界上下文 5) 上下文地图与接口定义 4. 业务领域建模
基于领域模型的微服务设计 1. 小而专的微服务设计 2. 限界上下文与微服务拆分 3. 上下文地图与微服务接口 4. 去中心化的数据库设计 5. 聚合层的微服务设计
解决微服务设计难题 1. 领域事件的通知机制 2. 微服务接口的防腐层设计 3. 订单状态跟踪的设计思路
实战演练:远程智慧医疗大数据平台设计过程 1. 系统的建设规划 2. 限界上下文划分 3. 各子域业务领域建模 1) 智慧诊疗数据模型的分析 2) 诊所管理信息系统的分析 4. 各子域的接口设计 1) 上下文地图的模型分析 2) 微服务接口的方案设计 5. 微服务的设计实现 1) 去中心化的技术治理 2) 微服务的技术中台 3) 微服务的云端应用平台
实战演练:学员分组演练 用户提供案例或居民健康档案管理系统 |