文档章节

RPC的负载均衡策略

雨翔河
 雨翔河
发布于 06/06 21:01
字数 1459
阅读 3673
收藏 80

抽空自己写了个简易版的rpc框架,想了下怎么搞负载均衡, 最简单的方式就是搞个配置文件放置服务地址,直接读配置文件,转而想到配置文件可以放zk,相当于用zk来做配置中心或者服务发现。 优秀的dubbo项目就可以这么做,马上参考了下谷歌的grpc,发现了一篇谷歌很棒的文章,拜读了下(也借用了谷歌这篇文章的图片),很不错,想写一些我自己的见解。

传送门: https://grpc.io/blog/loadbalancing/

rpc通信本身并不复杂,只要定好协议怎么处理问题不大,但是负载均衡的策略是值得推敲的。

一般情况下,负载均衡的策略有以下两种

1. 代理服务

客户端并不知道服务端的存在,它所有的请求都打到代理服务,由代理服务去分发到服务端,并且实现公平的负载算法。 客户机可能不可信,这种情况通过用户面向用户的服务,类似于我们的nginx将请求分发到后端机器。

缺点: 客户端不知道后端的存在,且客户端不可信,延迟会更高且代理服务会影响服务本身的吞吐量

优点: 在中间层做监控等拦截操作特别棒。

如图:

2. 客户端负载均衡

客户端知道有多个后端服务,由客户端去选择服务端,并且客户端可以从后端服务器中自己总结出一份负载的信息,实现负载均衡算法。 这种方式最简单的实现就是我上面说的直接搞个配置文件,调用的时候随机或者轮询服务端即可。

如图:

优点:

高性能,因为消除了第三方的交互

缺点:

客户端会很复杂,因为客户端要跟踪服务器负载和健康状况,客户端实现负载均衡算法。多语言的实现和维护负担也很麻烦,且客户端需要被信任,得是靠谱的客户端。

以上是介绍了两种负载均衡的方案,下面要说的就是使用代理方式负载均衡的几种详细的方案

代理方式的负载均衡有很多种

代理负载平衡可以是 L3/L4(传输级别)L7(应用程序级别)

L3/L4 中,服务器终止TCP连接并打开另一个连接到所选的后端。

L7 只是在客户端连接到服务端端连接之间搞一个应用来做中间人。

L3/L4 级别的负载均衡按设计只做很少的处理,与L7级别的负载均衡相比的延迟会更少,而且更便宜,因为它消耗更少的资源。

在L7(应用程序级)负载平衡中,负载均衡服务终止并解析协议。负载均衡服务可以检查每个请求并根据请求内容分配后端。这就意味监控拦截等操作可以非常方便快捷的做在这里。

L3/L4 vs L7

正确的打开方式有一下几种

  1. 这些连接之间的RPC负载变化很大: 建议使用L7.
  2. 存储或计算相关性很重要 :建议使用L7,并使用cookie或类似的路由请求来纠正服务端.
  3. 设备资源少(缺钱): 建议使用 L3/L4.
  4. 对延迟要求很严格(就是要快): L3/L4.

下面要说的就是客户端实现负载均衡方式的详细方案:

1. 笨重的客户端

这就意味着客户端中实现负载平衡策略,客户端负责跟踪可用的服务器以及用于选择服务器的算法。 客户端通常集成与其他基础设施(如服务发现、名称解析、配额管理等)通信的库,这就很复杂庞大了。

2. Lookaside 负载均衡 (旁观?)

旁观式负载平衡也称为外部负载平衡,使用后备负载平衡,负载平衡的各种功能智能的在一个单独的特殊的负载均衡服务中实现。客户端只需要查询这个旁观式的负载均衡服务, 这个服务就能给你最佳服务器的信息,然后你拿这个数据去请求那个服务端。 就像我一开说的比如把服务端的信息注册到zk,由zk去做负载均衡的事情,客户端只需要去zk取服务端数据,拿到了服务端地址后,直接向服务端请求。

如图:

以上说了这么多,到底服务间的负载均衡应该用哪个,总结以下几点:

  1. 客户端和服务器之间非常高的流量,且客户端是可信的,建议使用‘笨重’的客户端 或者 Lookaside 负载均衡

  2. 传统设置——许多客户端连接到代理背后的大量服务,需要服务端和客户端之间有一个桥梁,建议使用代理式的负载均衡

  3. 微服务- N个客户端,数据中心有M个服务端,非常高的性能要求(低延迟,高流量),客户端可以不受信任,建议使用 Lookaside 负载均衡

© 著作权归作者所有

雨翔河

雨翔河

粉丝 192
博文 61
码字总数 41235
作品 0
深圳
程序员
私信 提问
加载中

