每个行业都一样,人才都是分层次的,从事技术行业的程序员们更是如此,按照技术能力分为三六九等。

每个层次的人出去面试,面试官考察的方向是不一样的。

刚入职场的小白,会问你很多基础性的知识,有过几年经验的程序员,会问你相关的项目经历、架构设计。如果是行业有影响力的技术专家,不一定会问你技术,可能就跟你聊聊行业动态、技术发展趋势。

如果你出去面试,面试官问你,如何设计一个高并发的系统?

那么你就得好好回答了,为什么?

如果你确实在互联网公司干过高并发系统,经历过每天几亿几十亿的流量,高峰期每秒几万甚至几十万的并发的话,面试官肯定不会问你如何设计一个高并发系统。而是会让你介绍下你们的项目,你们项目架构是什么样的?怎么部署的?部署了多少台机器?缓存怎么用的?数据库怎么用的?就是深挖细节,你到底是如何抗下高并发的。

如果面试官问你如何设计一个高并发系统,一定是你没实际干过高并发系统。面试官看你简历没什么亮点,又有几年工作经验,所以给你一个开放式的设计题,通过这个题目,了解你虽然没有实际干过高并发系统,但有没有自己研究学习过,有没有相关的知识积累。

面试官当然是希望招个真正干过高并发的人了,但这种人很难招,所以只能退而求其次,招一个没有实际经验但有相关知识积累的人。

所以此时,你必须展示出你所有关于高并发的知识了!

这种问题呢,最好不要一上来就给出最终的一套完备的高并发系统架构,而是不断地演进,正常的系统架构升级也是这么个过程。

比如,最开始时每秒最多10个请求,一个单体系统就可以抗住。

图1 单体系统

接下来10w个用户变成100w,1000w个用户,每秒1000个请求,你线上机器内存开始开始感觉到紧张,使用率开始上升,cup使用率飙升。你数据库可能就扛不住了,因为数据库磁盘io效率开始下降,很多SQL变得很慢。

这个时候你要干的第一件事情就是系统拆分,把之前的单体系统拆分成多个系统,数据库也跟随系统做拆分,每个系统使用自己的数据库。

图2 系统拆分

单体系统拆分成立3个系统,每个系统访问自己独立的数据库,每个数据库部署在独立的机器上。原来一个数据库最多可以抗1000的并发,现在所有的资源翻了三倍,可以抗3000的并发。

假设现在系统每秒又3000个请求了,你系统可能又快扛不住了,这时候你怎么办呢?用缓存。

redis缓存可以轻松的抗几万的并发,用缓存后呢,大量的读请求可以走缓存,很多系统都是读多写少,比如资讯系统,3000个并发请求,缓存至少拦截掉2000个读请求,剩下1000个写请求走数据库。

图3 增加缓存

假设现在用户增长到1亿用户,每秒钟1w请求,写请求达到2000个,数据库又扛不住了,怎么办呢,可以在数据库前面加个MQ。

图4 增加MQ

这里MQ主要起到削峰的作用,高峰期大量的写请求积压在MQ中,等高峰期过了,再慢慢消费。

接下来用户增长到2亿,每秒2w个请求,4000个写请求。MQ就会积压非常多的消息,导致很多数据很久都不能被修改掉,这是用户不能忍受的。

单库写已经达到瓶颈了,怎么办,分库分表啊。你可以把一台数据库拆分为3台数据库,用多个数据库分摊写请求压力。

图5 分库分表

缓存有过期的可能,如果请求访问的时候,缓存刚好过期了,就会导致读请求直接穿透到数据库里,所以你还可以给数据库加上读写分离,让读请求分流到从库去,降低对主库的压力。

图6 读写分离

针对搜索的话,数据量小的时候,可以走数据库,当数据量大了后,可以把相关的数据抽出来放到es集群里,es集群专门提供查询服务。

es集群是分布式的,可以放几十亿的数据,可以针对系统的数据量和搜索并发,配置合适数量的机器。

图7 es搜索

总之,就是随着用户量和并发量的不断增长,系统的架构也在不断地演进。上面这种架构演进还是比较简单的,真正复杂业务系统里,并不是简单的堆一些高大上的技术或框架,其系统远远比上面的系统复杂几十倍。

