首页  

SpringCloud全家桶简介     所属分类 springcloud 浏览量 944
服务注册发现    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源码要点