7 消息总线 Bus
Bus 概述
需求
分布式自动刷新配置功能
SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新
总线是什么
SpringCloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。SpringCloud Bus目前支持RabbitMQ和Kafka
SpringCloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送,也可以当作微服务间的通信通道
总线 在微服务架构系统中,通常会使用轻量级的消息代理来构建共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题上的实例都知道的消息
基本原理
ConfigClient实例都监听MQ中间一个topic(默认SpringCloud Bus)。当一个服务刷新数据时,它会把信息放入到Topic中,这样其他监听同一Topic的服务就得到通知,然后更新自身的配置
...
6 服务配置 Config
分布式配置中心介绍
分布式系统面临的问题—配置问题
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,因此一套集中式的、动态的配置管理设施必不可少。SpringCloud提供了ConfigServer解决该问题
配置中心
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置
SpringCloud Config
SpringCloud Config分为服务端和客户端两部分。
服务端称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动时从配置中心获取和加载配置信息,配置服务器默认采用git存储配置信息,这样有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便管理和访问配置内容
SpringCloud Config能干什么
集中管理 ...
5 服务网关 Gateway
Gateway 概述SpringCloud Gateway是SpringCloud全新项目,基于Spring5.0+SpringBoot2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API的路由管理方式。
SpringCloud Gateway作为SpringCloud生态系统中的网关,目标是代替Zuul,为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层使用高性能的Reactor模式通信框架Netty
SpringCloud Gateway的模板提供统一的路由方式且基于Filter链的方式提供网关基本的功能,如:安全、监控/指标、限流
Gateway 能干嘛
反向代理
鉴权
流量控制
熔断
日志监控
…
架构
异步非阻塞模型
SpringCloud Gateway特性
基于Spring Framework5, Project Reactor和SpringBoot2.0进行构建
动态路由:能够匹配任何请求属性
可以对路由指定Predicate(断言) ...
4 服务熔断与降级 Hystrix
Hystrix概述
分布式系统面临的问题
复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败
服务雪崩
多个微服务之间调用地时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他地微服务,称为扇出
如果扇出地链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即“雪崩效应”
对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒内出现饱和。
比失败更糟糕的是,这些应用程序可能导致服务之间的延迟增加,备份队列、线程和其他系统资源紧张,导致整个系统发生更多的级联故障需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统
当发现一个模块下的某个实例失败后,该模块仍然接受流量,然后有问题的模块调用其他的模块,就会发生级联故障(雪崩)
Hystrix
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免地调用失败(超时、异常)。Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失 ...
3 服务调用 Ribbon、OpenFeign
负载均衡服务调用 RibbonRibbon介绍Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具,Ribbon主要提供客户端的软件负载均衡算法和服务调用Ribbon客户端组件提供一系列完善的配置项(如连接超时、重试)
在配置文件中列出Load Balancer所有的机器,Ribbon自动帮你基于某种规则,连接这些机器
Ribbon功能
负载均衡:将用户的请求平摊分配到多个服务器上,从而达到高可用(常见的负载均衡软件有Nginx、LVS、硬件F5)
集中式LB:在服务的消费方和提供方之间使用独立的LB设施,由该设施负责把访问请求通过某种策略转发至服务的提供方
进程内LB:将LB逻辑集成到消费方,消费方从服务注册中心获知哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器
Ribbon属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它获取到服务提供方的地址
负载均衡+RestTemplate调用
补充:
Ribbon本地负载均衡客户端VS. Nginx服务端负载均衡
Nginx是服务器负载均衡,客户端所 ...
2 服务注册与发现 Eureka、Zookeeper、Consul
Eureka基础知识
服务治理
Spring Cloud封装 了Netfilx开发的Eureka模块实现服务治理
传统RPC远程调用框架中,管理服务之间依赖关系较为复杂,因此使用服务治理管理该关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
服务注册与发现
Eureka采用C/S设计架构,Eureka Server作为服务注册功能的服务器,属于服务注册中心,而系统中其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,这样系统的维护人员可以通过Eureka Server来监控系统中各个微服务是否正常运行
在服务注册发现中,有一个注册中心。当服务器启动时,会把当前主机服务器的信息(如服务器地址、通讯地址等)以别名方式注册到注册中心上,另一方(消费者|服务提供者),以该别名方式去注册中心获取实际的服务通讯地址,然后实现本地RPC调用
Eureka两个组件:Eureka Server和Eureka Client
Eureka Server 提供服务注册
每个微服务节点启动后,会在Eureka Server中进行注册,Eureka Serv ...