目录

简介

LB工作流程

Maglev内部架构

控制器

转发器

转发器实现

快速包处理

免拷贝

批处理


简介

参考资料:Maglev: A Fast and Reliable Software Network Load Balancer
https://storage.googleapis.com/pub-tools-public-publication-data/pdf/44824.pdf

自2008年起,google已经用Maglev来部署服务的负载均衡,这是一套与传统硬件负载均衡不同的软件网络负载均衡。而Maglev负载均衡器可以单独部署,也可以直接部署在server节点上。

LB工作流程

首先是通过DNS把请求分配到该用户相近的集群中(分配给用户的DNS解析IP为该集群vip)。集群的核心路由器将请求转发给Maglev(负载均衡器)。

集群中多个Maglev通过BGP(边界网管协议)向路由器报告自己所监听的vips, 核心路由器通过ECMP(等价多路径)协议将请求分发给Maglev, 而ECMP可以保证同一条流分发到同一个Maglev,可以保证用户数据流通畅。但是ECMP还有一个缺点,所有链路等价的(不能权重配置),必须所有Meglev处理能力是相近的,否则,可能会发生拥塞。

Maglev在收到请求后,再做负载均衡,分发给服务节点。在对请求选定服务节点之后,对该请求做封包处理,加上Gre header发给节点。节点将解封并处理请求,而返回的response直接以vip为源地址,用户地址为目的地址,发往路由器(DSR,Direct Server Return),不再经过Maglev. 这样又提高了Maglev一半的处理能力!

Maglev内部架构

Maglev分为两个部分:控制器和转发器

控制器

通过心跳检查转发器是否正常,并将所有的vips通过BGP通知给路由器

转发器

每一个vip关联到一个或多个后端池(BP: backend pool),每一个BP包含多个后端server的真实ip或者其他BP。同时对每一个后端server做健康检查,通过一些策略,将数据包均衡负载到各个健康的后端server上去。

转发器实现

转发器作作为核心模块通过steering module内核模块直接从网卡收发包,从而绕过了linux kernel协议栈,从而实现快速转发。

转发器收包时先将数据包五元组做哈希运算,并根据哈希值放入到不同的接收队列,每个接收队列的都有一个独立的线程处理其数据包重写(添加Gre header)的逻辑。

线程处理先做vip匹配过滤,再计算五元组哈希,查找连接跟踪表(每个线程都有一个独立的连接跟踪表),查到就直接用该连接信息添加Greheader,查不到就通过一致性哈希选择一个后端服务器,并添加对应Gre header,同时将该五元组的连接添加到连接跟踪表中去。数据包添加完Gre header之后,就将数据包发送到对应的发送队列(即一个处理线程对应一个接收队列和一个发送队列)。

muxing module内核模块通过poll轮询所有的发送队列,将数据包都发送到网卡。

快速包处理

免拷贝

steering module和muxing module使得收发包绕过了内核,避免了kernel昂贵的开销。且共享内存处理包,避免内存反复拷贝的开销。

启动时建立packet pool的共享内存池,steering和muxing各自有环形一个指针队列,每个指针指向packet pool中的一个packet对象。接收端有3个指针指向接收队列,

1. received指针: 网卡将接收到的数据包放在这个指针对应内存,并让received指针向前移动。

2. processed指针:steering将received数据包分发给处理线程,processed指针向前移动。

3. reserved指针:  将未使用的packet对象存环形队列,reserved指针向前移动。

发送端也有3个指针指向发送队列,

1. sent指针: 网卡将就绪的数据包发送,并让sent指针向前移动

2. ready指针:muxing将重写包头的数据包放入队列,改为就绪状态,ready指针前进

3. recyle指针:muxing将已发送数据包返回packet pool, 并将recyle指针前进

批处理

1. 因为各线程间没有锁,没有竞争,将每个处理线程固定到一个CPU核心,降低内核切换,提高线程效率

2. 转换器会对进来的包设置延迟时间,缓冲数据包,再进行批处理。批处理也会提高转换效率

后续如何一致性哈希选择后端服务器,错误处理,vip匹配,这些这里就不多讲了(因为我也没看那么细^_^),有兴趣的朋友可以去阅读原文,这里只做一个大体结构逻辑的描述。

谷歌负载均衡Maglev实现简析相关推荐

  1. SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

    之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了.windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向 ...

  2. 从Google Maglev说起,如何造一个牛逼的负载均衡?

    Maglev是谷歌为自己的数据中心研发的解决方案,并于2008开始用于生产环境.在第十三届网络系统设计与实现USENIX研讨会(NSDI '16)上, 来自谷歌.加州大学洛杉矶分校.SpaceX公司的 ...

  3. 从Google Maglev到UCloud Vortex,如何造一个牛逼的负载均衡?

    Maglev是谷歌为自己的数据中心研发的解决方案,并于2008开始用于生产环境.在第十三届网络系统设计与实现USENIX研讨会(NSDI '16)上, 来自谷歌.加州大学洛杉矶分校.SpaceX公司的 ...

  4. 服务器集群负载均衡原理

    当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力. 而我们讨论的负载均衡一般分为两种,一种是基于DNS,另一种基于IP报文. 利 ...

  5. 转载和积累系列 - L4负载均衡的设计与实现

    目录 简介 一.LVS的局限性 1. 数据包转发性能问题 2. HA-主备结构的浪费 3. 转发模式的优缺点 二.google maglev负载均衡 Maglev Consistent Hash Go ...

  6. CDN基于谷歌开源Katran四层负载均衡方案的应用 - 原理篇

    CDN作为一种分布式缓存加速服务,对于访问量级大的区域,单个节点带宽建设一般可达百Gb量级,对外配置虚拟IP提供服务,节点内部需要通过多层负载均衡(LB)将请求分发到内部的若干台服务器进行处理.一般情 ...

  7. 深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」

    负载均衡 之前的章节内容中[深入浅出学习透析Nginx服务器的基本原理和配置指南「初级实践篇 」]和 [深入浅出学习透析Nginx服务器的基本原理和配置指南「进阶实践篇」],我们采用的代理仅仅指向一个 ...

  8. 直追亚马逊,谷歌微软云服务添负载均衡功能

    谷歌近日推出了其公共云服务的负载均衡功能,让客户能够自动缩放和关闭的虚拟机,以适应突发的高峰需求. 就在短短的几个月之前,微软已为其Azure公共云服务添加了新的自动缩放功能.现在,这两家公司都有效地 ...

  9. 刨析django----Nginx反向代理与负载均衡

    目录结构 Nginx是什么 正向代理与反向代理 Nginx的安装 window安装 linux安装 配置反向代理 Ubuntu1804下遇到的问题 Nginx反向代理案例 Ubuntu1804 配置N ...

  10. 简谈docker swarm中负载均衡原理

    同一集群内部的负载均衡模式 基于在swarm中创建节点即可分配内部域名的情况下: dnsrr 单纯通过内部DNS内部组件进行负载均,由于DNS缓存机制等问题,有局限性. VIP: 简单来讲是 (内部) ...

最新文章

  1. ASP.net session 使用总结(2)
  2. 立体匹配中的方法论和弱纹理恢复
  3. peewee创建mysql_python – peewee MySQL,如何创建包装SQL构建的ins的自定义字段类型?...
  4. 先序中序数组推后序数组
  5. Mask R-CNN抢车位,快人一步!
  6. CNN进行新闻文本分类代码实战,包含分类文本
  7. asp.net core 官方文档
  8. 拓端tecdat|R语言文本挖掘tf-idf,主题建模,情感分析,n-gram建模研究
  9. Sql Server 2005 开发版亲测可用下载地址
  10. VB程序设计—For循环结构
  11. mace micro 代码分析: netdef 和Graph文件的生成
  12. 卷积神经网络前向及反向传播过程数学解析
  13. [sharepoint]文档库,文件夹授权
  14. HDR阴影高光图像增强
  15. 超详细28天备考Tableau考试经验分享
  16. 阿里云P2P内容分发网络(PCDN)实操手册
  17. Nodejs:ESModule和commonjs,傻傻分不清
  18. OpenStack Nova hacking和读书笔记
  19. java 画图 graphics
  20. 论文学习 Feature Generating Networks for Zero-Shot Learning

热门文章

  1. 负载均衡设备oracle,高可用的Oracle数据库负载均衡技术--深信服AD系列应用交付平台...
  2. MapReduce中Shuffle机制的学习案例——房屋租赁信息
  3. 苹果自带相册打马赛克_原来手机点击这个按钮,就能一键生成音乐电子相册!这也太厉害了...
  4. SpringCloud-狂神(1. 概述)学习笔记
  5. js实现通知弹屏 Notification
  6. Spring Cloud如何可用于微服务架构
  7. 【HTML 5】HTML5 Canvas rect(), strokeRect() 和 fillRect() 的区别
  8. 【小万出生记——第0篇】想做一款机械手
  9. 分解因式公式JAVA_递归算法解决因式分解(java版)
  10. super expression must either be null or a function 报错解决方法