程序员经典面试题:高并发系统,一般需要怎么做

更新日期: 2019-08-21阅读: 1.6k标签: 面试

高并发系统总是那么令人着迷,比如说双十一的抢购,比如说12306的抢票,都是非常经典的高并发的例子,也是非常大的挑战。对于开发这样系统的人来说,最怕的就是突发的流量,就好比河流突发大水而引发洪涝灾害一样,突发的流量也会引起服务器奔溃。

为了应对这些突发的流量,我们总需要做点什么?今天我们来介绍一下高并发的几个套路。


分布式

提升并发的好的办法,便是提升硬件。举个大家都熟悉的例子,十年前的诺基亚手机,一般我们只能简单的挂一个QQ后台,多干几个事情,就不行了。五年前,我们用的安卓手机能开十来个任务,切换也比较流畅了,而今天,刚刚发布的苹果iPhone11,性能就更加强劲。但是我们也发现,这两年,好像手机的性能没有飞速发展了。无论是苹果、高通还是华为,或者是PC芯片的厂商因特尔或者AMD,都开始慢慢在挤牙膏了。

这其实是受到物理定理的制约,晶体管不可能无限小,无限集成,硬件不可能一直保持突飞猛进。并且,越是高端的机器,成本越贵,并且这个价格很可能是指数级增长的。谷歌公司在很早之前就发现,于是开始组建分布式系统,使用一个集群而不是一台机器来完成相关的工作,凭借这一点,谷歌在互联网早期迅速发展。


缓存

缓存,是解决高并发问题的另一个有效手段。因为磁盘的读写速度较慢,所以我们常常用读写速度的更高的内存来防止流量到达磁盘。

一般我们会把一些静态资源都放在缓存上,或者将一些动态的又不怎么重要的更新频率可以接受延迟的放在缓存里。举个例子,音乐服务器,我们可以把专辑的图片、音乐文件这些放在CDN等缓存服务上,对于一些热门的评论列表,我们也可以进行缓存,一定时间才刷新一次,可以大大减少磁盘的压力。当然,有时候有缓存还远远不够,例如前几天周杰伦的新专辑照样打垮了QQ音乐的服务器。


异步

即便是有缓存,有些请求仍然没有办法快速的相应。

有些请求是写请求,举个例子,沙茶敏写了一份电子邮件,群发了1万个人,群发的人数非常多,服务器要往很多人的信箱投递消息,假设一个人需要0.1秒,1万个人也要1000秒。虽然可以并发到多台机器解决,但是非常浪费资源,如果很多人这么做,系统压力非常大。

另外的情况,是有可能某个系统处理非常慢,这个系统既有可能是业务非常复杂,也有可能是第三方系统,举个例子,沙茶敏从支付宝提取一笔资金到某小银行,因为技术原因,某个小银行每次接口访问都要10秒钟,不可能在转账页面卡10秒,所以支付宝先告诉用户转账成功了,然后异步进行。

异步,我们通常采用了异步队列,异步的好处除了削峰,限流,提升用户体验,还能很好的保护系统。


总结

上面就是高并发系统中常用的几个套路,当然,实际开发中我们还有很多要注意的


链接: https://www.fly63.com/article/detial/5437

Web前端年后跳槽面试复习指南

很多童鞋可能年后有自己的一些计划,比如换份工作环境,比如对职业目标有了新的打算。当然面试这一关不得不过,大概又不可能系统性的复习,这里罗列一些 重点 面试的知识点和文章,

前端面试之webpack面试常见问题

什么是webpack和grunt和gulp有什么不同?什么是bundle,什么是chunk,什么是module?什么是Loader?什么是Plugin?如何可以自动生成webpack配置?webpack-dev-server和http服务器如nginx有什么区别?

每个 JavaScript 工程师都应当知道的 10 个面试题

多问问应聘者高层次的知识点,如果能讲清楚这些概念,就说明即使应聘者没怎么接触过 JavaScript,也能够在短短几个星期之内就把语言细节和语法之类的东西弄清楚。

37个JavaScript基本面试问题和解答

面试比棘手的技术问题要多,这篇文章整理了37个JavaScript基本面试问题和解答,这些仅仅是作为指导。希望对前端开发的你有所帮助!

React常见面试题

React常见面试题:React中调用setState之后发生了什么事情?React中Element与Component的区别?优先选择使用ClassComponent而不是FunctionalComponent?React中的refs属性的作用是什么?React中keys的作用是什么?

有趣的Js面试题_如何让 (a == 1 && a == 2 && a == 3) 返回 true

题目大意为:JS 环境下,如何让 a == 1 && a == 2 && a == 3 这个表达式返回 true ?这道题目乍看之下似乎不太可能,因为在正常情况下,一个变量的值如果没有手动修改,在一个表达式中是不会变化的。

js练习笔记:10道JavaScript题目

10道JavaScript题目:累加函数addNum、实现一个Person类、实现一个arrMerge 函数、实现一个toCamelStyle函数、setTimeout实现重复调用、实现一个bind函数、实现一个Utils模块、输出一个对象自身的属性

vue菜鸟从业记:没准备好的面试,那叫尬聊

面试开场白总缺少不了自我介绍,一方面是面试官想听听你对自己的介绍,顺便有时间看看简历上的描述,是否与口述一致。另一方面就是看看你简历上做过什么项目,用到了哪些技术栈,一会儿好提问你。

毕业一年左右的前端妹子面试总结

把面试当做学习,这个过程你会收益很大。前端知识很杂,可能实际工作中用到的技术,像框架都是跟着公司的要求走的,像我最近也在看React啦,Vue和React都对比着再学习

vue面试时需要准备的知识点

vue上手可以说是比较轻松而且简单,如果你用过angular,react,你也会很喜欢vue。vue的核心思想依旧是:构建用户界面的渐进式框架,关注视图的变化。这也是为什么新建的文件是结构是template script style

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!