2019独角兽企业重金招聘Python工程师标准>>>

抽空自己写了个简易版的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 负载均衡

转载于:https://my.oschina.net/110NotFound/blog/3059361

RPC的负载均衡策略相关推荐

  1. Motan-远程调用的rpc框架的负载均衡策略

    虽然我不会,但是偶然之间看到了Motan远程调用框架的一些内容,然后直接copy过来了,想着以后自己可能看看 集群中的loadbalance负载均衡策略 ActiveWeightLoadBalance ...

  2. 【RPC Dubbo】dubbo负载均衡策略

    文章目录 前言 1. 什么是负载均衡 1.1:负载均衡简介 1.2:简单解释 2. dubbo负载均衡策略 2.1 Random LoadBalance 2.2 RoundRobin LoadBala ...

  3. 2 万字长文盘点五种负载均衡策略

    作者 | why技术 来源 |  why技术 责编 | 王晓曼 荒腔走板 老规矩,在技术分享开始之前,先荒腔走板,聊点别的.给枯燥的技术文章注入一抹其它的色彩. 上面的图片,是我在骑车的过程中拍的.衣 ...

  4. 2万字长文盘点五种负载均衡策略

    来源:why公众号 荒腔走板 老规矩,在技术分享开始之前,先荒腔走板,聊点别的.给枯燥的技术文章注入一抹其它的色彩. 上面的图片,是我在骑车的过程中拍的.衣服随意的绑在驼包上,两侧各挂着一只鞋子,左边 ...

  5. 经过负载均衡图片加载不出来_吐血输出:2万字长文带你细细盘点五种负载均衡策略。...

    Dubbo的五种负载均衡策略 2020 年 5 月 15 日,Dubbo 发布 2.7.7 release 版本.其中有这么一个 Features 新增一个负载均衡策略. 熟悉我的老读者肯定是知道的, ...

  6. 吐血输出:2万字长文带你细细盘点五种负载均衡策略。

    Dubbo的五种负载均衡策略 2020 年 5 月 15 日,Dubbo 发布 2.7.7 release 版本.其中有这么一个 Features 新增一个负载均衡策略. 熟悉我的老读者肯定是知道的, ...

  7. dubbo负载均衡策略

    前言:在上一篇博客中,介绍了zookeeper作为dubbo的注册中心是如何工作的,有一个很重要的点,我们的程序是分布式应用,服务部署在几个节点(服务器)上,当消费者调用服务时,zk返回给dubbo的 ...

  8. dubbo负载均衡策略解析

    dubbo负载均衡策略 前言:在上一篇博客中,介绍了zookeeper作为dubbo的注册中心是如何工作的,有一个很重要的点,我们的程序是分布式应用,服务部署在几个节点(服务器)上,当消费者调用服务时 ...

  9. 负载均衡策略深入剖析

    在实际应用中,我们可能不想仅仅是把客户端的服务请求平均地分配给内部服务器,而不管服务器是否宕机.而是想使Pentium III服务器比Pentium II能接受更多的服务请求,一台处理服务请求较少的服 ...

最新文章

  1. UA MATH571A R语言回归分析实践 一元回归1 NBA球员的工资
  2. 单片机机器周期怎么计算公式_单片机很好玩6,单片机是一切智能机器的基础,就是这么嚣张...
  3. redisson用阿里云集群版redis的问题_redission 序列化问题追踪
  4. 中关村-DIY操作系统之不分区安装Ubuntu系统
  5. LeetCode 974. 和可被 K 整除的子数组(哈希map)
  6. 谁说双非本科就一定无缘阿里?H哥粉丝6棉通过,喜提Offer!
  7. 【Java】从键盘中任意输入一个字符,判断该字符的类别
  8. google浏览器记住密码自动添加input框背景色问题
  9. python 怎么算l2范数_“火车过桥”“火车会车”和“火车超车”问题怎么解?图形很直观...
  10. MAX25————用vray还原模型在Substance Painter的光照以及材质效果
  11. 坯子库无法一键安装插件没用_坯子库管理器及坯子助手问题汇总
  12. VOIP技术的专业性网站
  13. Ubuntu 20 安装 APR
  14. 全天下最经典的句子,2013重现!
  15. 苹果开发者账号续费时出现你的支付授权失败,请核对信息并重试..
  16. 向excel里面插入网络图片
  17. 论文解读:多层肽 - 蛋白质相互作用预测的深度学习框架
  18. 宇宙中最大的神秘结构被发现 跨度达40亿光年
  19. 蓝桥杯 ALGO-121 猴子分苹果 java
  20. 2020年11月软件设计师真题透析

热门文章

  1. bios升级工具_雨林木风U盘启动盘装系统制作工具再次升级。。。
  2. panda 透视表 计算比例_数据透视表中有趣的那些事,你知道吗?
  3. qmap不能作为信号与槽的传递_撩妹 | 女生对你有好感的三个信号,千万别错过了...
  4. android word设计模式,word07设计模式
  5. css3文字一行或多行展示,多余文字省略号(学习)超出隐藏
  6. 灵活使用DataView
  7. 构建ASP.NET网站十大必备工具
  8. 另外一款超棒的响应式布局jQuery插件 – Freetile.js
  9. ubuntu上安装 ibus Google拼音输入法
  10. Mysql之inner join,left join,right join详解