PHP高级开发必备技能之一——高并发场景解决方案
随着互联网网站的升级和功能增多,对于网站的要求也在慢慢增加,从传统的静态网站到现在可以容纳几亿人同时发送用户需求的网站平台,其中最典型的例子就是前段时间的双十一零点抢购。同一个时间段,上亿数据量在服务器内运行,这本身就是对网站的技术考验,既要保证系统的正常运行,又要防止崩盘现象产生。
如何在秒杀等场景中解决和优化高并发问题?是PHP开发工程师必备技能,也是未来网站开发的方向,随着人们需求性增加,软件和硬件也会慢慢与之升级,同一时间段的并发量也会越来越多,将会有更高性能优化的数据处理架构出现,此次维护系统运行稳定。
PHP编程语言的主要应用领域就是web开发,在进行访问网站时,衡量Web系统的吞吐率的指标是QPS,即解决每秒数万次的高并发场景。一般来说,系统本身解决客户请求的速度为1秒处理10万请求,但在高并发场景下,机器处于高负载的状态,增加了响应时间,进而使得服务器的速度变慢,当用户请求过多的时候,就会出现网站瘫痪现象。
根据以上结论,利用反推法思考。如果我们提高了服务器速度,自然也会解决高并发问题,而这其中首先就要找出响应时间增多的原因。
响应时间增加的原因来自于打开了很多连接进程,增加了CPU的消耗。为了防止此类状况,我们可以进行硬件因素综合考量,通过Apache自带的abench测试下,进而选取一个合适的中间值,选用这样就可以通过内存同级别的Redis进行存储,用缓存来解决内存问题。高并发状态下,存储的响应时间至关重要,所以如果可以减少响应时间,就能提高cpu处理速度。
值得一提的是,我们在处理访问量过多场景时,一定要使用专用的服务器。不然就算再怎么将软件进行优化和比较,也弥补不了硬件上的缺陷,这对提高服务器的速度依然不能解决。
当然,因为秒杀和抢购流量的不确定性,系统无法提前预知用户请求的数量,这样会出现其他各种问题,当硬件和软件都不能满足解决条件时,这时只能用重启和过载保护来重新运行系统。其中,重启这个方式是强制性的关闭系统通道,但如果系统在关闭前是“雪崩”现象,就需要在关闭前将流量拒绝,经过一段时间的休整,再重启电脑。当然这种方式并不会被提倡。
通过对系统容纳流量的最大程度分析,当到达临界点边沿,就启动过载保护,这样也可以继续维持网站系统的正常运行。过载保护是自动拒绝用户请求的一种措施。可以在前端设置过滤或者在CGI入口层将客户的直接请求返回。
最后,高并发场景下,我们也要注意数据的安全。用AtomicInteger、synchronized、Lock、ThreadLocal等类来保证在代码层面上的线程安全;如果是功能上需要自主多线程处理,那么也会使用线程池ThreadPool来提高并发效率。