评论(5)

雨翔河
雨翔河

引用来自“先进哥”的评论

引用来自“雨翔河”的评论

引用来自“疯狂的小企鹅”的评论

楼主可以再分享下长链接怎么做负载均衡
长链接就麻烦了点了,没有用过这种方式,不过想了下如果使用长链接的话,业务量大65535个端口估计会不太够用,可能会需要扩展网卡,就相当于使用多网卡绑定来做到,以上关于长链接的实现只是猜想,没有在实际业务中使用过。 ps:你这个id很熟悉的哦,感觉在以前好像看过你的博客。

长链接的场景是高频率的服务调用,这种强度的场景,一台128核的服务器上跑几十个进程,每个进程100多个连接基本满载了,端口用不了10000个。
👍 👍
先进哥
先进哥

引用来自“雨翔河”的评论

引用来自“疯狂的小企鹅”的评论

楼主可以再分享下长链接怎么做负载均衡
长链接就麻烦了点了,没有用过这种方式,不过想了下如果使用长链接的话,业务量大65535个端口估计会不太够用,可能会需要扩展网卡,就相当于使用多网卡绑定来做到,以上关于长链接的实现只是猜想,没有在实际业务中使用过。 ps:你这个id很熟悉的哦,感觉在以前好像看过你的博客。

长链接的场景是高频率的服务调用,这种强度的场景,一台128核的服务器上跑几十个进程,每个进程100多个连接基本满载了,端口用不了10000个。
qbmiller
qbmiller

引用来自“疯狂的小企鹅”的评论

楼主可以再分享下长链接怎么做负载均衡
dubbo
雨翔河
雨翔河

引用来自“疯狂的小企鹅”的评论

楼主可以再分享下长链接怎么做负载均衡
长链接就麻烦了点了,没有用过这种方式,不过想了下如果使用长链接的话,业务量大65535个端口估计会不太够用,可能会需要扩展网卡,就相当于使用多网卡绑定来做到,以上关于长链接的实现只是猜想,没有在实际业务中使用过。 ps:你这个id很熟悉的哦,感觉在以前好像看过你的博客。
疯狂的小企鹅
疯狂的小企鹅
楼主可以再分享下长链接怎么做负载均衡
XXL-RPC v1.3.1,分布式服务框架,扩展多种路由策略

Release Notes 1、负载均衡/软负载:提供丰富的负载均衡策略,包括:轮询、随机、LRU、LFU、一致性HASH等; 2、服务发现注册逻辑优化:支持批量注册、摘除,升级 xxl-registry 至 v1.0.1; ...

许雪里
2018/12/21
0
0
通用网络RPC框架--QiuRPC

QiuRPC 参考手册 一个通用的网络RPC框架,它应该包括如下功能: 具有服务的分层设计,借鉴Future/Service/Filter概念 2.具有网络的分层设计,区分协议层、数据层、传输层、连接层 3.独立的可...

匿名
2016/07/27
357
0
Motan源码阅读--初识Motan

Motan Motan是一套高性能,易于使用的RPC框架。提供了服务治理,包括服务节点自动发现,摘除,高可用和负载均衡。Motan具有良好扩展性,主要模块都提供了不同实现,例如多种注册中心,多种r...

春哥大魔王的博客
2018/08/24
0
0
[学习微服务-第8天] ServiceComb内置负载均衡组件handler-loadbalance

在上两篇 [微服务]ServiceComb + SpringCloud Ribbon:使用篇 和 [微服务]ServiceComb + SpringCloud Ribbon:源码解读篇 中介绍了负载均衡的概念和ServiceComb结合SpringCloud Ribbon的使用...

业界首个Apache微服务顶级项目
02/18
0
0
springboot 整合dubbo最佳实践 (使用redis作为注册中心)

一 概述 Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。...

王俊博客
2018/08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
53分钟前
1
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
2
0
系统监控-分布式调用链Skywalking

1. 为什么要使用分布式调用链技术? 随着公司业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每一个请求会经过多个业务系统,并产生...

秋日芒草
昨天
4
0
告诉自己的一些建议

摆脱学生心态 尽快发挥自己价值,让公司感知自己的存在,才是王道 选择比努力重要 自己附着的平台的经济体要是一个快速崛起的行业 转行趁早,年龄越大选择成本越高 趁早大量试错,学习新领域...

林怡丰
昨天
4
0
Windows下安装Redis

下载地址: 3.0老版已不维护更新:https://github.com/MicrosoftArchive/redis/releases 4.0版 https://github.com/tporadowski/redis/releases 中文官网:http://www.redis.net.cn/ https:......

Aeroever
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部