核心
服务注册与发现(高可用)
Eureka、Consul
eureka server
- 引入依赖
程序入口
@EnableEurekaServer
@SpringBootApplication
配置属性
spring.application.name=eureka-server
server.port=1001
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
验证
eureka client
- 引入依赖
- 定义控制器
程序入口
@EnableDiscoveryClient
@SpringBootApplication
属性配置
spring.application.name=eureka-client
server.port=2001
eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
验证
Consul
基础(LoadBalancerClient)
- 引入依赖
属性配置
spring.application.name=eureka-consumer
server.port=2101
eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
消费服务控制器
程序入口
@EnableDiscoveryClient @SpringBootApplication
说明
Ribbon(客户端负载均衡,基于HTTP和TCP)
- 引入依赖
程序入口
@EnableDiscoveryClient @SpringBootApplication
消费服务控制器
- 说明
Feign(声明式服务调用)
- 引入依赖
程序入口
@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication
消费服务控制器
- 说明
Feign(传文件)
基础
- 准备配置仓库
构建配置中心
- 引入依赖
程序入口
@EnableConfigServer @SpringBootApplication
配置属性
spring application: name: config-server cloud: config: server: git: uri: http://git.oschina.net/didispace/config-repo-demo/ server: port: 1201
验证
构建客户端
- 引入依赖
- 程序入口
配置属性
spring: application: name: config-client cloud: config: uri: http://localhost:1201/ profile: default label: master server: port: 2001
验证
- 加密与解密
- 特殊说明
- 相关配置
- 扩展:非对称
- 安全思考
- 高可用
- 传统方式
- 注册为服务
- 服务端
- 引入依赖
- 程序入口
- 配置属性
- 验证
- 客户端
- 引入依赖
- 程序入口
- 配置属性
- 验证
- 服务端
- 动态刷新
-
服务容错保护
Hystrix服务降级
- 引入依赖
程序入口
@EnableCircuitBreaker @EnableDiscoveryClient @SpringBootApplication
改造服务消费方式
@RestController public class DcController { @Autowired ConsumerService consumerService; @GetMapping("/consumer") public String dc() { return consumerService.consumer(); } class ConsumerService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "fallback") public String consumer() { return restTemplate.getForObject("http://eureka-client/dc", String.class); } public String fallback() { return "fallback"; } } }
验证
- Hystrix依赖隔离
- Hystrix断路器
Hystrix监控面板
- 引入依赖
程序入口
@EnableHystrixDashboard @SpringCloudApplication
配置属性
- 验证—-单节点监控
Hystrix监控数据聚合(Turbine)
通过HTTP收集聚合
- 引入依赖
程序入口
@Configuration @EnableAutoConfiguration @EnableTurbine @EnableDiscoveryClient
属性配置
spring.application.name=turbine server.port=8989 management.port=8990 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/ turbine.app-config=eureka-consumer-ribbon-hystrix turbine.cluster-name-expression="default" turbine.combine-host-port=true
通过消息代理收集聚合
基础
- 引入依赖
程序入口
@EnableZuulProxy @SpringCloudApplication
配置属性
spring: application: name: api-gateway server: port: 1101 eureka: client: serviceUrl: defaultZone: http://eureka.test.com/eureka/
验证
- 路由配置
- 传统路由配置
- 服务路由配置
- 过滤器
API文档
入门
- 引入依赖
- 消息消费者
- 程序入口
- 核心概念
- 消费组
-
分布式服务跟踪
入门
- 跟踪原理
- 整合logstash
- 整合zipkin
- 收集原理
- 抽样收集
网飞套件
Eureka注册中心
Ribbon负载均衡
Feign服务调用
Hystrix熔断降级
Zuul网关
阿里套件
Nacos注册
Sentinel哨兵
RocketMQ消息
整合组件
Consul
Config配置
Gateway网关
Stream
Sleuth
脑图和链接地址
1、路由网关
- Zuul
- 也要注册到注册中心。提供路由+代理+过滤
- GateWay
注册中心
- Enreka
- Zookeeper
- Nacos
负载均衡
- Ribbon
服务调用
- 方式
- 微服务名字(ribbon)
- 接口和注解(feign)
- Feign
- feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。
- Ribbon根据微服务名字访问。之前Ribbon+RestTemplate,利用RestTemplate对http请求的封装处理。
- Feign集成了Ribbon
- OpenFeign
熔断、降级
- 熔断—服务端;降级-客户端。
- Hystrix
- 熔断:服务长时间无响应,对服务进行降级,进而熔断快速返回错误信息。
- 注解@HystrixCommand,一般5秒20次调用失败。
- 断路器:向调用方返回一个符合预期的,可处理的备选响应,而不是长时间等待或抛出无法处理的异常。
- 调用链路中,某个服务挂了,弃车保帅,调用备份返回失败。
配置中心
- Zookeeper
- Config
例子
业务场景
-
场景:下订单发货
组件:注册中心~Nacos,Eureka
订单服务处理订单DB,
- 调用库存中心,物流中心、积分中心注册中心获取主机地址id+端口,
-
组件:服务调用~feign
注册中心只有ip+端口的地址
- 请求构造,网络连接,解析响应需要Feign处理
feign的核心是动态代理,会给加了@FeignClient的注解创建代理,请求处理由代理类提供,通过@RequestMapping 解析具体的请求路径。
组件:负载均衡~Ribbon,Nginx,F5
若服务部署在多台服务器上,需要负载均衡,ribbon默认采用轮询算法(还有随机,权重)
- ribbon,eureka,feign是紧密合作的,ribbon从eureka获取服务注册表,获取服务所有的地址端口。选取一台服务器,feign发起请求。
feign基于ribbon,封装了ribbon,ribbon不像feign和eureka需要独立部署,更像工具组件。
组件:隔离熔断降级Hystrix,防止雪崩
若订单服务有多个线程,其中有请求积分的线程,若这时积分挂了,请求积分的线程会阻塞抛异常,其他如查看订单、发货的线程也无法运行,导致订单挂,出现服务雪崩。
- 结合业务,积分挂了,订单可以不挂,照常发货扣库存,积分可后期维护。
- 分线程池,积分,库存,物流线程隔离,积分挂,线程卡几秒报错,其他线程池正常工作。
- 熔断:若挂了且不回复,卡几秒无意义,直接熔断直接返回错误。
-
组件:微服务网关~Zuul,Gateway
主要负责路由 ,处理前端请求。前端所有来源都发往网关,网关根据请求特征转发给后端服务。
- 统一网关后可统一的降级、限流、认证、授权、安全等。