高并发系列: 垂直性能优化之细说负载均衡

沙海 2021年4月27日05:24:41Java评论24字数 2529阅读8分25秒阅读模式
摘要

速读摘要

速读摘要文章源自JAVA秀-https://www.javaxiu.com/20782.html

大部分优化点也是我们一线研发日常可以直接接触的模块。垂直性能优化之细说集群部署和负载均衡。七层负载均衡(根据虚拟的url或是IP,主机名接收请求,再转向相应的处理服务器)。上述内容基本都是基于服务级别来叙述的负载均衡的概念。也有很多特定的负载算法,比如rpc中的本地优先负载等等。文章源自JAVA秀-https://www.javaxiu.com/20782.html

原文约 1962 | 图片 17 | 建议阅读 4 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡

程序IT圈 文章源自JAVA秀-https://www.javaxiu.com/20782.html

以下文章来源于Coder的技术之路,作者Coder的技术之路文章源自JAVA秀-https://www.javaxiu.com/20782.html

文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

Coder的技术之路文章源自JAVA秀-https://www.javaxiu.com/20782.html

努力,让自己从事真正的技术工种,而不是熟练工种。。。文章源自JAVA秀-https://www.javaxiu.com/20782.html

文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发是业务发展到一定阶段必须面对的问题,那么面对高并发的问题,我们可以从哪些方面入手优化呢?文章源自JAVA秀-https://www.javaxiu.com/20782.html

垂直性能优化[包含整体层面的负载均衡、中间件异步化、存储优化、代码层面调优、jvm容器调优等等]整体可用性优化[包含服务治理、服务保护、可靠性保障、生产验证、故障演练等等]水平扩展提升[包含分层架构、弹性架构、服务拆分及单元化等等]文章源自JAVA秀-https://www.javaxiu.com/20782.html

文章源自JAVA秀-https://www.javaxiu.com/20782.html

从这篇开始将对上述问题进行逐点阐述,欢迎大家一起交流讨论~文章源自JAVA秀-https://www.javaxiu.com/20782.html

前言

性能为王。可用性和水平扩展,都要建立在性能优良的基础上才会去考虑。文章源自JAVA秀-https://www.javaxiu.com/20782.html

性能是高并发的基础,而且涉及面极广,也是需要我们投入更多的精力去对待;同时,大部分优化点也是我们一线研发日常可以直接接触的模块。也是大厂面试的时候会经常涉及到的模块。文章源自JAVA秀-https://www.javaxiu.com/20782.html

所以第一部分大概十几篇可能都会在垂直性能优化上。第一篇,垂直性能优化之细说集群部署和负载均衡。文章源自JAVA秀-https://www.javaxiu.com/20782.html

从阿里架构演变来看负载均衡

我们将淘宝网的架构演进(即时通讯网[1])整理到一个滑动图里,如下图所示:文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

<<< 左右滑动见更多 >>>文章源自JAVA秀-https://www.javaxiu.com/20782.html

当然,比如中台建设、上云等更高级演进就在此忽略了;文章源自JAVA秀-https://www.javaxiu.com/20782.html

可以更清晰的看到,在集群部署和负载均衡,几乎分布在了整个演进链路上最关键的节点上:文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 当解决了本地存储的性能瓶颈,新的瓶颈出现在了web容器的单体性能上。因此,使用nginx反向代理来实现多个web容器负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 当数据库和tomcat都达到水平扩容,可支撑的并发大幅提升时,单体nginx代理的性能成了新的瓶颈。因此,使用F5或LVS来实现多个nginx反向代理服务器负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 当业务进一步发展,达到多地多机房部署,垮地域访问延迟成了新的瓶颈。因此,使用DNS来实现地域机房间的负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

    文章源自JAVA秀-https://www.javaxiu.com/20782.html

细说负载均衡方案

常见的实现方案,其实从上面的演进链路中也已经可以基本了解到各个方案适用的发展阶段和应对常见,这里再系统的总结下:文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 基于DNS的负载文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 基于硬件的负载,如F5文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 基于软件的负载,如Nginx/Squid文章源自JAVA秀-https://www.javaxiu.com/20782.html

DNS负载

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

<<< 左右滑动见更多 >>>文章源自JAVA秀-https://www.javaxiu.com/20782.html

头条号[2]  知乎[3]文章源自JAVA秀-https://www.javaxiu.com/20782.html

上面两副图,可以看到DNS的解析过程和负载均衡的原理。天然的优势就是配置简单,实现成本非常低,无需额外的开发和维护工作。文章源自JAVA秀-https://www.javaxiu.com/20782.html

