php怎么处理高并发以下内容转载自徐汉彬大牛的博客 亿级Web系统搭建——单机到分布式集群
当一个Web系统从日访问量10万逐步增长到1000万 , 甚至超过1亿的过程中 , Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题 。为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制 。在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决 。
Web负载均衡
Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配“工作任务”,而采用恰当的分配方式 , 对于保护处于后端的Web服务器来说,非常重要 。
负载均衡的策略有很多,我们从简单的讲起哈 。
1. HTTP重定向
当用户发来请求的时候 , Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,实际上就是页面重定向 。通过重定向,来达到“负载均衡”的目标 。例如,我们在下载PHP源码包的时候,点击下载链接时,为了解决不同国家和地域下载速度的问题,它会返回一个离我们近的下载地址 。重定向的HTTP返回码是302
这个重定向非常容易实现,并且可以自定义各种策略 。但是,它在大规模访问量下,性能不佳 。而且 , 给用户的体验也不好,实际请求发生重定向 , 增加了网络延时 。
2. 反向代理负载均衡
反向代理服务的核心工作主要是转发HTTP请求,扮演了浏览器端和后台Web服务器中转的角色 。因为它工作在HTTP层(应用层) , 也就是网络七层结构中的第七层,因此也被称为“七层负载均衡” 。可以做反向代理的软件很多,比较常见的一种是Nginx 。
Nginx是一种非常灵活的反向代理软件,可以自由定制化转发策略,分配服务器流量的权重等 。反向代理中,常见的一个问题,就是Web服务器存储的session数据,因为一般负载均衡的策略都是随机分配请求的 。同一个登录用户的请求,无法保证一定分配到相同的Web机器上,会导致无法找到session的问题 。
解决方案主要有两种:
1. 配置反向代理的转发规则,让同一个用户的请求一定落到同一台机器上(通过分析cookie),复杂的转发规则将会消耗更多的CPU,也增加了代理服务器的负担 。
2. 将session这类的信息,专门用某个独立服务来存储,例如redis/memchache,这个方案是比较推荐的 。
反向代理服务,也是可以开启缓存的,如果开启了,会增加反向代理的负担,需要谨慎使用 。这种负载均衡策略实现和部署非常简单,而且性能表现也比较好 。但是,它有“单点故障”的问题,如果挂了,会带来很多的麻烦 。而且,到了后期Web服务器继续增加,它本身可能成为系统的瓶颈 。
3. IP负载均衡
IP负载均衡服务是工作在网络层(修改IP)和传输层(修改端口,第四层),比起工作在应用层(第七层)性能要高出非常多 。原理是,他是对IP层的数据包的IP地址和端口信息进行修改,达到负载均衡的目的 。这种方式,也被称为“四层负载均衡” 。常见的负载均衡方式,是LVS(Linux Virtual Server,Linux虚拟服务),通过IPVS(IP Virtual Server,IP虚拟服务)来实现 。
在负载均衡服务器收到客户端的IP包的时候 , 会修改IP包的目标IP地址或端口,然后原封不动地投递到内部网络中,数据包会流入到实际Web服务器 。实际服务器处理完成后,又会将数据包投递回给负载均衡服务器,它再修改目标IP地址为用户IP地址,最终回到客户端 。
推荐阅读
- 老游戏手机解谜游戏,2020手机解谜游戏
- 现在梨树打什么药视频,梨树需要打什么药
- 怎么加装多个硬盘,怎么加装多个硬盘驱动
- 主板显卡怎么拆下来,主板上显卡怎么拆
- linux执行who命令 linux执行who命令没有返现
- 户外拍摄为什么有高光时刻,为什么室外拍照更好看
- 怎么更新电脑的显卡驱动,如何更新电脑驱动显卡
- unity+导出html5,unity导出webgl后html打不开
- linux命令开启vnc Linux命令开启桌面环境