前言
随着云端办公以来,发现微服务越来越重要了。Docker 容器技术和自动化运维等相关技术发展,使微服务变得更容易维护。大家可能都注意到,像阿里、腾讯、字节跳动等大厂的后端岗位明确写出:微服务设计经验优先。如果没有这方面的准备的话,想拿到高薪可不容易。 不难预料,今年,微服务只会越来越完善,成为将来大中型企业业务架构的发展方向。但对于一些 coding 的朋友,由于接触不到一线实战架构设计,眼看别人都在向微服务架构转型,自己却只能日复一日地重复造轮子。 微服务越来越重要,但以下6个点是大家也都需要注意的:
-
微服务不是解决所有问题的万能“银弹"。
-
编写整洁的代码和使用自动化测试至关重要,因为这是现代软件开发的基础。
-
关注微服务的本质,即服务的分解和定义,而不是技术,如容器和其他工具。
-
确保你的服务松耦合,并且可以独立开发、测试和部署,不要搞成分布式单体,那将会是巨大的灾难。
-
最重要的,不能只是在技术上采用微服务架构。拥抱DevOps的原则和实践,在组织结构上实现跨职能的自治团队,这必不可少。
-
还必须记住:实现微服务架构并不是你的目标。你的目标是加速大型复杂应用程序的开发。
如今,业务关键型企业应用程序通常是由大型团队开发的大型单体应用。虽然软件版本不经常更新,但每次更新都会给所涉及的参与人员带来巨大的痛苦。IT经常难以跟上业务需求。大家都很想知道如何采用微服务架构来解决所有这些问题。下面这份Github上超火的微服务笔记就完全可以教你如何成功开发基于微服务架构的应用程序。
![](https://i-blog.csdnimg.cn/blog_migrate/108022e92b9544d55542de2b44282c07.png)
微服务架构设计模式
-
1逃离单体地狱
描述了所谓“单体地狱”的症状,当单体应用程序超出其架构时会出现这种问题,这可以通过采用微服务架构来规避。
-
迈向单体地狱的漫长旅程
-
拯救之道:微服务架构
-
微服务架构的好处和弊端
-
微服务架构的模式语言
-
微服务之上:流程和组织
![](https://i-blog.csdnimg.cn/blog_migrate/1765c7e672573e3d5fe6e40e306368ef.png)
-
2服务的拆分策略
解释了为什么软件架构很重要,描述了可用于将应用程序分解为服务集合的模式,并解释了如何克服在此过程中遇到的各种障碍。
-
微服务架构到底是什么
-
为应用程序定义微服务架构
![](https://i-blog.csdnimg.cn/blog_migrate/fa8ec44887dcb02e92fd0320fa1967de.png)
-
3微服务架构中的进程间通信
介绍了微服务架构中强大的进程间通信的几种模式,解释了为什么异步和基于消息的通信通常是最佳选择。
-
微服务架构中的进程间通信概述
-
基于同步远程过程调用模式的通信
-
基于异步消息模式的通信
-
使用异步消息提高可用性
![](https://i-blog.csdnimg.cn/blog_migrate/7bd6c7dc25efcb3a46e0ef2593d9f1ad.png)
-
4使用Saga管理事务
介绍如何使用Saga模式维护服务间的数据一致性。Saga是通过传递异步消息的方式进行协调的一系列本地事务。
-
微服务架构下的事务管理
-
Saga的协调模式
-
解决隔离问题
-
Order Service和Create Order Saga的设计
![](https://i-blog.csdnimg.cn/blog_migrate/bd4f5b765f5405ca265fbaa6235f0698.png)
-
5微服务架构中的业务逻辑设计
介绍如何使用领域驱动设计(DDD)的聚合和领域事件等模式为服务设计业务逻辑。
-
业务逻辑组织模式
-
使用聚合模式设计领域模型
-
发布领域事件
-
Kitchen Service的业务逻辑
-
Order Service的业务逻辑
![](https://i-blog.csdnimg.cn/blog_migrate/3bf0ab6b2ba2e75b4d38e64512dff802.png)
-
6使用事件溯源开发业务逻辑
以上一部分为基础,解释了如何使用事件溯源模式开发业务逻辑,事件溯源模式是一种以事件为中心的设计思路,用来构建业务逻辑和持久化领域对象。
-
使用事件溯源开发业务逻辑概述
-
实现事件存储库
-
同时使用Saga和事件溯源
![](https://i-blog.csdnimg.cn/blog_migrate/0313fa883d878be90a81b6f891a499fb.png)
-
7在微服务架构中实现查询
介绍如何使用API组合模式或命令查询职责隔离(CQRS)模式,这两个模式用来实现查询分散在多个服务中的数据。
-
使用API组合模式进行查询
-
使用CQRS模式
-
设计CQRS视图
-
实现基于AWS DynamoDB的CQRS视图
![](https://i-blog.csdnimg.cn/blog_migrate/310a0b94692e504f2cedcc95db621d9b.png)
-
8外部API模式
介绍了处理来自各种外部客户端请求的外部API模式,例如移动应用程序、基于浏览器的JavaScript应用程序和第三方应用程序。
-
外部API的设计难题
-
API Gateway模式
-
实现一个API Gateway
![](https://i-blog.csdnimg.cn/blog_migrate/891cf62186fd9132f666a7848afcff37.png)
-
9微服务架构中的测试策略
介绍了重要的测试概念,例如测试金字塔,描述了测试套件中每种测试类型的相对比例,还展示了如何编写构成测试金字塔基础的单元测试。描述了如何在测试金字塔中编写其他类型的测试,包括集成测试、消费者契约测试和组件测试等。
-
微服务架构中的测试策略概述
-
为服务编写单元测试
-
编写集成测试
-
编写组件测试
-
端到端测试
![](https://i-blog.csdnimg.cn/blog_migrate/0098dec3d10f2d3dcfcda8d7b8c759cf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/69a986ad4bf847741170a75ae062f1a2.png)
-
10开发面向生产环境的微服务应用
介绍了开发生产就绪服务的各个方面,包括安全性、外部化配置模式和服务可观测性模式。服务可观测性模式包括日志聚合、应用指标和分布式追踪。
-
开发安全的服务
-
设计可配置的服务
-
设计可观测的服务
-
使用微服务基底模式开发服务
![](https://i-blog.csdnimg.cn/blog_migrate/0e5d219acb92fb78db8ff3233e02437e.png)
-
11部署微服务应用
介绍了可用于部署服务的各种部署模式,包括虚拟机、容器和Serverless模式。还介绍了使用服务网格的好处,服务网格是在微服务架构中处理服务间通信的一个网络软件层。
-
部署模式:编程语言特定的发布包格式
-
部署模式:将服务部署为虚拟机
-
部署模式:将服务部署为容器
-
使用Kubernetes部署FTGO应用程序
-
部署模式:Serverless部署
-
使用AWS Lambda和AWS Gateway部署RESTful服务
![](https://i-blog.csdnimg.cn/blog_migrate/67a8533e2125fdf11c94df4e66dcdaab.png)
-
12微服务架构的重构策略
介绍了如何通过采用绞杀者(Strangler)模式逐步将单体架构重构为微服务架构,绞杀者模式是指以服务形式实现新功能,从单体中提取模块将其转换为服务在学习这些章节的过程中,读者将了解微服务架构的不同方面。
-
重构到微服务需要考虑的问题
-
将单体应用重构为微服务架构的若干策略
-
设计服务与单体的协作方式
-
将新功能实现为服务:处理错误配送订单
-
从单体中提取送餐管理功能
![](https://i-blog.csdnimg.cn/blog_migrate/b1bb29327a803d4999eb429e34bba68c.png)
写在最后
笔记中既包含了微服务的原理、原则,又包含了实际落地中的架构设计模式;全面概述了团队在转向微服务时面临的挑战,以及针对这些问题的、经过行业检验的解决方案。