一、组件介绍
1、Ribbon
ribbon是属于Netflix的一款基于客户端http、tcp负载均衡的一个小框架,何为客户端负载均衡,简单理解就是客户端获取了服务注册中心的所有注册数缓存在本地,并定时维护本地缓存的注册数据;客户端发起远程服务请求,则采用一系列的负载均衡策略从本地获取一个服务的地址数据并对其发送网络请求。
我们平常所了解的SpringCloud ribbon则是对Netflix的ribbon进行了一系列的封装,使其无缝对接SpringCloud环境开发,并且能够无缝对接各大主流服务治理框架,如Eureka、Consul等;就比如我们采用RestTemplate结合Ribbon对远程服务进行访问只需要加一个注解@LoadBalanced就可以起到对注册中心的所有服务进行负载均衡的作用,我们根本察觉不到其实他们已经自动整合了,这也归功于SpringCloud对其进行了如此完美的封装。
2、Hystrix
Hystrix也是Netflix开源的一款,针对服务之间调用限制其可使用的 线程资源 、以及服务调用失败可以调用指定的 降级处理 方法、包括调用的目标服务实例如果不可访问了,会针对设定的熔断阈值(默认调用失败超过50%)对该服务实例进行 熔断处理 ,所有的服务在短期设定的时间内直接返回调用失败,如果设置了降级方法则会调用降级方法。
二、为何使用?
1、为什么要使用ribbon
ribbon的主要功能就是客户端负载均衡,并且是对服务注册中心已经注册了的服务进行负载均衡,没有ribbon的话 我们得自己编写一套负载均衡机制,除非你的服务实例是单个的,但是这不太现实!还有 就是feign 也是基于ribbon来进行服务实例的负载均衡调用。
2、为什么要使用hystrix
1、熔断机制 保证了阻断了不可用的服务,直接响应请求失败,不会再去重重复请求占用资源。
2、资源隔离 可以保证对某个依赖服务进行调用时哪怕请求再多,只耗费属于其的线程资源,并不会影响别的服务的调用。
3、降级策略 可设置服务调用失败后执行的方法。
所以正因为hystrix的强大,才使其成为高可用、稳定、健壮的SpringCloud微服务系统中必不可少的组件之一。
三、ribbon的使用
1、restTemplate + @LoadBalanced 使用ribbon负载均衡调用服务
引入restTemplate,restTemplate是spring提供的一个非常强大的调用http rest接口的一款工具
@RestController
@SpringBootApplication
@EnableEurekaClient
public class App {
@Bean
@LoadBalanced //加上此注解增加负载均衡功能,并使其能直接用服务名来进行调用
public RestTemplate restTemplate(){
return new RestTemplate();
}
@Autowired
RestTemplate restTemplate;
@GetMapping("/test")
@ResponseBody
public Object test(){
//使用restTemplate根据服务名调用,默认的restTemplate是没有此功能的
String str = restTemplate.getForObject("http://provider-goods-service/test",String.class);
return str;
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);