假设报考app是用5W rmb 向供应商采购,报名当天涌入海量考生,并发数飙升至30W+,致使系统宕机,拒绝服务,导致考生没法报名,那么5W rmb 可否支持30W+并发呢?php
不过对于咱们来讲,不妨把问题上升一个角度:「如何在有限的资源里最大提高服务器并发能力」。假设你是一名技术负责人,你在面对一个并发量较大的项目时会如何设计和架构呢?laravel
首先咱们能够针对这个项目捋一下大致的思路,从上述描述中不难看出,该项目的瓶颈在于「并发写」而非「读」,所以从资源分配上咱们能够向「写」倾斜,在此我将数据所有写入在Redis中。除此以外,咱们也须要尽可能的将MySQL的读操做迁移到Redis上来,MySQL所作的工做更倾向于一些常规非并发的读写操做。面试
当用户请求过来,由负载均衡器负载到各个服务器上sql
★个人php学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料以及笔面试题)以及不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们shell
这是一张来自symfony的压测数据,使用的是1 CPU, 4 GB and PHP 7的配置。数据库
上图的数据来自于swoole官网,在加上咱们在实际业务逻辑的执行以后,能够发现,当咱们在使用常驻内存的启动方式时,3台更低配服务器就能解决上述须要16台才能解决的问题。后端
其实许多人在接触后端有必定的阶段以后都会了解,如今的许多互联网项目的瓶颈更多的集中在数据库I/O这块,各个语言之间并无特别大的差距。包括广被你们所诟病的PHP-FPM的启动方式,也可使用swoole等方式来替代。所以,在这个项目中,会将更多的把精力集中于数据库这一块,能够尝试使用Redis来解决,固然,在具体代码中,也须要提早准备好必定数量的数据链接池。 另外,也考虑MongoDB虽然在同等配置下的写入速度要比MySQL快得多,可是相比于Redis,仍是存在明显不足。缓存
注册和登陆其实应该分红两块来说,两者分别对应的是「写」和「读」。在高并发读写状况下,直接使用MySQL,如你期待的那样,会爆。所以,咱们在构建整个项目的过程当中,能够将用户数据缓存到Redis中。 「写」的问题:在用户数量不明确且并发量较大的状况下,我更倾向于用户数据不直接入库。咱们能够设计一个开关或阈值,来设置用户的入库方式,当并发大的状况下能够经过MQ来异步让用户入库,而平时则能够正常入库。服务器
由于该项目并不是咱们所常见的秒杀,且须要即时通知的,所以给咱们项目的设计大大减小了难度。在提交表单的功能也跟注册相似,咱们彻底可让数据异步入库,而后后台审核。swoole
其余的像CDN、MySQL是否须要主从之类的就再也不赘述了,视实际状况而定。从理论上,若是使用PHP-FPM的方式,大概须要19000元/月来解决项目的这个问题,而当使用swoole时,大概须要4500元/月,在这里并无鼓吹swoole,想说明的是当咱们在面对大并发项目时,尤为是业务逻辑相对复杂,咱们使用常驻内存更能解决问题,而这与语言无关。 最后,须要说明的是,上述仅是理论阶段,至于实际数据如何都须要进一步检验。文章素材来源于网络,若是有写的不正确的地方,望指出。
★PHP 互联网架构师成长指南+行业问题解决总纲(持续更新)
★面试10家公司,收获9个offer,2020年PHP 面试问题
★若是喜欢个人文章,想与更多资深开发者一块儿交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入咱们的群-点击此处。
本文由博客群发一文多发等运营工具平台 OpenWrite 发布