微服务总体知识体系图
什么是微服务
微服务是一种经过良好架构设计的分布式架构方案,主要有以下几个特征:
微服务优势
分布式微服务解决的主要问题:单体地狱,一旦应用大起来了,所有模块都集中在单个服务上会存在以下问题:
5. 维护困难,一个项目编译打包就要花上几小时
6. 耦合度过高,牵一发动全身,修一个bug或者改一些地方会引出其他问题
这时就需要对功能模块进行拆分,每一个服务对应一个小模块。
微服务架构体系内容
一个微服务体系包含以下几个部分:
- 服务集群:单体根据功能进行拆分后根据不同的功能部署到不同的服务,就会组成服务集群。
- 注册中心:这么多服务中间肯定需要通信,那么服务的信息都由注册中心进行管理。如A服务需要与B服务进行通信,首先会访问注册中心获取B服务的地址,之后根据地址发起http或者rpc请求进行通信。
- 配置中心:管理各种服务的各种配置信息
- 数据库:这个不说了,单体,分布式都需要
- 分布式缓存:当并发量上去之后,就需要缓存降低数据库的压力
- 分布式搜索:复杂搜索,就需要分布式搜索功能
- 消息队列:一个请求需要过很多服务,时间为所有服务之和,消息队列就可以进行异步操作,起到削峰的作用,提高服务的并发。
- 服务网关:类似nginx,一个请求过来,需要看看这个请求要打到哪个服务上进行处理
- 分布式日志处理:当服务多起来后,查看日志成了很麻烦的事情,分布式日志就可以解决这个问题
- 系统链路追踪:监控每个服务的cpu,内存,负载,占用
注册中心
- B服务的环境地址是变化的
- B服务如果存在集群,那么无法进行均衡负载
- 消费者无法获取服务的健康状态
为了解决上述问题,就需要注册中心
Eureka
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
- 消费者如何获取服务提供者的具体信息?
- 服务提供者启动时向Eureka注册自己的信息
- 消费者根据服务名称向Eureka获取信息
- 多个服务者如何选择
- 消费者如何感知服务者的健康状态
- 服务提供者会每隔30秒发送心跳
- 如果心跳不正常就会删除
- 消费者可以拉取服务者最新信息
搭建EurekaServer
服务注册
在每个微服务需要做如下配置,将信息注册到server
服务发现
启动类:
Ribbon负载均衡
Eureka-client均衡负载流程
均衡负载策略
Eureka-client中使用Ribbon组件进行负载均衡
如何修改均衡负载规则?
懒加载与饥饿加载
Nacos注册中心
相较于Eureka,Nacos功能更多,使用范围更广
Nacos-server安装
具体自己看官方文档
服务注册
服务发现
同eureka
配置集群
一套微服务应用部署在多地时,某一地区的所有微服务就叫一个集群,如上海集群,杭州集群。这样做的目的主要为了容灾。
Nacos提供服务集群配置,当其中一个微服务调用另一个服务时,优先调用相同集群的服务,如果集群内服务都挂了,再访问不同集群的服务。这个策略需要进行负载均衡配置
负载均衡配置
默认为轮询策略,当这么配置时,优先进行集群内调用
统一网关
网关功能:
- 身份验证
- 均衡负载
- 请求限流
SpringCloudGateway
搭建步骤
断言工厂
类似于拦截器功能
网关过滤器
类似于过滤器功能,可以对请求进行拦截处理。如添加请求头。具体见官方文档