负载均衡_Maglev
昨天在开发者头条上看到了一篇关于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的一些具体技术实现。
【文章参考】
- Google是如何做负载均衡的?
- 负载均衡的一点整理
- Google shares software network load balancer design powering GCP networking
- Morning Paper: Maglev: A Fast and Reliable Software Network Load Balancer
- [論文中文導讀] Maglev : A Fast and Reliable Software Network Load Balancer (using Consistent Hashing)
- wiki-负载均衡
负载均衡_Maglev相关推荐
- Nginx搭建负载均衡集群
(1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策 ...
- 【微服务架构】SpringCloud使用Ribbon实现负载均衡
说在前面 软负载均衡的实现方式有两种,分别是服务端的负载均衡和客户端的负载均衡 服务端负载均衡:当浏览器向后台发出请求的时候,会首先向反向代理服务器发送请求,反向代理服务器会根据客户端部署的ip:po ...
- 解决nginx负载均衡的session共享问题
之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx session共享问题,查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享服务器有多台,用ngi ...
- 2021年大数据Kafka(十一):❤️Kafka的消费者负载均衡机制和数据积压问题❤️
全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的消费者负载均衡机制和数据积压问题 一.kafka ...
- 负载均衡中使用 Redis 实现共享 Session
最近在研究Web架构方面的知识,包括数据库读写分离,Redis缓存和队列,集群,以及负载均衡(LVS),今天就来先学习下我在负载均衡中遇到的问题,那就是session共享的问题. 一.负载均衡 负载均 ...
- 一分钟了解负载均衡的一切
一分钟了解负载均衡的一切 转自:http://developer.51cto.com/art/201609/517313.htm 负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因 ...
- nginx+iis实现负载均衡
nginx安装 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoe ...
- Nginx反向代理负载均衡
环境准备: 总共四台机器,两台装有Nginx的机器做负载均衡,两台机器装有Apache作为WEB服务器. 机器信息 hostname IP 说明 lb01 192.168.1.19 nginx主负载均 ...
- 加权轮询算法PHP,PHP实现负载均衡的加权轮询方法分析
本文实例讲述了PHP实现负载均衡的加权轮询方法.分享给大家供大家参考,具体如下: 1. 负载均衡算法有哪些? 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务 ...
最新文章
- java构造方法的书写和注意事项(入门可看)
- 《Drupal实战》——1.4 常见配置
- icmp报文_用侦察兵的故事趣讲ICMP和Ping,看完想忘都难!
- 神了!React VR使得Oculus Home在Gear VR上运行更快更省电
- NEO改进协议提案2(NEP-2)
- request,logging,ConfigParser——接口框架
- git 拉取远端仓库_Git : 建立自己的本地仓库,并拉取远程代码
- Windows phone 8 是新的起点吗?
- 在vpc 2007上安装 ubuntu8.04-desktop(多图解)(转)
- 计算机一级考试题库基础知识,计算机一级考试题库(含答案)
- 线性系统理论2 系统状态和状态空间
- mysql 共享_Mysql局域网共享
- 新浪短连接(t.cn)在线生成工具
- 有助睡眠的方法有哪些?睡不着,这些方法就能帮到你
- python对象转json字符串,及json字符串的格式化
- 处理机调度之实时调度
- android开屏页单张图片设置的收评秒开引起的图片变形问题
- [漏洞实战] 逻辑漏洞挖掘
- 自适应学习率算法.基于阿米霍步长准则的线性回溯搜索算法
- php post 漏洞_文件包含上传漏洞目录遍历命令执行漏洞