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