如果面试的时候,面试官问你如何设计一个高并发系统,你可以按照上面这个思路回答。虽然你可能没经历过高并发系统,但本文如果能让大家对这个问题多一些思考,在面试的时候,有一些系统性的思路和阐述,那么也就达到本文的目的了。

【面试题】如何设计一个高并发的系统?相关推荐

  1. 面试题:如何设计一个高并发的系统?

    这道面试题涉及的知识点比较多,主要考察的是面试者的综合技术能力.高并发系统的设计手段有很多,主要体现在以下五个方面. 1.前端层优化 ① 静态资源缓存:将活动页面上的所有可以静态的元素全部静态化,尽量 ...

  2. oom 如何避免 高并发_【面试题】如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 原文链接:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/high- ...

  3. mysql每秒支持多少并发_如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确 ...

  4. 高并发面试 - 如何设计一个高并发系统?

    高并发面试 - 如何设计一个高并发系统? 面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里 ...

  5. 如何设计一个高并发系统架构

    1,一般一个高并发系统的架构组成如下图所示: 2,面试题 如何设计一个高并发系统? 3.面试官心里分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘 ...

  6. 如何设计一个高并发的存储系统

    1. 如何设计一个高并发的系统 ① 数据库的优化,包括合理的事务隔离级别.SQL语句优化.索引的优化 ② 使用缓存,尽量减少数据库 IO ③ 分布式数据库.分布式缓存 ④ 服务器的负载均衡 2. 锁的 ...

  7. 面试题:如何设计一个高并发系统?

    面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确实有真才实学,在互联网公司里干过高 ...

  8. 【面试】如何设计一个高并发系统

    一.为什么需要秒杀系统? 电商平台本质是在线上撮合买卖双方的购销需求,达成交易.虽然是线上交易,但也遵守朴素的经济学原理,供求关系决定了商品的经济活动.当供求平衡时,买方和卖方处于对等关系,双方相对稳 ...

  9. 如何设计一个高并发系统

    人人都开始聊高并发,高并发,那么所谓的高并发到底应该是啥,应该怎么理解这个高并发这个概念呢?这么说来就得要思考为啥会产生高并发? 简单来说,因为我们从传统的单体项目开始系统都是需要直接连接数据库的,而 ...

最新文章

  1. mysql 5.7.15 安装_mysql 5.7.15 安装配置方法图文教程
  2. Django的静态文件的配置
  3. 5.7 matlab数据插值与曲线拟合的比较
  4. 美赛最新通知:论文接收状态已更新完毕!
  5. Angular jasmine fixture.detectChanges如何触发directive的set方法
  6. 为什么要用python不用origin_Python告诉你为什么百度已死
  7. asp:dropdownlist如何去掉三角箭头_一棵悬崖三角枫的培养过程
  8. 如何利用Python播放和录制声音
  9. Python redis的订阅发布机制(publish、pubsub)
  10. day16【前台】项目展示
  11. 纳多德通过ISO 9001质量、ISO 14001环境、ISO 45001职业健康安全国际管理体系认证
  12. 怎样才能走上架构师岗位
  13. linux如何禁用独立显卡驱动,Ubuntu中独立显卡不好用如何关闭独立显卡
  14. 重读《从菜鸟到测试架构师》-- 测试专家的第一步
  15. 固液分离机市场现状及未来发展趋势
  16. vue核心之虚拟DOM(vdom)与真实DOM页面渲染过程
  17. 算法复杂度 hdu1425
  18. js中利用prompt和parseFloat来实现用户体温华氏和摄氏的提取(18)
  19. Editplus如何设置中文页面
  20. Python标准库简介

热门文章

  1. 怎么获取请求头中的origin信息_委托单位代办汇算清缴时无法获取到我的专项附加扣除信息怎么办?...
  2. iptables配置-Linux系统安全防火墙
  3. android 使用jar里 aidl,Android Studio中用gradle打包带AIDL文件的jar文件
  4. wp10 android,WP10能在Android机正常用不?
  5. python功能性爬虫案例_Python使用requests及BeautifulSoup构建爬虫实例代码
  6. idel 智能提示_intellij idea设置代码自动提示快捷键的详细方法.
  7. 解题报告:简单瞎搞题(bitset的应用)
  8. android webview setappcacheenabled,Java WebView.setDrawingCacheEnabled方法代码示例
  9. 查python的软件_[Python实战]Python制作天气查询软件
  10. android mysql 搜索功能_android利用数据库实现搜索联想功能