昨天在开发者头条上看到了一篇关于G家的负载均衡的介绍:Google 是如何做负载均衡的? 又勾起了之前对负载均衡的研究回忆,因此把负载均衡总结一下,并加入G家的Maglev。(我之前虽然预研了这些负载均衡的技术,但是并未在高并发的生产环境实践过,有不当的地方欢迎指出

一、负载均衡之What

负载均衡(Load Balancing)用于改进多个服务之间的负载分布。负载均衡的目标是优化资源利用率,最大化吞吐量,降低响应时间,避免单个服务出现过载。

二、 负载均衡之Why

随着网站的访问量增加,当原先的单机部署的网站已很难承受高请求量时,目前常用的做法已经不是去购买容量更高、性能更好,但同时价格也贵很多的服务设备,而是转向分布式部署。在进行了服务拆分、分布式部署时,需要解决业务单点问题和访问的统一入口问题。为了解决业务服务单点的可用性问题,通常采用资源冗余的思路,将业务服务部署到多个机器上;对于统一入口问题,采用负载均衡设备,实现流量的分发。

三、常用的负载均衡实现技术

3.1 从整个互联网系统的使用范围来看,使用负载均衡的范围通常有:DNS负载均衡、客户端负载均衡、服务端负载均衡。

DNS主要是使用Round-Robin算法来对网站提供的ip列表进行轮询,响应当前轮询到的ip地址给请求的客户端。另一种是更加高效的是DNS托管服务,这种方法会根据后端服务状态决定是否将请求流量导过去,同时根据后端服务到DNS解析服务器的响应包时间来决定流量转发给哪个后端,从而实现了地理位置敏感的DNS负载均衡。一般DNS负载均衡是作为大型网站的第一级负载均衡。

客户端负载均衡,是通过一些途径,将服务端的机器ip列表发送至客户端,客户端按照一定算法选择机器,若服务请求不通,则在剩下的ip列表中继续选择。

服务端负载均衡,是大家最常见的负载均衡应用,一般是在服务端监听一个统一的入口,然后对接收到的请求,按照调度算法转发到后端的服务器去处理。顺便说一下,反向代理一般是用于隔离服务的内部网络跟外部网络,在反向代理服务转发给后端服务时,若是后端有多个服务,则也达到了负载均衡的目的。

3.2 由于本人接触比较多的还是服务端负载均衡,因此我对服务端负载均衡再进一步总结一下。

服务端的负载均衡技术,按照OSI网络协议栈所在层次,大致可分为四层负载均衡和七层负载均衡技术。

四层负载均衡,主要是基于IP+端口进行流量转发,一般使用的有:硬件负载均衡F5(性能非常好,价格也不菲),LVS;七层负载均衡,主要是基于URL应用层信息进行流量转发,一般使用的有:Nginx, HAProxy。

七层负载均衡的Nginx和HAProxy对于中小型的网站系统一般足够了,可以根据URL进行一些分流策略,比如针对域名、目录结构,而且抗并发能力较强;另外通过结合KeepAlived组件消除单点问题。存在的问题是,Nginx不支持session粘滞,对后端服务的检测只支持根据端口,而HAProxy则支持。

四层负载均衡中的LVS是章文嵩博士发起的开源项目(致敬!),在Linux操作系统的核心层工作,将收到的网络数据进行处理然后转发,因而效率非常高。LVS基于IP负载均衡的技术,主要的三种机制为:VS/NAT,VS/TUN,VS/DR,这部分网上资料很多,不细说了。LVS+KeepAlived是实际中使用较多的负载均衡方式。

四、Maglev

终于轮到今天的主角了,G家公布的Maglev!

Maglev是Google在数据中心使用的软件负载均衡服务,自2008年就已在其生产环境使用。我从参考的博客中对Maglev有了一些了解,个人感觉Maglev相对于现有的负载均衡技术,亮点在于(1) 更高效的请求转发,(2) Maglev自身支持集群化,达到了高可用及负载均衡节点的高利用率。

下图是Google文章中介绍网络请求的数据流图,这个是个整个涉及流程的介绍:

细节可以参考下面的参考文章,这里主要说一下大致思路。

LVS支撑的并发请求量已经非常高,但是Google发现Linux系统是其瓶颈,为了突破这一瓶颈,他们可能做了如下分析:他们期待的是使用通用的服务器来实现网络请求的负载均衡功能,LVS是在Linux内核层,处理通过网络协议栈向操作系统传递的数据包,这中间从网卡接收到数据,到经过TCP/IP网络协议栈的向上层传递,以及内核的一系列filter模块,才能实际处理转发,他们认为其中可以省略不必要的步骤,因而他们在网卡层面处理,直接对接网卡的输入、输出队列,而且只对数据包的<源地址,源端口,目标地址,目标端口,协议号>这五元组处理后即可交由网卡进行转发。这真的做的很极致...这也让人想起奥卡姆剃须刀原理,“如无必要,勿增实体”,我们在平时工作中处理问题,也尽可能多去想想,那么也可能做出简单但却更好的作品。

集群化,主要需要解决会话保持以及集群中节点的加入退出问题,这里Google通过查找表和改进的一致性Hash算法---Maglev Hashing来实现的,佩服。

这次主要是对负载均衡技术的总体回顾,并简单介绍了令人兴奋的Maglev,后面会进一步研究Maglev,并补充Maglev的一些具体技术实现。

【文章参考】

  1. Google是如何做负载均衡的?
  2. 负载均衡的一点整理
  3. Google shares software network load balancer design powering GCP networking
  4. Morning Paper: Maglev: A Fast and Reliable Software Network Load Balancer
  5. [論文中文導讀] Maglev : A Fast and Reliable Software Network Load Balancer (using Consistent Hashing)
  6. wiki-负载均衡

负载均衡_Maglev相关推荐

  1. Nginx搭建负载均衡集群

    (1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策 ...

  2. 【微服务架构】SpringCloud使用Ribbon实现负载均衡

    说在前面 软负载均衡的实现方式有两种,分别是服务端的负载均衡和客户端的负载均衡 服务端负载均衡:当浏览器向后台发出请求的时候,会首先向反向代理服务器发送请求,反向代理服务器会根据客户端部署的ip:po ...

  3. 解决nginx负载均衡的session共享问题

    之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx session共享问题,查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享服务器有多台,用ngi ...

  4. 2021年大数据Kafka(十一):❤️Kafka的消费者负载均衡机制和数据积压问题❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的消费者负载均衡机制和数据积压问题 一.kafka ...

  5. 负载均衡中使用 Redis 实现共享 Session

    最近在研究Web架构方面的知识,包括数据库读写分离,Redis缓存和队列,集群,以及负载均衡(LVS),今天就来先学习下我在负载均衡中遇到的问题,那就是session共享的问题. 一.负载均衡 负载均 ...

  6. 一分钟了解负载均衡的一切

    一分钟了解负载均衡的一切 转自:http://developer.51cto.com/art/201609/517313.htm 负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因 ...

  7. nginx+iis实现负载均衡

    nginx安装     Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoe ...

  8. Nginx反向代理负载均衡

    环境准备: 总共四台机器,两台装有Nginx的机器做负载均衡,两台机器装有Apache作为WEB服务器. 机器信息 hostname IP 说明 lb01 192.168.1.19 nginx主负载均 ...

  9. 加权轮询算法PHP,PHP实现负载均衡的加权轮询方法分析

    本文实例讲述了PHP实现负载均衡的加权轮询方法.分享给大家供大家参考,具体如下: 1. 负载均衡算法有哪些? 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务 ...

最新文章

  1. java构造方法的书写和注意事项(入门可看)
  2. 《Drupal实战》——1.4 常见配置
  3. icmp报文_用侦察兵的故事趣讲ICMP和Ping,看完想忘都难!
  4. 神了!React VR使得Oculus Home在Gear VR上运行更快更省电
  5. NEO改进协议提案2(NEP-2)
  6. request,logging,ConfigParser——接口框架
  7. git 拉取远端仓库_Git : 建立自己的本地仓库,并拉取远程代码
  8. Windows phone 8 是新的起点吗?
  9. 在vpc 2007上安装 ubuntu8.04-desktop(多图解)(转)
  10. 计算机一级考试题库基础知识,计算机一级考试题库(含答案)
  11. 线性系统理论2 系统状态和状态空间
  12. mysql 共享_Mysql局域网共享
  13. 新浪短连接(t.cn)在线生成工具
  14. 有助睡眠的方法有哪些?睡不着,这些方法就能帮到你
  15. python对象转json字符串,及json字符串的格式化
  16. 处理机调度之实时调度
  17. android开屏页单张图片设置的收评秒开引起的图片变形问题
  18. [漏洞实战] 逻辑漏洞挖掘
  19. 自适应学习率算法.基于阿米霍步长准则的线性回溯搜索算法
  20. php post 漏洞_文件包含上传漏洞目录遍历命令执行漏洞

热门文章

  1. uml画时序图操作步骤
  2. matlab函数:residue和residuez的用法
  3. 鼻炎的自我疗法【实用总结】
  4. 设计模式之禅读书笔记—行为类模式
  5. 柯西积分不等式的证明题
  6. Substrate 基础教程(Tutorials) -- 模拟网络 添加可信节点
  7. cJson使用的简单例子
  8. 《机器学习:实用案例解析》第三章 (3)
  9. python爬虫用到的技术_python爬虫技术的选择
  10. 众筹大家的年度阅读与分享计划啦