SpringCloud全家桶简介
所属分类 springcloud
浏览量 955
服务注册发现 Eureka(Consul Zookeeper Nacos Etcd)
负载均衡 Ribbon(声明式调用 Fegin)
断路器 Hystrix
网关 SpringCloudGateway Zuul Zuul2
配置中心 SpringCloudConfig
监控 SpringBootAdmin Actuator
链路跟踪 Sleuth zipkin
Security 安全控制
Archaius 配置管理 API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能
Stream 基于 Redis,Rabbit,Kafka 实现消息微服务,简单声明模型实现收发消息
Bus 消息总线,利用分布式消息将服务和服务实例连接在一起,用于在集群中传播状态的变化
task
Eureka
注册中心 提供者 消费者
Eureka Server Client
注册 registry 续约 renew 下线 cancel 获取服务列表 fetch
注册中心数据同步 replicate
多个Eureka实例之间数据同步
服务提供者向注册中心 注册 续约 下线服务等
服务消费者向注册中心拉取服务列表并维护在本地
服务消费者 从可用服务列表选取一个服务提供者进行调用
发送心跳续约
服务端发现客户端不可用则剔除
Eureka Server 集群间 Replicate 同步数据,所有的节点是平等
节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点
EurekaServer 宕机,EurekaClient 自动切换到新的 EurekaServer 节点
集群 高可用 互相注册 异步复制
Eureka AP
Zookeeper CP
Ribbon
客户端负载均衡
LoadBalancer LB
负载均衡策略
轮询 RoundRobin
随机 Random
加权响应时间 WeightedResponseTime
区域感知轮询 ZoneAvoidanceRule
Ribbon 核心组件
ServerList 获取服务列表 ,静态或动态的(从注册中心中定期拉取服务列表)
ServerListFilter 服务列表过滤
IRule 选择一个服务地址 选择策略 轮询、根据响应时间加权、断路器(当Hystrix可用时)等
通过ServerList获取可用的服务列表,然后通过ServerListFilter过虑掉一部分服务地址,
最后在剩下的地址中通过IRule选择出一台服务器
RestTemplate + Ribbon
@LoadBalanced
LoadBalancerClient
ServiceInstanceChooser
RibbonLoadBalancerClient
DynamicServerListLoadBalancer
IClientConfig DefaultClientConfigImpl
IRule RoundRobinRule 路由策略
IPing DummyPing
ServerList ConfigurationBasedServerList
ServerListFilter ZonePreferenceServerListFilter
ILoadBalancer ZoneAwareLoadBalancer
Fegin
声明式Http调用 集成Robbin负载均衡
@EnableFeignClients
@Service
@FeignClient(name = "hello-service")
public interface HelloService {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello();
}
@FeignClient
jdk动态代理创建 RequestTemplate
httpclient (OkHttp HttpUrlConnection HttpClient )
LoadBalanceClient
Hystrix
断路器(隔离 限流 降级)
两种隔离策略 信号量隔离(默认)和 线程池隔离
信号量模式 同步调用模,不支持超时,不支持直接熔断,没有线程的切换,开销小
线程池模式 支持异步调用,支持超时调用 直接熔断,存在线程切换,开销大
线程池隔离
采用jdk的线程池 例如线程池大小为10,如果某时刻10个线程均被使用
那么新的请求将不会进入等待队列,而是直接返回失败,起到限流的作用
断路器打开和关闭的触发流程
当总的请求数达到阈值
HystrixCommandProperties.circuitBreakerRequestVolumeThreshold()
总的请求失败百分比达到了阈值
HystrixCommandProperties.circuitBreakerErrorThresholdPercentage()
断路器的状态由关闭设置为打开
当断路器打开时,所有的请求均被短路,在经过指定休眠时间窗口后,让下一个请求通过(断路器被认为是半开状态)
如果请求失败,断路器进入打开状态,并进入新的休眠窗口 否则进入关闭状态
命令模式
HystrixCommand HystrixObservableCommand
HystrixCommand 提供同步的execute和异步的queue方法
HystrixObservableCommand 提供立即执行observe 和 延迟执行toObservable的回调方法
默认使用线程池隔离
execution.isolation.strategy ExecutionIsolationStrategy.SEMAPHORE
信号量个数默认10
当并发请求量超过信号量个数时,后续请求直接拒绝,进入fallback流程
信号量隔离控制并发请求量,限流和防止雪崩
Gateway
Spring Cloud Gateway 是springcloud全新推出的第二代微服务网关,用来替代Zuul
gateway实现了服务转发 熔断 限流 权限校验等功能
Route(路由) ID + 目标URI + 一组断言和一组过滤器 ,断言为真,则路由匹配
Predicate(断言) Java8 Predicate ,输入是ServerWebExchange 用来匹配 headers 或参数
Filter(过滤器) 修改请求和响应
org.springframework.cloud.gateway.filter.GatewayFilter
启动一个netty server(默认端口为8080)接受请求
通过Routes处理
NettyClient发给响应的目标服务
Route = Predicate(HandlerMapping) + Filter(HandlerAdapter)
Route 由RouteLocatorBuilder构建
server.port: 8082
spring:
application:
name: gateway
cloud:
gateway:
routes:
- id: path_route
uri: http://localhost:8000
order: 0
predicates:
- Path=/foo/**
filters:
- StripPrefix=1
如果请求的路径为/foo/bar,则目标uri为 http://localhost:8000/bar
StripPrefix 去掉一个路径
SpringBootAdmin
Admin通过注册中心(如Eureka)来监控各个节点的状态
显示健康状况
显示详细信息 例如
JVM和内存指标
micrometer.io指标
数据源指标
缓存指标
查看jvm系统和环境属性
@EnableAdminServer
SpringCloudConfig
分布式配置中心
支持 本地 远程Git仓库
服务端(ConfigServer)和客户端(ConfigClient)
服务端负责将git(svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置
每个客户端通过POST方法触发各自的/refresh
SpringCloudBus通过一个轻量级消息代理连接分布式系统的节点
rabbitmq kafka
ConfigServer用于配置存储,存储的位置支持Git仓库、SVN仓库、本地文件等
ConfigClient用于服务属性的读取
配置保存在git/svn上,git push后,触发webhook回调,
最终触发spring cloud bus(消息总线),然后由消息总线通知相关的应用
上一篇
下一篇
Redis性能问题排查要点
写代码的几个好习惯
redis-cli 使用
Feign Ribbon Hystrix
eureka工作原理简介
Eureka源码要点