6 Ribbon:Spring Cloud负载均衡与服务调用组件
6.1 负载均衡
-
在了解Spring Cloud Ribbon之前先了解下负载均衡的知识
-
负载均衡是当前任何系统都要考虑是否实施的内容,是系统处理高并发、缓解网络压力和服务端扩容的重要手段之一。
-
负载均衡(Load Balance):用户的请求平摊分配到多个服务器上运行,以达到扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的实现系统高可用(HA).常见的负载均衡方式有两种:服务端负载均衡,客户端负载均衡
-
dubbo、SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义
6.1.1 服务端负载均衡
- 服务端负载均衡也叫集中式LB,是在客户端和服务端之间建立一个独立的负载均衡服务器,该服务器既可以是硬件设备(例如 F5),也可以是软件(例如 Nginx反向代理服务器,lvs linux 虚拟机服务器,Apache+tomcat)。这个负载均衡服务器维护了一份可用服务端清单,然后通过心跳机制来删除故障的服务端节点,以保证清单中的所有服务节点都是可以正常访问的。
lvs:虚拟机服务器,时分复用,中介代理
- 服务端负载均衡是最常见的负载均衡方式,其工作原理如下图。
-
当客户端发送请求时,该请求不会直接发送到服务端进行处理,而是全部交给负载均衡服务器,由负载均衡服务器按照某种算法(例如轮询、随机、权重等),从其维护的可用服务清单中选择一个服务端,然后进行转发。
-
服务端负载均衡具有以下特点:
需要建立一个独立的负载均衡服务器。
负载均衡是在客户端发送请求后进行的,因此客户端并不知道到底是哪个服务端提供的服务。
可用服务端清单存储在负载均衡服务器上。
6.1.2 客户端负载均衡
- 客户端负载均衡也叫进程式LB:是将负载均衡逻辑以代码的形式封装到消费方客户端上,即负载均衡器位于客户端。客户端通过服务注册中心(例如 Eureka Server)获取到一份服务端提供的可用服务清单。有了服务清单后,负载均衡器会在客户端发送请求前通过负载均衡算法选择一个服务端实例再进行访问,以达到负载均衡的目的;
- 客户端负载均衡的工作原理如下图。
-
客户端负载均衡也需要心跳机制去维护服务端清单的有效性,这个过程需要配合服务注册中心一起完成。
-
客户端负载均衡具有以下特点:
负载均衡器位于客户端,不需要单独搭建一个负载均衡服务器。
负载均衡是在客户端发送请求前进行的,因此客户端清楚地知道是哪个服务端提供的服务。
客户端都维护了一份可用服务清单,而这份清单都是从服务注册中心获取的。
-
Ribbon 就是一个基于 HTTP 和 TCP 的消费方客户端负载均衡器,只是一个类库,当我们将 Ribbon 和 Eureka 一起使用时,Ribbon 会从 Eureka Server(服务注册中心)中获取服务端列表,然后通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
-
服务端负载均衡和客户端负载均衡对比
不同点 | 服务端负载均衡 | 客户端负载均衡 |
---|---|---|
是否需要建立负载均衡服务器 | 需要在客户端和服务端之间建立一个独立的负载均衡服务器。 | 将负载均衡的逻辑以代码的形式封装到客户端上,因此不需要单独建立负载均衡服务器。 |
是否需要服务注册中心 | 不需要服务注册中心。 | 需要服务注册中心。 在客户端负载均衡中,所有的客户端和服务端都需要将其提供的服务注册到服务注册中心上。 |
可用服务清单存储的位置 | 可用服务清单存储在位于客户端与服务器之间的负载均衡服务器上。 | 所有的客户端都维护了一份可用服务清单,这些清单都是从服务注册中心获取的。 |
负载均衡的时机 | 先将请求发送到负载均衡服务器,然后由负载均衡服务器通过负载均衡算法,在多个服务端之间选择一个进行访问;即在服务器端再进行负载均衡算法分配。 简单点说就是,先发送请求,再进行负载均衡。 | 在发送请求前,由位于客户端的服务负载均衡器(例如 Ribbon)通过负载均衡算法选择一个服务器,然后进行访问。 简单点说就是,先进行负载均衡,再发送请求。 |
客户端是否了解服务提供方信息 | 由于负载均衡是在客户端发送请求后进行的,因此客户端并不知道到底是哪个服务端提供的服务。 | 负载均衡是在客户端发送请求前进行的,因此客户端清楚的知道是哪个服务端提供的服务。 |
下一篇:SpringCloud-14-Ribbon介绍及使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123817.html