考官出题:
<code>优化一个并发量较高的社区型平台,您会采取哪些方案?(只有三台服务器,并发量大->接近无穷大)</code>
我的回答:
<code>1)采取LNMP架构,并且先确保硬件是否足够支撑如此大的访问量 2)对于不需实时更新的数据如新闻资讯可生成文件缓存,以缓解并发压力 3)针对不同的运营线路解析到不同的服务器,做分流 4)使用CDN加速缓存缓解并发压力</code>
面试结果:
<code>不满意,被pass</code>
求答案。
2015-8-21
另外一个疑惑的是,多少才算高并发?
如何来计算是属于高并发?
回复内容:
考官出题:
<code>优化一个并发量较高的社区型平台,您会采取哪些方案?(只有三台服务器,并发量大->接近无穷大)</code>
我的回答:
<code>1)采取LNMP架构,并且先确保硬件是否足够支撑如此大的访问量 2)对于不需实时更新的数据如新闻资讯可生成文件缓存,以缓解并发压力 3)针对不同的运营线路解析到不同的服务器,做分流 4)使用CDN加速缓存缓解并发压力</code>
面试结果:
<code>不满意,被pass</code>
求答案。
2015-8-21
另外一个疑惑的是,多少才算高并发?
如何来计算是属于高并发?
谈并发的大部分是装逼的。这是我这段时间的体会。如果真要人。你不懂他都可以招去慢慢培养。
不想要人。你就是再牛也没用。
这么多人顶我呀。受宠若惊的感觉。不过并发没办法帮你解决了。我还没有处理过上万的并发了!
但通常都是要找出瓶颈。才能去解决问题。
http://berb.github.io
这是一个基本的介绍。楼主可以去读读。
写了非常多的想法。基本是硬件+软件的解决办法。
硬件方面主要是负载均衡。CDN加速。auto scale(vertical scale && horizontal scale)。但我觉得3个服务器来scale 好像用处不大。
软件方面就是做各种缓存。还有PHP运行机制的改变。比如fastcgi通常比cgi更好等。facebook的那个hiphop应该就是从这个方面去优化的吧?
当然其他的优化还有i/o阻塞。同步。异步等等。排队等处理方式。最近流行的node.js就是在这个方面做得吧。
至于更加高级的mapreduce等等。我觉得那些已经不再普通程序员的讨论范围内了。
PS::在我看来瓶颈很少是由语言造成的。那些个拿语言来说事的。我都懒的回复了。
感觉你没有和他沟通就开始作答:
首先,他说只有三台服务器,只指三台web服务器吗?那么db主备各有几台,提到了吗?
其次,他说的并发量几乎接近无穷大?这么大的流量,他来源何处,有效的流量到底有多少?你问了嘛?无效的流量需要你做优化吗?直接干掉
最后,cdn做缓存,我有点不大理解,cdn顶多也就是存储一些静态图片资源,js,css等等,像论团这种类型的,很多可能都是UGC内容,你用cdn如何缓存啊?
应对并发的体会,暂时想到下面2点:
并发中的性能问题
1,有钱就堆设备
2,充分利用缓存(配合php的黑魔法fastcgi_finish_request非常好用)
并发中数据一致性问题
1,使用队列
2,必要的自动复查
3,数据库锁的合理利用
三台服务器肯定是满足不了无限的并发,只能是尽量的优化。优化的顺序是:业务、程序、部署。
从业务上要处理好应用超出负荷时的处理,比如:目前在线人过多请稍候访问之类的提示;减少图片、附件等上传的大小限制,甚至临时取消附件功能,减少带宽和存储空间的压力;分页只支持固定的分页。
程序上包括应用的优化和数据库的优化。有可能的话尽量使用第三方的服务减少服务器自身的压力。首页等访问量大的页面静态化,减少数据库的压力,批量的实务代替时时的处理。数据库要对业务表的锁进行细化处理,读写分离。
部署上要数据库一台,另外两台负载均衡。使用cdn尽量把流量分离出去。增加防ddos攻击,跳高防护的等级,减少网络攻击对普通用户的影响。
其实三台服务器能做很多事情 :)
三台机器,三台什么样的机器,三台机器并发接近无穷大这问题本身就是相悖的。我认为在面试中太宽泛的问题其实就是耍流氓,不过也可以说明一点,面试官没有什么处理高并发的经验,只是想听听你的看法
三台这样的:
CPU:Intel(R) Xeon(R) CPU E7-4870 v2 @ 2.30GHz×4 总计60核
内存:512G
硬盘:fio卡,文件系统采用ext4文件系统
还是三台IBM的小型机、还是三台阿里云512M的vps,这里如何保证高可用,高性能,只能说尽最大优化,达到并发的极限
社区型平台的瓶颈在哪里,活跃用户有多少,数据量有多大,什么都没有怎么做?
只好回单业内通用的架构了
1.拆表:大表拆小表(垂直拆,水平拆;分表,分区partition,分片sharding),可以在应用层实现,也可以在数据库层面实现一部分;提高系统性能。
2.分库:把表放到不同的数据库,这也是分布式数据库的基础;提高系统性能。
3.分布式:不同的数据库放到不同的服务器;提高系统性能。
4.集群:使用数据库复制等技术组建集群,实现读写分离、备份等;提高系统性能、可用性。
5.缓存:对常用的数据进行缓存。提高系统性能。
6.备份:主从库,快照,热备,异地备份等;提高系统可用性
架构:LVS+keepalived+Java/PHP/Python+mysql/mongodb+memcached/redis+centos+nginx/apache+sphinx/solr+Gearman+Munin+TFS
你的回答的确很普通,你应该说三台机器根本就扛不住高并发,3台服务器会直接宕机的,无论怎么优化都无法做到抗住高并发,这个面试官是个SB.
话说有一次我去蓝汛面试,“面试官”问了我两道题,我都答上来了,但是他非说我错了,还说自己写了5年shell,《shell编程》那本书从头到尾都看过,从没见过这种写法,云云。 当时他带着电脑来面试的。我说在电脑上试一下就可以知道对不对。但是他说没必要。然后就说我不合适。我回去之后,在自己的电脑上试一下,完全正确。
这个故事告诉我们,有些所谓“面试官”其实水平很烂,而且有些人怕地位不保,还不想招水平比自己高的人。
所以也没必要为了一次面试没过或者答案被否定就否定自己。
:) 楼上的很多人对面试官有意见啊。其实,面试的时候被问一些模糊的问题很正常,我面试的时候也会问几个这种问题。站在面试官的角度来说,抛出一个边界不确定的问题,让被面试者自己界定和分析问题,既能有效观察到被面者的应对技巧和分析思路,又能避免把问题限定到被面者不熟悉的地方从而让被面者无法发挥。而且,在实际项目中,项目经理或者产品经理甚至同事给你建任务的时候,提的需求或者问题,很可能是模糊的。所以从面试官来讲,问些模糊甚至不着边的问题其实还是蛮需要的。
就这个问题来讲,楼主过早的给出了答案,而没有把问题条件分析清楚。面试官的意思是,在给定的三台服务器情况下优化现有社区型平台的并发能力,越高越好。1.先分析清楚社区型平台的特性,计算密集还是IO密集?2.现有社区型平台的技术架构是什么?3.三台服务器里服务和DB的部署情况是什么样的,利用率有没有达到最优?4.确定前三个问题,找到性能节点,如果是数据库,换数据库/分表/分库/热存balabala,如果是前端,那用的是前端模板还是后端模板,cdn/静态化/API合并/缓存balabala,如果是后端,根据平台框架,可能的优化方案更多了。。。5.结合问题的界定和分析,给出答案以后,可以抛开面试官给的限定谈一下对高并发看法,比如硬件堆砌,集群等等。
负载均衡
读写分离
缓存,分布式缓存
才三台服务器,还谈什么并发,单台机器的并发是有瓶颈的,社区型平台并发瓶颈不应该是写入,而是读取,可以用一台物理服务器做为缓存服务器,还需要在高并发时,缓存的网卡会不会被打满,社区型发贴也可以有延时,写入时可以使用消息队列写入,同时处理与队列处理,用户可能是无感知的,消费一个队列的时间很快,在写入数据库中,可以同时刷新缓存,也可以使用nosql数据库来做,就是控制好内存使用,cache与storage合理使用。
如果硬要说构架:
分层,分割,分布式,集群,缓存,异步等,就三台机器,说构架,我也是醉了
其实面试官是个技术垃圾的一逼,他害怕招人比他优秀,然后把它顶掉!你想啊,三台机器,就想着并发无限大,有这想法的人会是啥水平?单机瓶颈在那放着呢,说不定就是三台512的阿里云,哈哈。
或者他根本不是招人,而是让人免费提供解决方案的!然后你说了,他觉得查点资料他自己就能搞了。
再者吧,他可能就是渣,用的还是Windows图形界面的服务器呢,你上来说lnmp环境,他根本不会玩啊,不pass你,pass谁啊!以上是玩笑话!
不过呢,对于面试优化的,你说的什么生成静态啊,cdn啊,这些都是太宽泛,你要具体到事例上。
其实考官只是看你怎么在有限的资源内处理问题的能力。
现在很多程序员根本只知道程序内的事,不考虑资源的合理利用。
并发量大->接近无穷大 的时候,最简单,最有效的解决问题的方法就是: 增加服务器,强哥当年说的都是真理啊
只要不是代码、架构问题(该索引索引,该缓存缓存),3台**普通**服务器的情况下,优先考虑的确是应该是加机器或者提高机器性能:
现在普通web服务器一台3~5万,能支持PHP或Java Web页面并发500~1000(大概经验,不喜勿喷),招技术做高级架构优化就不止这点钱了。
PHP也有高并发框架,楼主可以试试,接触过swoole,一般机器单机能上万。
p.s.单机百万并发听说过,但是并发量接近无穷大这种要求还真没听说过,不知道考官怎么想的,无穷大并发首先考虑带宽的钱给不给的起吧。。。(要是楼主没听清楚问题建议再沟通,要是真要求无穷大并发,这个考官可能不是工程师而是老板)
考官的问题问的很笼统。并发量接近无穷大是什么意思?
三台服务器,无限并发,你问问他,吃三个馒头,从此不用再吃饭了,行不行?
技术主管装逼的情况的太普遍了,面试时总会刁难你
这种公司还是不用去了~相当于问你一个没有范围的问题,然后要你一个没有范围的答案。这种非确定性结果跟程序员的思维是相悖的
你是面试高级工程师还是架构师?
他招你进去一般不会想你改他的架构的,我觉得问这个问题只是想了解你是否对网站架构有所了解。
如果你没有参与过高并发的项目,只是根据网上的资料,然后回答,我觉得被pass掉很正常。
这样回答可能效果更好点:
<code>我以前在XXX公司做过XXX项目,也遇到了高并发的问题,我们采取的解决方案有.... </code>
其实高并发的问题要码农和运维人员一起解决,关键在于实战。。。
这个问题可是很宽泛的,分为好几个方面.
最基本的各种配置文件的优化是有必要的.
程序方面:数据文件缓存,内存缓存,静态缓存,opcode缓存等等
数据库方面:设计合适的表结构,表缓存优化,主从动静分离,集群,冷热数据分离等....
系统架构方面:redis,高可用啦等等.....我就不说了,太多了
这种问题,回答大致的思路就好了。另外,考官的问题描述也不够准确。
只能说你回答的思路 对不上面试官的。
其实你就应该反问他 给他问萌了为止, 机器的配置。 别说什么无限大,每秒峰值多少
然后你就告诉他 保证多少吞吐的情况下 支持并发,要考虑高负载情况下的一些极端情况。 而且你得假设 所谓并发高、但业务支撑少的原则,按此说,3台机子理论上 就是2台web机 1台db,2台机子LVS+keepalived这种东东根本用不上,就直接在nginx上面写策略。然后你再问他 瓶颈可能还出现在哪里? 支持高并发的原则就是,哪里有瓶颈就解决哪里,拒绝空谈 大谈 特谈 扯淡 !
最后 最主要 你要告诉他一个答案,按着你的配置和计算,最大可以支撑多少并发的业务 ,如果清晰完整的说完这些他还不满意,我建议你对他呵呵后再见。 我就有一次面试 跟面试官抬杠,最后大哥跟我聊上硬件了 估计也是急眼了

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
