1. 背景
随着业务访问量和数据流量的日益增加,传统单一服务器已经无法承担,而升级单一服务器硬件会带来成本的增加、资源的浪费、以及扩展能力不足等问题。
而更有效的方式,是将单一服务器的计算任务,分担到多台低配置服务器上进行处理,这就产生了负载均衡设备,用户将业务请求发送到负载均衡设备,再由负载均衡设备按需分发到后端服务器,在基本不改变网络架构的基础上,扩展了网络设备接入能力。
2. SLB的定位
1) 负载均衡SLB(Server Load Balancer)
一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务器来扩展应用系统的吞吐能力,并且可以消除系统中的单点故障,提升应用系统的可用性。
2) 阿里云SLB
阿里云结合自身弹性计算平台的特点,以及强大的技术优势,提供的一套软件负载均衡解决方案,以更好的满足弹性计算平台负载均衡的需求。
3) 什么情况下使用SLB?
• 当单台云服务器不能满足需求的时候。
• 使用多台云服务器进行流量分发,提升服务能力。
• 使用多台云服务器消除单点故障,提升可用性。
3. SLB的组成
阿里云负载均衡SLB分为两类:应用型负载均衡ALB和传统型负载均衡CLB。
1) 应用型负载均衡ALB
a) 产品定位
• 强大的七层负载均衡处理能力与丰富的高级路由功能。
• 聚焦HTTP、HTTPS和QUIC应用层协议。
• 面向应用交付。
b) 产品性能
基于NFV虚拟化平台,支持弹性伸缩,单实例每秒查询数QPS(Query Per Second)可达100万次。
c) 可用性承诺:99.995%
d) 运维方式
处理能力随业务规模自动弹性伸缩,无需进行峰值与规格预估。
e) 云原生支持
阿里云官方云原生Ingress网关,支持流量拆分、镜像、灰度发布和蓝绿测试的负载均衡能力。
f) 典型应用场景
• 互联网应用七层高性能自动弹性负载均衡场景。
• 音视频应用大流量低时延负载均衡场景。
• 云原生应用金丝雀蓝绿发布负载均衡场景。
g) 同时ALB提供基于内容的高级路由特性
例如基于HTTP报头、Cookie和查询字符串进行转发、重定向和重写等。
2) 传统型负载均衡CLB
a) 产品定位
• 强大的四层负载均衡处理能力,以及基础的七层处理能力;
• 支持TCP/UDP/HTTP/HTTPS等协议;
• 主要面向网络交付;
b) 产品性能
基于物理机架构,单实例连接数可达500万。
c) 可用性承诺:99.95%
d) 运维方式
按规格售卖,需要根据业务规模预估带宽峰值。
e) 云原生支持
支持云原生业务场景,与阿里云ACK/ASK等容器服务结合使用。
f) 典型应用场景
• 网站/系统同地域高可靠负载均衡场景。
• 四层流量大并发业务负载均衡场景。
• 城双活/跨地域容灾负载均衡场景。
4. SLB的功能
1) 协议支持
• 四层:支持TCP/UDP
基于连接做流量调度。TCP和UDP创建一个socket访问负载均衡实例,这个源和目的IP和端口就是一个连接。
• 七层:支持HTTP/HTTPS
基于请求做调度。比如:http get请求访问一个页面。
• WS/WSS协议支持
无需配置,当选用HTTP监听时,默认支持无加密版本WebSocket协议(WS协议)。
当选择HTTPS监听时,默认支持加密版本的WebSocket协议(WSS协议)。
2) 调度算法
• 轮询模式:按照访问顺序依次将外部请求依序分发到后端服务器。
• 最小连接数模式:根据后端服务器的实际负载(即连接数)进行轮询,当前连接数越小的后端服务器被轮询到的次数(概率)也越高。
• 加权轮询模式:根据每台后端服务器设定的权重值来进行轮询,权重值越高的后端服务器,被轮询到的次数(概率)也越高。
3) 会话保持
在会话生命周期内,可以将同一客户端请求转发到同一台后端ECS上。
• 四层:同一IP地址的请求持续发往一台服务器。
• 七层:相同cookie的请求发往一台服务器。
使用会话保持有可能导致负载不均衡的情况,因此,另外一个思路是——
在SLB架构中,后端服务器ECS一般为无状态,因此,状态数据(与业务相关数据)尽量不保存在ECS中,而是放在RDS或者Redis缓存,这样也可以保证数据的正常运行。
4) 健康检查
SLB通过健康检查来判断后端服务器(ECS实例)的业务可用性。健康检查机制避免了后端ECS异常对总体服务的影响,提高了前端业务整体可用性。
四层健康检查原理 七层健康检查原理
• 四层健康检查:基于TCP连接进行的健康检查。
• 七层健康检查:基于HTTP状态码的方式进行健康检查。
四层健康检查和七层健康检查的方式不同,因为:
• 在SLB中有三类集群:SVL、Tengine和Keyserver。
• 当客户发送四层或七层请求,会先到达SVL集群,四层请求会直接发送到后端ECS上,使客户端和ECS形成点对点的长链接。
• 而七层请求会先发送到Tengine集群,HTTPS会进入keyserver集群卸载证书,然后再下发到后端ECS上,因此七层请求都是通过Tengine转发到ECS上,而无法形成客户端和ECS的链接。
5) 虚拟服务器组
如果未使用虚拟服务器组,则每个后端ECS都需要相应所有端口监听,这是不太可能实现的,因此需要将后端ECS进行分组。虚拟服务器组就是通过打标签的方式将后端ECS进行分组,实现ECS的灵活调度。
未使用虚拟服务器组 使用虚拟服务器组
5. SLB的配置流程
1) 创建ECS
2) 搭建应用
3) 创建SLB
4) 添加监听和后端服务器
5) 域名解析(可选)
6. 最佳实践
最佳实践1:作为公网流量入口
这是一种典型的使用方式。在ECS上部署无状态的应用,使用SLB服务作为公网流量的入口,可以提高系统的可用性,同时,后端ECS不再需要公网IP和公网带宽。
最佳实践2:实现相同域名不同路径的流量转发
使用虚拟服务器组+URL转发规则,实现将相同域名不同路径的流量转发至不同的后端虚拟服务器组。