Skip to content

Instantly share code, notes, and snippets.

@BruceChen7
Last active April 12, 2020 11:10
Show Gist options
  • Save BruceChen7/60bc3a054be81cde98377829523479c3 to your computer and use it in GitHub Desktop.
Save BruceChen7/60bc3a054be81cde98377829523479c3 to your computer and use it in GitHub Desktop.
[#load balance]#system

资料

load balance的好处

  • 服务发现:系统中的哪些后端是可用的?它们的地址是多少
  • 健康检查:当前哪些后端是健康的,可以接收请求?

L4负载均衡的最新技术

好处 L4 负载均衡在边缘仍然是非常有用的,因为几乎所有的现代大型分布式架构都是在因特网流量接入处使用 L4/L7 两级负载均衡架构。 在边缘 L7 负载均衡器之前部署 L4 负载均衡器的原因:

  • L7 LB 承担的更多工作是复杂的分析、变换、以及应用流量路由,他们处理原始流量的能 力(按每秒处理的包数和字节数衡量)比经过优化的 L4 负载均衡器要差。这使得 L4 LB 更适合处理特定类型的攻击,例如 SYN 泛洪、通用包(generic packet)泛洪攻击
  • L7 LB 部署的更多更频繁,bug 也比 L4 LB 多。在 L7 之前加一层 L4 LB,可以在调整 L7 部署的时候,对其做健康检查和流量排除(drain),这比(单纯使用)现代 L4 LB 要简单的多,后者通常使用BGP 和 ECMP(后面会介绍)。最后,因为 L7 功能更复杂, 它们的 bug 也会比 L4 多,在前面有一层 L4 LB 能及时将有问题的 L7 LB 拉出

TCP/UDP termination 负载均衡

见评论

这种模式是:会使用两个独立的 TCP 连接:一个用于客户端和负载均衡器之间,一个用于负载均衡器和后端之间。好处:

  • 实现相对简单
  • 连接 terminate 的地方离客户端越近,客户端的性能(延迟)越好。

TCP/UDP passthrough 负载均衡

在这种类型中,TCP 连接不会被负载 均衡器 terminate,而是在建立连接跟踪和网络地址转换(NAT)之后直接转发给选中的后端。

我们首先来定义连接跟踪和 NAT:

  • 连接跟踪(connection tracking):跟踪所有活动的 TCP 连接的状态的过程。这包 括握手是否成功、是否收到 FIN 包、连接已经空闲多久、为当前连接选择哪个后端等
  • NAT:利用连接跟踪的数据,在包经过负载均衡器时修改包的 IP/port 信息

使用连接跟踪和NAT技术,负载均衡器可以将大部分raw TCP 流量从客户端转发到后端。 例如,我们假设客户端正在和负载均衡器 1.2.3.4:80 通信,选中的后端是 10.0.0.2:9000。当客户端的 TCP 包到达负载均衡器时,负载均衡器会将包的目的 IP/port (从 1.2.3.4:80)换成 10.0.0.2:9000,以及将源 IP/port 换成负载均衡器 自己的 IP/port。当应答包回来的时候,负载均衡器再做相反的转换。

好处

  • 性能和资源消耗:passthrough LB 不会 terminate TCP 连接,因此无需缓存任何 TCP 连接窗口。每个连接的状态数据非常小,通常可以通过哈希表直接查询。因此, passthrough LB 的性能(packets per second,PPS,每秒处理的包数)要比 terminating LB 高很多
  • 允许后端进行自主拥塞控制:passthrough LB 不 terminate TCP 连接,因此它不参与 拥塞控制。这使得后端可以根据应用的类型自主决定采用哪种拥塞控制算法。而且,这种 方式还使得验证拥塞控制的改动更容易

DSR(直接服务器返回)

发展方向

L4 负载均衡器正在朝着基于分布式一致性哈希的水平可扩展架构.

@guoruibiao
Copy link

整理的很赞👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment