Ribbon 一些简单概念
一.什么是负载均衡:
负载均衡图示:
当一台服务器的单位时间内的访问量越大时,服务器压力越大,大到超过自身承受能力时,服务器就崩了,为了避免,我们通过负载均衡的方式来分担服务器的压力。
我们可以通过建立多台服务器,组成一个服务器集群,当有很大量的用户请求时,先访问一个中间件服务器,再让这个中间服务器按照某种策略将这些请求分配给集群中不同的服务器处理(可以想象成以前是十件事一个人做,现在是3个人一起做这十件事,自然处理速度和压力都小的多)。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了单个服务器的压力,避免了服务器崩溃的情况。
常见的负载均衡有两种方式: Ngnix 和 Ribbon
二.Ribbon的简介:
2.1 Ribbon是提供负载均衡的工具,通过代码层面来实现的负载均衡。
将负载均衡逻辑以代码的形式封装到服务器消费者的客户端上,服务消费者客户端维护了一份服务提供者的信息列表,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。即:
- 负载均衡框架,支持可插拔式的负载均衡规则
- 支持多种协议,如HTTP、UDP等
- 提供负载均衡客户端
2.2 如下图所示:在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。展示了Ribbon与Eureka配合使用时的架构。
2.3 Ribbon 的两种使用方式:
- 与RestTemplate 结合使用(@LoadBalanced)
通过Spring Cloud R巾bon的封装, 我们在微服务架构中使用客户端负载均衡调用非常简单, 只需要如下两步:
• 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务
注册中心。
• 服务消费者直接通过调用被@LoadBalanced 注解修饰过的 RestTemplate 来实现面
向服务的接口调用。
这样,我们就可以将服务提供者的高可用以及服务消费者的负载均衡调用一起实现了。 - 与Fegin结合使用,Fegin已经默认继承了Ribbon(实际开发中一般使用这个)
2.4 Ribbon 子模块:
4. ribbon-core(ribbon的核心,主要包含负载均衡器、负载均衡接口、客户端接口、内置负载均衡实现API)
5. ribbon-eureka(Ribbon 结合 Eureka 客户端的API,为负载均衡器提供动态服务注册列表信息)
6. ribbon-httpclient(为负载均衡提供了REST客户端)