前段时间有网友意见我说说PHP研发高并发网站的办法,针对当前互联网发展的速度,这以后将是一个很平常的事情,关于高并发能够写一本书了,这儿就只简单说说,抛砖引玉一下,学无止境,期盼与大众一起学习!
通常来讲,处理WEB高并发的有效手段都是采用可线性扩展的多层分布式架构,
Webserver (Nginx) :这一层是能够容易分布式安排的,结合智能DNS解析能够简易地防止单点故障、实现区域拜访加速,结合LVS很容易实现负载平衡。这一层重点是负责处理静态请求和转发PHP请求至第二层的PHP处理节点,至于静态资源位置(http://misc.xxxx.com)能够单独拿出来安排,或直接运用商用的云存储服务(国内七牛不错,国外有Amazon S3)
PHP处理节点:一个节点其实便是一个监听特定端口的系统进程,webserver的请求经过负载平衡器(我用的AWS的loadbalancer)进行分发,很好实现分布式和负载平衡。我此刻用的还是php自带的php-fpm,其实facebook出的hhvm性能非常强悍,然则还不可100%经过我项目的单元测试,等hhvm成熟过后能够平滑替换
高速缓存:用的memcached,这一层的功效重点是减轻数据库IO和加快热数据拜访,缓存策略与程序耦合度较高,不赘述,但简单地说有两种方式,一种是在程序的全局层面加一个缓存处理,这种办法代码耦合度低,然则有效命中率不高,有些项目不必定适应,另一种是在详细的数据存取处加缓存处理,这种办法程序耦合度较高,然则缓存命中率非常高,几乎没有没有效缓存存在,我用的是这种。
数据库 :我此刻的项目数据规模不大,暂时只用了单台数据库,然则程序规律上已做好了数据库线性扩展的准备。其实数据库层的扩展是老生常谈了,常用手段是分库分表,这一起需要在前期的代码就打下基本,另一更平滑地手段是运用中间件,例如360的Atlas,阿里巴巴的cobar,淘宝的TDDL,中间件能够在不大范围变更代码的状况下扩展,然则详细的运用场景还是有限的,详细项目还需单独考察。
其他:按照区别的项目,架构还能够选取性地运用队列,我此刻用的beantalkd,Redis亦是一个很好的选取。队列常用的运用环境是邮件发送和站内信息推送上面,然则在某些场景下亦能够做为核心数据库的缓冲,对应对大并发或突发性流量亦是不错的选取
|