互联网研发中负载均衡算法一点探索

    负载均衡在线上服务中有着很重要作用,因为一台web服务比如tomcat,能够处理qps(每秒处理请求数)

是有限的。那么就需要有有前端负载均衡服务将大的流量分发为多个后端服务进行处理。

       负载均衡产品有硬件F5、有软件,早之前使用Apache较多,目前是使用Nginx多,Nginx架构实现简洁优

雅性能高。LVS、HAProxy是著名软负载工具。说到LVS是由原淘宝章文蒿(目前在滴滴公司)博士领导开发,

是到目前为止Linux内核中网络核心部分,也是国人开Linux内核最高贡献,章博士在国内技术圈封神,实至名

归。当然国内对于Linux内核进行贡献代码人很多,以后有机会可以介绍下那些牛人。

       硬件F5优点是负载均衡效果好、效率高,缺点是配置复杂,成本高。

       Apache、Nginx可以进行软件负载,软件负载性能没有硬件负载性能高,但优势是配置灵活并且能知道

后端负载情况,根据后端负载调整负载均衡配置。Nginx支持多种负载均衡算法,根据实际情况调整负载配置

来满足业务需要。软件负载成本低效果也能满足线上性能需要,软件负载在互联网企业有着广泛用途。

       web网站软件负载均衡过程是,用户请求打到负载均衡Apache、Nginx上,由Apache、Nginx转发到

多个Tomcat服务,Tomcat上web服务接收到请求处理完返回给Apache或Nginx,Apache和Nginx将请求返

回给前端浏览器,完成整个负载均衡过程。

       nginx负载均衡算法:有轮训负载均衡算法,ip hash负载均衡算法,url hash负载均衡算法,轮训加权

负载均衡算法,fair 负载算法按服务端相应时间来分配请求。

       dubbo微服务本身也是通过软件负载来分配客户端请求,与web差异点是一:负载是在客户端进行处理

而不是服务端。二是负载是负载请求次数而不是连接,因为当下微服务都是通过netty来实现长连接,负载

是负载多个长连接对于每个连接中产生调用次数。

       1、轮训算法:前端请求按时间顺序按顺序配置到后端服务器,如果是后台服务当掉,如果后台服务器

当掉,则去掉有问题机器,对于用户请求无感知,用户不会知道已有服务掉线,也是实现服务高可用。

       2、加权负载均衡算法:指定轮训权重,权重越大,给后端服务转发请求越多,这种配置用在后台服务

器性能有好好差情况下,后台性能好机器配置高权重,后台性能差服务配置低权重,根据实际后台服务情况

调整权重配置。

       3、ip hash可以根据用户请求ip按照hash算法将请求分配到固定后端服务上,这样可以解决用户在动态

服务上session共享问题,当前session共享也可以通过共同存储,比如将session存储到数据库或者将session

存储到redis来解决session共享问题。

        ip hash还有个好处就是在618、双11等电商大促高并发场景下,当用户请求超过系统能够处理负载,实

现对用户排队,通过排队避免用户请求过多压垮系统。

       4、url hash:按访问url hash将固定url访问,打到固定节点服务,这样可以根据url调整服务资源,最大

化资源利用率。

       5、fair负载均衡算法:根据服务端相应时间,来调整分配给每一台后端服务请求数量,这样可以更智能、

合理、资源最大化使用实现负载调配。

       负载均衡算法还要注意失效节点负载重新进行均匀分配,而不是对整个流量全部进行重新分配。避免突然

给后台服务增加很多请求造成服务不可用。再有就是负载均衡算法成熟,要避免bug导致服务击穿,并且产生洪

泛效应,将所有服务节点均打垮最终导致服务不可用。

        对于每一个技术都要掌握原理,很好的去使用它,发挥它最大优势,勿在浮沙筑高台,希望对大家有帮助。

微信搜索:debugme123

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

判断字符编码

今天本来打算讲点新课的,后来有些事耽搁,也没时间准备了,就分享一个小工具吧: python里面的字符编码是让人头大的一个东西,甚至很多时候你都不知道现在拿到的文...

3215
来自专栏云计算

Kubernetes中的Service Mesh(第1部分):Service的重要指标

原文地址:https://dzone.com/articles/a-service-mesh-for-kubernetes-part-1-top-line-se...

2396
来自专栏Spark学习技巧

Hdfs的数据磁盘大小不均衡如何处理

最近浪尖在纠结一个现在看起来很简单的问题。 现象描述 建集群的时候,datanode的节点数据磁盘总共是四块磁盘做矩阵成了一个7.2TB的sdb1(data1...

4059
来自专栏抠抠空间

漫谈单点登录(SSO)

5694
来自专栏架构师之路

数据库秒级平滑扩容架构方案

一、缘起 (1)并发量大,流量大的互联网架构,一般来说,数据库上层都有一个服务层,服务层记录了“业务库名”与“数据库实例”的映射关系,通过数据库连接池向数据库路...

4678
来自专栏数据和云

深入内核:Asm Rebalance 原理

李真旭@killdb Oracle ACE,云和恩墨技术专家 个人博客:www.killdb.com 编辑手记:ASM Rebalance 的过程具体发生了什么...

3816
来自专栏逢魔安全实验室

Equation Group泄露工具之vBulletin无文件后门分析

01 — 背景介绍 方程式泄漏的几波样本虽然大都已是好些年前人家就在用的,但是时至今日我们再分析这些样本,所涉及的技术细节、攻击方法、思维和角度还是令人叹为观...

3186
来自专栏FreeBuf

Web漏洞演练平台 – ZVulDrill

在学习和研究web漏洞的过程中对每一种漏洞都进行了测试,将其整理到了一块儿,于是有了一个简单的Web漏洞演练平台–ZVulDrill,各位安全测试人员可以亲身实...

2547
来自专栏抠抠空间

漫谈单点登录(SSO)

SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开源的有OpenSSO、CAS ,微软的AD SSO,及...

1283
来自专栏Petrichor的专栏

git: 为什么 pull request 不叫 push request

在日常的开源社区使用中,有时候会遇到我 想要 协助修改 的 开源项目。这个时候,pull request(合并申请功能)就可以让原本 没有 该仓库 修改权限 ...

2652

扫码关注云+社区