网站架构:PHP针对并发访问如何优化?


考官出题:


 优化一个并发量较高的社区型平台,您会采取哪些方案?(只有三台服务器,并发量大->接近无穷大)

我的回答:


 1)采取LNMP架构,并且先确保硬件是否足够支撑如此大的访问量
2)对于不需实时更新的数据如新闻资讯可生成文件缓存,以缓解并发压力
3)针对不同的运营线路解析到不同的服务器,做分流
4)使用CDN加速缓存缓解并发压力

面试结果:


 不满意,被pass

求答案。

2015-8-21
另外一个疑惑的是, 多少才算高并发? 如何来计算是属于高并发?

php 面试题 高并发 同步

LXianG 9 years, 9 months ago

只能说你回答的思路 对不上面试官的。

其实你就应该反问他 给他问萌了为止, 机器的配置。 别说什么无限大,每秒峰值多少
然后你就告诉他 保证多少吞吐的情况下 支持并发,要考虑高负载情况下的一些极端情况。 而且你得假设 所谓并发高、但业务支撑少的原则,按此说,3台机子理论上 就是2台web机 1台db,2台机子LVS+keepalived这种东东根本用不上,就直接在nginx上面写策略。然后你再问他 瓶颈可能还出现在哪里? 支持高并发的原则就是,哪里有瓶颈就解决哪里,拒绝空谈 大谈 特谈 扯淡 !

最后 最主要 你要告诉他一个答案,按着你的配置和计算,最大可以支撑多少并发的业务 ,如果清晰完整的说完这些他还不满意,我建议你对他呵呵后再见。 我就有一次面试 跟面试官抬杠,最后大哥跟我聊上硬件了 估计也是急眼了

抽风西红柿 answered 9 years, 9 months ago

这个问题可是很宽泛的,分为好几个方面.

最基本的各种配置文件的优化是有必要的.

程序方面:数据文件缓存,内存缓存,静态缓存,opcode缓存等等

数据库方面:设计合适的表结构,表缓存优化,主从动静分离,集群,冷热数据分离等....

系统架构方面:redis,高可用啦等等.....我就不说了,太多了

SuFall answered 9 years, 9 months ago

你是面试高级工程师还是架构师?

他招你进去一般不会想你改他的架构的,我觉得问这个问题只是想了解你是否对网站架构有所了解。

如果你没有参与过高并发的项目,只是根据网上的资料,然后回答,我觉得被pass掉很正常。

这样回答可能效果更好点:


 我以前在XXX公司做过XXX项目,也遇到了高并发的问题,我们采取的解决方案有....

其实高并发的问题要码农和运维人员一起解决,关键在于实战。。。

517小胖 answered 9 years, 9 months ago

这种公司还是不用去了~相当于问你一个没有范围的问题,然后要你一个没有范围的答案。这种非确定性结果跟程序员的思维是相悖的

dio001 answered 9 years, 9 months ago

技术主管装逼的情况的太普遍了,面试时总会刁难你

..弦.. answered 9 years, 9 months ago

三台服务器,无限并发,你问问他,吃三个馒头,从此不用再吃饭了,行不行?

古斯塔夫多拉贡 answered 9 years, 9 months ago

考官的问题问的很笼统。并发量接近无穷大是什么意思?

蛋蛋皮破了 answered 9 years, 9 months ago

只要不是代码、架构问题(该索引索引,该缓存缓存),3台**普通**服务器的情况下,优先考虑的确是应该是加机器或者提高机器性能:
现在普通web服务器一台3~5万,能支持PHP或Java Web页面并发500~1000(大概经验,不喜勿喷),招技术做高级架构优化就不止这点钱了。

PHP也有高并发框架,楼主可以试试,接触过swoole,一般机器单机能上万。

p.s.单机百万并发听说过,但是并发量接近无穷大这种要求还真没听说过,不知道考官怎么想的,无穷大并发首先考虑带宽的钱给不给的起吧。。。(要是楼主没听清楚问题建议再沟通,要是真要求无穷大并发,这个考官可能不是工程师而是老板)

走边路诺八嘎 answered 9 years, 9 months ago

并发量大->接近无穷大 的时候,最简单,最有效的解决问题的方法就是: 增加服务器,强哥当年说的都是真理啊

MJvsYY answered 9 years, 9 months ago

其实考官只是看你怎么在有限的资源内处理问题的能力。
现在很多程序员根本只知道程序内的事,不考虑资源的合理利用。

能乐者敛其锋芒 answered 9 years, 9 months ago

其实面试官是个技术垃圾的一逼,他害怕招人比他优秀,然后把它顶掉!你想啊,三台机器,就想着并发无限大,有这想法的人会是啥水平?单机瓶颈在那放着呢,说不定就是三台512的阿里云,哈哈。
或者他根本不是招人,而是让人免费提供解决方案的!然后你说了,他觉得查点资料他自己就能搞了。
再者吧,他可能就是渣,用的还是Windows图形界面的服务器呢,你上来说lnmp环境,他根本不会玩啊,不pass你,pass谁啊!以上是玩笑话!

不过呢,对于面试优化的,你说的什么生成静态啊,cdn啊,这些都是太宽泛,你要具体到事例上。

四月的苹果 answered 9 years, 9 months ago

这种问题,回答大致的思路就好了。另外,考官的问题描述也不够准确。

沧桑的熊叔 answered 9 years, 9 months ago

才三台服务器,还谈什么并发,单台机器的并发是有瓶颈的,社区型平台并发瓶颈不应该是写入,而是读取,可以用一台物理服务器做为缓存服务器,还需要在高并发时,缓存的网卡会不会被打满,社区型发贴也可以有延时,写入时可以使用消息队列写入,同时处理与队列处理,用户可能是无感知的,消费一个队列的时间很快,在写入数据库中,可以同时刷新缓存,也可以使用nosql数据库来做,就是控制好内存使用,cache与storage合理使用。
如果硬要说构架:
分层,分割,分布式,集群,缓存,异步等,就三台机器,说构架,我也是醉了

无双大黄瓜 answered 9 years, 9 months ago

Your Answer