代理与负载均衡 #
知识点 #
- 代理
- 作用:转发请求;过滤请求;记录请求;转换请求;缓存响应;
- 类型:
- 开放代理(Open Proxy):由代理服务器从用户指定的位置上访问资源。
- 匿名代理(Anonymous Proxy):隐藏原始IP。
- 透明代理(Transparent Proxy):能够透传原始IP和请求头。
- 反向代理(Reverse Proxy):由代理服务器从不同服务器检索资源进行返回,从用户端看起来这些数据好像就存在于代理服务器。
- 开放代理(Open Proxy):由代理服务器从用户指定的位置上访问资源。
- 负载均衡
- 作用:均匀分配请求;将请求分配到正常运行的服务器节点来实现请求层面的HA。
- 负载均衡算法:
- 随机;
- 最少连接(适合游戏等需要长连接的场景);
- 最短响应时间;
- 最少带宽;
- 轮询(DNS仅支持该种);
- 加权轮询;
- Hash(适合需要实现粘性会话的场景);
- HA:通过冗余负载均衡器加IP漂移来实现。
- 实现方式:代理服务提供;客户端集成;
- 集成位置:客户端与Web服务端之间;Web服务端与内部系统之间;内部系统与数据库之间等等。
最佳实践 #
- 负载均衡
- DNS层面实现地理位置级别负载均衡。如北京用户访问北京机房。
- DNS负载均衡原理:权威服务器每次返回不同的IP地址。具体来说,权威服务器每次返回一个IP列表,同时使用轮询算法每次更改IP列表中的排序。 客户端每次都向列表中的第一个IP发起请求,如果失败,客户端可以自行决定是否再使用列表中的其它IP做重试。
- 硬件(F5)层面实现集群级别的负载均衡。硬件负载均衡器性能更优,但需要采购时间,专人安装和维护。
- 软件(Nginx/OpenResty、LVS)层面实现机器级别的负载均衡。
- Nginx 为软件层面的7层负载均衡,支持 HTTP,Email 协议。
- OpenResty = Nginx + Lua,可以通过Lua脚本为Nginx添加业务逻辑。
- LVS 是 Linux 内核的4层负载均衡,和协议无关。
- DNS层面实现地理位置级别负载均衡。如北京用户访问北京机房。
- Nginx高可用
- 双机主备模式:DNS绑一个VIP + 双keepalived/Nginx。一台Nginx通过VIP提供服务,另一台Nginx仅作为备机。
- 双机主主模式:DNS绑两个VIP + 双keepalived/Nginx。两台Nginx互备,通过两个VIP同时提供服务。