PHP超级负载均衡

摘要

 

超级负载均衡旨在为解决服务不断扩展、机器不断增多、机器性能差异等问题,以增强系统的稳定性,自动分配请求压力。算法实现了多个模型和均衡策略,能通过配置实现随机、轮询、一致hash等。同时也能实现跨机房的相关分配。现已经在多个系统中使用。

TAG

负载均衡

内容

现有系统中存在的问题:

 

1. 慢连接、瞬时访问慢。

场景一:

如果后端新增加机器,cache命中率低,因此响应速度慢,但是能连接上且不超时。如果ui持续访问就会把ui夯住。

场景二:

如果后端模块某一台机器响应较慢。如果前端持续访问就会被夯住。

2. 死机。

场景一:

能断断续续响应请求,不过速度很慢。造成ui夯住。

3. 混合部署。

场景一:

多个模块在同一机器上,项目影响。

4. 机器权重。

场景一:

老机器,性能差;新机器,性能彪悍。因此他们应该承载不同的压力。

5. 跨机房冗余。

场景一:

后端对cache依赖很高的模块,因为采用的是一致hash算法,如果挂掉一台机器,对另外的机器cache命中率冲击很大。因此希望将对这个机器的请求均衡到另外一个机房。

6. php和c使用同样的策略。

现在php和c希望能使用的策略实际上是有很大的一致。为了避免重复开发,php和c希望采用同样的负载均衡库。

要解决的问题:

设计思路:

1. 根据均衡策略计算出的均衡值对Server进行逆序排序。

2. 负载选择。对步骤1排序后的Server按以下顺序进行选择:

a、按连接失败概率进行选择。

注:横轴代表失败次数,纵轴代表选择的概率。

Cconn:一段区间内失败次数

f(Cconn):连接概率,取值范围在(0,100]

b、按健康状态选择。

整个模型基于服务处理时间的收敛性。

分析:

1) 如果机器状态良好,则平均处理时间会保持在一个稳定水平;即使是小波动,也会较快平稳在一个状态。

2) 如果机器开始出现问题,处理时间会开始增长。如果增长持续超过一段时间,则说明有可能会影响服务;如果一段时间后稳定了,说明对请求没有太多影响。

f(healthy):机器健康状态,取值范围[0,1]

select(healthy):机器选择概率,取值范围[R,1]

c、如果所有机器都没选中,则随机选择一台机器进行服务。

3. 机器流量均分。

不同的机器处理能力是不一样的。当按照步骤2选择了某台机器,需要将其他处理时间为他的1/T(T>=2)的机器也选取出来,将部分压力分给对应的机器。

设k台机器的处理时间分别是t1, t2,…,tk, 选中的机器id=i,比该机器处理能力高的机器时间分别为p1,p2,..,pr, (其中pj × T <= ti)。设一段时间总访问量为Y,每台机器理论上的访问量应该为Vg=Y/k。而实际的Vr=Y/(ti * (1/t1+1/t2+…+1/tk))。则应该分出Vg-Vr的流量给pj。pj的流量比例为1/p1:1/p2:…:1/pr

算法设计:

A、均衡算法

1. 一致hash算法。

将每个server的ip和port加上balance_key三者做字符串拼接后,做md5签名。

value(server) = md5(server_ip + server_port + balance_key)

2. 随机算法。

value(server) = random();

3. 轮询算法。

value(server) =((server.id – (rounds % server_count)) + server_count) % server_count

4. 多个选一算法。

rank初始化为1, 如果默认的server失败,则rank+1

value(server) =((server.id – (rank % server_count)) + server_count) % server_count

B、负载算法

1. 连接状态算法。

a、对每一个server开辟一个状态队列。bool queue[K] 用来统计失败次数。每次有坏状态进队,计数加一。如果有坏状态出队,则计数减一。

b、按照f(Cconn)公式计算出选择概率。

c、利用rand()%100是否在[0,f(Cconn)]来决定是否选择该机器。

2. 健康状态算法。

a、每台机器维持一个一秒钟内的处理时间T和次数C。

b、当一秒过去以后,将T、C计算为平均处理时间R。

c、每M秒,统计每台机器最近一段时间的平均处理时间, 按照公式select(healthy)算出选择概率。

d、利用rand()%100是否在[0, select(healthy)*100]来决定是否选择该机器。

C、流量均分

按照策略选出满足要求的机器,按照流量均分公式进行流量分配。

分配时按照balance_key+server方式和random()来分配机器, 尽量保证请求落在同一台机器。

时间: 2024-10-27 14:21:41

