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


考官出题:


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

我的回答:


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

面试结果:


 不满意,被pass

求答案。

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

php 面试题 高并发 同步

LXianG 10 years, 10 months ago

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

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

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

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

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

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

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

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

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

SuFall answered 10 years, 10 months ago

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

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

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

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


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

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

517小胖 answered 10 years, 10 months ago

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

dio001 answered 10 years, 10 months ago

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

..弦.. answered 10 years, 10 months ago

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

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

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

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

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

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

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

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

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

MJvsYY answered 10 years, 10 months ago

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

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

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

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

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

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

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

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

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

Your Answer