1. 什么是微服务
微服务是分布式架构的一种。
1.1 微服务技术 != Spring Cloud
分布式架构就是要把服务进行拆分,拆分的过程会产生一系列问题需要解决,而Spirng Cloud 只是解决了服务拆分的过程中的服务治理问题,所以一个完整的微服务包含的不只是Spring Cloud。
1.2 微服务技术栈的具体内容
- 传统的单体架构中所有的服务都耦合在一起,随着业务的发展,后续的升级维护会变得越来越困难,所以一些大型项目都要进行拆分。
- 微服务会根据业务功能模块把一个单体的项目拆分成许多个独立的项目,每个项目完成一部分业务功能,后续进行独立和部署,这样的一个项目称为一个服务。通常每个项目会包含成百上千的服务,形成一个服务集群。
- 一个业务往往需要多个服务之间相互调用来共同完成。当业务越来越多越复杂时,这些服务之间的调用关系也越来越复杂。
- 为了解决复杂的调用关系,微服务中引入了注册中心这个组件。注册中心可以记录微服务中每一个服务的IP、端口以及功能等其他信息。此时,当一个服务需要调用另一个服务时,它不需要记录对方的IP,直接去注册中心就行了,从注册中心拉取对方的服务信息。
- 为了解决种多服务的配置文件的管理问题,微服务中引入了配置中心这个组件。配置中心可以统一的管理整个服务集群里所有的服务的配置,如果有配置信息需要变更,只需要找配置中心就行了,配置中心会通知相关的服务实现配置的热更新。
- 为了解决用户对服务的访问问题,微服务引入了服务网关这个组件。服务网关一方面对用户身份做校验另一方面可以把用户的请求路由到具体的服务,并且在路由的过程中还可以做负载均衡。服务接收到用户请求之后访问数据库集群,完成相关服务。
- 为了解决高并发访问对数据库集群带来的压力,微服务中引入了分布式缓存。缓存就是把数据库中的数据放到内存当中,内存的查询效率比内存效率更高。用户请求先到分布式缓存中,如果未命中再到数据库中查询。
- 简单查询可以走缓存,为了解决海量数据的复杂搜索、统计和分析问题,微服务中引入了分布式搜索功能。从此数据库主要负责数据的写操作,还有一些事务类型的,对数据安全要求较高的数据存储。
- 微服务中各个服务相互调用的过程中整个业务的调用链路会很长,业务的执行时长是每个服务执行时长之和,性能会有所下降。为了解决这个问题,微服务中引入了实现异步通信的消息队列组件,请求来了先调用服务A,服务A不在直接去调用并等待服务B,而是通知服务B去执行,然后服务A就执行结束了,这样整个调用链路就变短了,响应时间也变短了,服务集群的业务吞吐能力也变强了。异步通信可以大大提高服务的并发。
- 众多的服务使得异常的排查变得十分困难,为了解决这个问题,微服务引入了分布式日志服务组件和系统监控链路追踪这两个组件,分布式服务日志可以统计整个服务集群中的运行日志,进行统一存储、统计和分析,便于后期异常的定位和排查。系统监控链路追踪可以实时监控整个服务集群中每个服务节点的运行状态、CPU的负载、内存的占用等信息,一旦出现问题可以直接定位到具体的某一个方法、栈信息等。
- 为了解决众多服务的部署问题,引入了持续集成的概念:利用JenKins这样的工具进行自动化部署,JenKins可以对这些微服务进行自动化编译,然后基于Docker进行打包形成镜像,再基于Kubernetes或Rancher实现自动化部署
2. 微服务技术栈的大致分类
2.1 微服务治理
主要是Spring Cloud所包含的内容:
- 注册发现
- 远程调用
- 负载均衡
- 配置管理
- 网关路由
- 系统包含
- 流量控制
- 服务授权
- 熔断降级
- 分布式事务
- TCC模型
- AT模型
- Seate
2.2 缓存技术
- SpirngDataRedis
- 缓存穿透、雪崩
- Redis主从复制
- OpenResty
- 缓存数据同步
- Nginx本地缓存
- Redis持久化
- 多级缓存分层
- Redis分片集群
- Lua脚本
- Redis数据结构
2.3 异步通信技术
- MQ消息模型
- SpringAMQP
- 消息堆积
- 消息可靠性
- 仲裁队列
- 延迟队列
- 镜像集群
- 数据持久化
2.4 分布式搜索技术
- DSL语句
- RestAPI
- ES集群
- 集群脑裂
- 竞价排名
- 聚合统计
- 自动补全
- 地理坐标
- 拼音分词
2.5 DevOps(持续继承)
- Dockerfile
- DokcerCompose
- GrayLog
- Jenkins
- SkyWalking
- Docker使用
- Kubernetes