而缺点也比较明显:文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 目前的DNS是多级解析的,每一级都可能缓存。所以生效不及时。文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 不能按服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异和运行状态,不灵活文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 额外的网络问题。为了使本DNS服务器和其他DNS服务器及时交互,保证数据及时更新,一般都要将刷新时间设置的较小,可能造成流量增大。文章源自JAVA秀-https://www.javaxiu.com/20782.html

基于硬件的负载均衡

「F5 Network Big-IP」 是一个网络设备,可以简单的认为是一个网络交换机一类的东西,性能非常好,百万级TPS。文章源自JAVA秀-https://www.javaxiu.com/20782.html

性能优良、功能强大,多种均衡算法都可以支持,还有防火墙等安全功能。但,非常贵,一般小公司可用不起。文章源自JAVA秀-https://www.javaxiu.com/20782.html

基于软件的负载均衡

软件负载均衡都是以TCP/IP协议的OSI模型的运用:(即时通讯网[4])高并发系列: 垂直性能优化之细说负载均衡根据OSI模型可将负载均衡分为:文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 二层负载均衡(一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应);文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 三层负载均衡(一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应);文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 四层负载均衡(在三次负载均衡的基础上,用 ip+port 接收请求,再转发到对应的机器);文章源自JAVA秀-https://www.javaxiu.com/20782.html

  • 七层负载均衡(根据虚拟的url或是IP,主机名接收请求,再转向相应的处理服务器)。文章源自JAVA秀-https://www.javaxiu.com/20782.html

常见的其实只有4层和7层负载。文章源自JAVA秀-https://www.javaxiu.com/20782.html

四层和七层的横向对比

四层七层
原理基于IP+端口基于虚拟的URL或主机IP
分析内容IP层及TCP/UDP层应用层信息,如HTTP协议URI或Cookie信息
复杂度架构简单、管理容易、问题定位方便比较复杂
灵活性仅支持基于网络层的需求转发可对所有跟服务端的请求进行修改
安全性无法直接抵御网络攻击更容易抵御来自网络的攻击
效率基于更底层设置,效率高需要更多的资源损耗

常见的负载均衡算法

算法名优点缺点
轮询简单高效,兼顾所有节点集群性能瓶颈更多的会受性能差的服务器影响
随机同轮询类似
一致性hash相同来源请求落点相同,有利于灰度发布等功能遇到热点会对节点有冲击;节点故障影响上游调用
加权轮询将机器性能考虑在内,集群性能最大化生产环境复杂多变,无法动态调整权重,只能粗略预先优化
动态连接数、最快响应动态,根据节点状况实时变化增大的复杂度和资源消耗

广义的负载均衡

上述内容基本都是基于服务级别来叙述的负载均衡的概念。其实,负载被运用的场景还很多,比如,服务端rpc选址、以及一些中间件的投递和请求分发,再有一些弹性架构下的弹性路由,单元化下的单元路由,其实也是更高层面的负载均衡。相应的,也有很多特定的负载算法,比如rpc中的本地优先负载等等。文章源自JAVA秀-https://www.javaxiu.com/20782.html

结束语

负载均衡是业务发展到一定阶段必经的优化过程。掌握负载相关的原理和算法,对我们日常业务问题排查甚至是架构设计都可以起到很好的帮助。文章源自JAVA秀-https://www.javaxiu.com/20782.html

本篇是高并发系列中垂直性能优化的第一篇,从服务的整体优化为出发点叙述了主要技术手段--负载均衡的主要内容,下一篇,将从中间件的应用入手,再聊性能优化。欢迎大家来一起交流。文章源自JAVA秀-https://www.javaxiu.com/20782.html

Reference

[1]文章源自JAVA秀-https://www.javaxiu.com/20782.html

从100到1000万高并发的架构演进之路: http://www.52im.net/thread-2665-1-1.html文章源自JAVA秀-https://www.javaxiu.com/20782.html

[2]文章源自JAVA秀-https://www.javaxiu.com/20782.html

头条号: 程序员小新人学习文章源自JAVA秀-https://www.javaxiu.com/20782.html

[3]文章源自JAVA秀-https://www.javaxiu.com/20782.html

知乎: foxgab:DNS如何实现全局负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

[4]文章源自JAVA秀-https://www.javaxiu.com/20782.html

一篇读懂分布式架构下的负载均衡技术: http://www.52im.net/thread-2494-1-1.html文章源自JAVA秀-https://www.javaxiu.com/20782.html

文章源自JAVA秀-https://www.javaxiu.com/20782.html

文章源自JAVA秀-https://www.javaxiu.com/20782.html

高并发系列: 垂直性能优化之细说负载均衡文章源自JAVA秀-https://www.javaxiu.com/20782.html

继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定