负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
二、负载均衡的优点
减少服务器的压力,将原本一台服务器索要承受的访问量分给多台,并提高项目的可用性,当一台服务器挂掉的时候不会导致项目瘫痪。
三、四层负载均衡和七层负载均衡
四层负载均衡工作在OSI模型的传输层,主要工作是转发,它在接收到客户端的流量以后通过修改数据包的地址信息将流量转发到应用服务器。
七层负载均衡工作在OSI模型的应用层,因为它需要解析应用层流量,所以七层负载均衡在接到客户端的流量以后,还需要一个完整的TCP/IP协议栈。七层负载均衡会与客户端建立一条完整的连接并将应用层的请求流量解析出来,再按照调度算法选择一个应用服务器,并与应用服务器建立另外一条连接将请求发送过去,因此七层负载均衡的主要工作就是代理。 七层负载均衡 也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
七层负载均衡的优点:这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性;安全性高。
“负载均衡”的意思是指建立在现有的网络结构之上,提供了一个便宜有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
“负载均衡”的优势:增加带宽叠加; 支持线路备份; 解决南北互通问题; 拥有多项先进的技术 ;保障关键任务
功能 :·会话保持设置,保障业务延续性、可用性
·分发互联网的流量,解决南北互通
·链路备份,提高链路冗余
·带宽叠加,减少互联网接入的成本
·链路自动探测纠错与健康检查
四个分类:软件; 硬件; 本地; 布局
【负载均衡架构部分转自】 58沈剑 [架构师之路]( https://mp.weixin.qq.com/s
负载均衡: 是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】
常见的负载均衡方案:
【客户端层】到【反向代理层】的负载均衡,是通过“DNS轮询”实现的:DNS-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问DNS-server,会轮询返回这些ip,保证每个ip的解析概率是相同的。这些ip就是nginx的外网ip,以做到每台nginx的请求分配也是均衡的。
【反向代理层】到【站点层】的负载均衡,是通过“nginx”实现的。通过修改nginx.conf,可以实现多种负载均衡策略:
【站点层】到【服务层】的负载均衡,是通过“服务连接池”实现的。
上游连接池会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。(也即是rpc框架实现的)
在数据量很大的情况下,由于数据层(db,cache)涉及数据的水平切分,所以数据层的负载均衡更为复杂一些,它分为“数据的均衡”,与“请求的均衡”。
数据的均衡是指 :水平切分后的每个服务(db,cache),数据量是差不多的。
请求的均衡是指 :水平切分后的每个服务(db,cache),请求量是差不多的。
(1)按照range水平切分
(2)按照id哈希水平切分
[图片上传中...(-6b2508-1561902875888-0)]
常见的负载均衡系统包括 3 种:DNS 负载均衡、硬件负载均衡和软件负载均衡。
硬件负载均衡是通过单独的硬件设备来实现负载均衡功能,这类设备和路由器、交换机类似,可以理解为一个用于负载均衡的基础网络设备。比如业界非常出名的F5
缺点:
(1)价格实在非常昂贵
(2)扩展性不强
软件负载均衡通过负载均衡软件来实现负载均衡功能,常见的有 Nginx 和 LVS。
nginx和F5: https://blog.csdn.net/chabale/article/details/8956717
nginx和lvs比较: https://blog.51cto.com/hzcto/2086691
lvs: https://www.cnblogs.com/liwei0526vip/p/6370103.html
ELB: https://aws.amazon.com/cn/elasticloadbalancing/
SLB: https://help.aliyun.com/product/27537.html
题目:日活跃用户 1000 万的论坛的负载均衡集群,该如何设计呢?
(1)评估流量
1000万DAU,换算成秒级(一天12小时),平均约等于232。
考虑每个用户操作次数,假定10,换算成平均QPS=2320。
考虑峰值是均值倍数,假定5,换算成峰值QPS=11600。
考虑静态资源、图片资源、服务拆分等,流量放大效应,假定10,QPS 10=116000。
(2)容量规划
考虑高可用、异地多活,QPS 2=232000。
考虑未来半年增长,QPS*1.5=348000。
(3)方案设计
可以用三级导流:
第一级,DNS,确定机房,以目前量级,可以不考虑。
第二级,确定集群,扩展优先,则选Haproxy/LVS,稳定优先则选F5。
第三级,Nginx+KeepAlived,确定实例。
(4)架构图
接入层技术:
缺点:
优点:
缺点:
优点:
缺点:
缺点:
nginx毕竟是软件,性能比tomcat好,但总有个上限,超出了上限,还是扛不住。lvs就不一样了,它实施在操作系统层面;f5的性能又更好了,它实施在硬件层面;它们性能比nginx好很多,例如每秒可以抗10w,这样可以利用他们来扩容。
99.9999%的公司到这一步基本就能解决接入层高可用、扩展性、负载均衡的问题。 假设还扛不住的话,就要考虑使用硬件设备f5等。如果还是扛不住,那么只有DNS来扩容了。
水平扩展,才是解决性能问题的根本方案,能够通过加机器扩充性能的方案才具备最好的扩展性。 facebook,google,baidu的PV是不是超过80亿呢,它们的域名只对应一个ip么,终点又是起点,还是得通过DNS轮询来进行扩容:
比如购买了阿里云或者aws。那么基本会使用云厂商提供的负载均衡中间件,比如aws(elb)、阿里云(slb)。这个负载均衡软件可以认为是 lvs+keepalived的高可用负载均衡服务
后端的service有可能部署在硬件条件不同的服务器上:
1)如果对标最低配的服务器“均匀”分摊负载,高配的服务器的利用率不足;
2)如果对标最高配的服务器“均匀”分摊负载,低配的服务器可能会扛不住;
(1)通过“静态权重”标识service的处理能力
优点: 简单,能够快速的实现异构服务器的负载均衡。
缺点: 权重是固定的,无法自适应动态调整,而很多时候,服务器的处理能力是很难用一个固定的数值量化。
(2)通过“动态权重”标识service的处理能力
提问:通过什么来标识一个service的处理能力呢?
回答:其实一个service能不能处理得过来,能不能响应得过来,应该由调用方说了算。调用服务,快速处理了,处理能力跟得上;调用服务,处理超时了,处理能力很有可能跟不上了。
动态权重设计:
例如:
(1)设置一个阈值,超过阈值直接丢弃
(2)借助“动态权重”来实施过载保护
案例策略:
1)service的负载均衡、故障转移、超时处理通常是RPC-client连接池层面来实施的
2)异构服务器负载均衡,最简单的方式是静态权重法,缺点是无法自适应动态调整
3)动态权重法,可以动态的根据service的处理能力来分配负载,需要有连接池层面的微小改动
4)过载保护,是在负载过高时,service为了保护自己,保证一定处理能力的一种自救方法
5)动态权重法,还可以用做service的过载保护
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)