PHP超级负载均衡的相关文章

Nginx服务器做负载均衡反向代理的超级攻略_nginx

nginx 做反向代理时,后端主机有多台,可以使用 upstream 定义一个后端主机池,在反向代理时直接使用主机池的名字.在 upstream 中可以定义负载均衡调度算法,权重,健康状态检测等参数. 例如: upstream backend { server 172.16.0.1:80 weight=1 max-fails=3 fail_timeout=10; server 172.16.0.2:80 weight=1max-fails=3 fail_timeout=10;; } 默认请求下,

【转载】四层和七层负载均衡的区别

简单理解四层和七层负载均衡:①所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址:三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址:四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器:七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器. ②所谓的四到七层负载均衡,就是在对后台

服务器负载均衡集群及LVS知识详解

此博文主要介绍集群和负载均衡的基本理论和类别,内容看着比较枯燥.无味的,但是要想成为一个好的linux运维工程师,这些基本理论是必须理解透彻,才会在后来的系统调优和集群架构中得心应手,所以想成为linux运维工程师的我们必须承受得住寂寞~~~嘿嘿,命苦的我们啊!努力学习吧!今天很残酷,明天更残酷,后天会很美好,但不要死在明天晚上! 一.集群简介 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发.由于主要 用于科学工程计算,所以这些系统并不为大家所熟知.

四层和七层负载均衡的区别

  (一) 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器. ② 所谓的四到七层负载

负载均衡进阶:SLB常见问题解决方法

摘要:在由和阿里云网络团队联合主办的2017阿里云网络技术在线高峰论坛上,阿里云技术专家添毅分享了网络产品部根据客户和阿里云运维的反馈提炼出的几大最主要和最常见的在使用SLB产品中发生的问题,并为大家介绍了针对这些常见问题的相应处理方法.想知道如何借助SLB构建高可用系统以及健康检查是如何实现的,本文不容错过! 本文内容根据演讲嘉宾分享视频以及PPT整理而成. 本次的分享将会主要围绕以下5个部分 基本概念回顾 如何构建高可用系统 选择性能共享型还是性能保障型实例 为什么健康检查异常 为什么负载不

什么是集群,什么是负载均衡,他们2者的关系是什么啊。

问题描述 什么是集群,什么是负载均衡,他们2者的关系是什么啊.希望有自己的理解,不要copy长篇大论..因为我已经看过了.就是看得迷迷糊糊的所以才请教大家.我可能不可以这样理解:1:集群是一种多服务器结构(可能每个服务器部署在多个电脑上,也可以是1个).2:是否集群主要看是不是多个相同应用被部署.(可以在多台电脑上,也可以是1个)3:要负载均衡必须集群. 解决方案 解决方案二:集群是一个统称,他分为好几种,如高性能科学群集.负载均衡群集.高可用性群集等.科学群集通常,这种集群涉及为群集开发并行编

网络负载均衡详解

一.四层和七层负载均衡简介 1. 常见的负载均衡类型 ① 二层负载均衡 基于MAC地址,它会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址. ② 三层负载均衡 基于IP地址,它会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址. ③ 四层负载均衡 基于IP地址和端口号,它会通过一个虚拟IP和端口号接收请求,然后再分配到真实的服务器. ④ 七层负载均衡 基于URL等应用层信息,它会通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器. 2. 四层和七层负载均衡 所谓的四

lvs、haproxy、nginx 负载均衡的比较分析

对软件实现负载均衡的几个软件,小D详细看了一下,从性能和稳定上还是LVS最牛,基本达到了F5硬件设备的60%性能,其他几个10%都有点困难.      不过就因为LVS忒牛了,配置也最麻烦了,而且健康检测需要另外配置Ldirector,其他HAPROXY和NGINX自己就用,而且配置超级简单.      所以小D建议,如果网站访问量不是门户级别的用HAPROXY或者NGINX就OK了,到了门户级别在用LVS+Idirector吧 哈哈     lvs和nginx都可以用作多机负载的方案,它们各有

高可用集群HA及负载均衡集群LB的实现方法

集群是个热门话题,在企业中越来越多地应用Linux操作系统提供邮件.Web.文件存储.数据库等服务,随着Linux应用的日益增长,高可用及http://www.aliyun.com/zixun/aggregation/13996.html">负载均衡Linux集群也在企业中逐步地发展起来.Linux平台的低成本.高性能.高扩展性使得Linux集群能够以低廉的价格很好地满足各种应用的需求. 本文介绍Linux集群的基础知识,集群的分类.在熟悉集群的基础知识后会以RHCS(RedHat Clu