微服务架构
去中心化的架构
SOA集中式的架构 ESB nginx
Service Mesh
Spring 基于bean mybatis:SqlSessionFactory xml @bean
SpringBoot 基于Application 自动配置
SpringCloud 基于service 微服务架构共性功能 集成
微服务和微服务之间调用存在什么问题
rpc调用:feign dubbo
服务注册和发现 nacos
配置统一管理 zk nacos
服务链路的排查,微服务的监控 skywalking业务零侵入 zipkin+sleuth
服务熔断降级限流 sentinel
版本2.2.1
boot2.2.5
seata1.2.0
服务调用RestTemplate webclient ClientHttpRequestInterceptor扩展点
LoadBalancerInterceptor负载均衡器拦截器
feign底层依赖ribbon
注册中心架构
心跳(服务续约:客户端定时向服务端发心跳,服务端接收到心跳修改服务续约时间)
注册instance 是什么存储的?
临时节点存在内存 持久节点持久化磁盘 data/naming/namespace的id
2.0 grpc protobuf
边车模式
将别的服务挂载其上接入异构任务
内存注册表
Service #类就是微服务 mall-order mall-user
Map(namespace, Map(group::serviceName, Service))
namespace隔离的作用 No instances available for mall-order
group::serviceName 隔离作用 group所有服务用用一个 group (通常用于配置中心,起到环境隔离的作用)
Map
persistentInstances持久实例
ephemeralInstances临时实例
instance:8020 8021 mall-order节点
nacos:拉取 持久实例和临时实例一次性全部拉取的
核心功能
服务注册:client通过发送rest请求方式向server注册自己的服务,提供自身元数据(ip+端口)。server接受请求存在一个双层内存map中
服务心跳:默认5s发一次心跳
服务同步:集群间相互同步服务实例,保证服务信息的一致性 leader raft算法
服务发现:client调用服务提供者的服务时,发送一个rest请求给nacos server,获取注册服务清单,缓存在client本地,同时开启定时任务拉取服务端最新的注册表信息到本地缓存
服务监控:健康检查 超过15s没有收到客户端心跳将healthy属性置为false(客户端服务发现时不会发现),如果超过30s没心跳,直接剔除(被剔除后如果恢复心跳则重新注册)
NamingService注册中心核心服务
- 引入依赖
- 指向注册中心地址 改配置
早期需要加@EnableDiscoveryClient 现在自动注册
nacos是如何实现自动注册的: registerInstance
- nacos 整合 springcloud Alibaba Nacos ->spring cloud -> springboot -> spring
- 自动注册 ServiceRegistry 服务注册的接口ServiceRegistry#register
- onApplicaitonEvent 事件监听接口 自动服务注册的实现 AbstractAutoServiceRegistration
- spring容器调用(扩展点) 发布事件 ->服务自动注册事件 ->自动注册
客户端负载均衡器Ribbon
原理
利用LoadBalancerInterceptor拦截器获取注册中心得到的服务列表 同时修改url
客户端负载均衡
引入依赖- @LoadBalanced
负载均衡算法
- 随机 使用较少
- 轮询 默认实现方式,请求来之后排队
- 加权轮询 高配置、低负载的服务器分配高权重,均衡服务器压力
- 地址hash 通过client请求地址hash值取模映射进行服务调度 好处:同ip保证访问同一台服务器
- 最小连接数 根据服务器的情况,比如请求挤压数等参数,将请求分配到当前压力最小的服务器上
spring的扩展点
填充拦截器 负载均衡器
更改负载均衡算法
@Bean
IRule ribbonRule(){
return new NacosRule();
}
ribbion的扩展点
被调用的微服务名 指定特定负载均衡策略
饥饿加载
eager-load
调用组建Feign&Dubbo
远程过程调用
- @Enable
- @FeignClient(value = “mall-order”, path = “/order”)