**高并发(**High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),每秒事务处理量TPS(Transaction Per Second),并发用户数等。
这里不细提这些指标的含义,不了解的可以 Google。
看下面这段话之前,欢迎大家先去 Google 上搜一下这个答案,看看是否有具体的数据?
其实这个问题怎么没有具体的数据来衡量什么才是高并发?
比如:
所以具体多少 QPS 才算高并发其实跟业务是强相关的。
经常也看见很多内容标题是《高并发 xxx》,然后点进去一看,就是讲 synchronized、volatile 等等,其实个人觉得这些点只能算并发编程设计等,不能算到高并发设计里。
其实到了这里,很多人肯定就会说,分布式一致性怎么做、缓存一致性怎么做、Nginx 负载均衡怎么做、熔断限流怎么做,叭叭叭。
但是这里不讲具体高并发系统下的细节,这里只分享通用设计方法,这些设计方法可以让你对于高并发系统的设计有一个大的骨架,就像修房子一样,先有一个大体的房子架构图,再去考虑到房子里怎么装修,这些方法同理如此。
我们可以把高并发设计比喻为:大家去火车站坐火车,火车站进站开多个进站窗口验身份证和票,安检传送带东西太多需要等待,那可以把安检传送带设计宽一点放更多的东西,安检人数过多,让后面的人在卡点等一下,等前面的人安检完毕再慢慢放人。
只要学过算法的我们,肯定知道分而治之这个点,分而治之这个点同理在高并发系统设计里通用,
当大流量打到系统所在机器上的时候,我们可以把机器的配置升高,比如4 核 8g 的电脑带不上吃鸡,那我们就可以升级到 8 核 16g,这里就堆硬件配置来解决问题,但是如果当我们的流量超过了一台机器配置的极限的时候,我们又该怎么做?
我们可以拿多个机器来处理这些流量,我们可以把多个机器组成一个分布式集群来进行处理这些流量,这样的话流量就分摊到每个机器上去了,当然可能很多人就会问:机器挂了怎么办?分布式一致性怎么做?怎么让流量到服务器上?这里不谈这些,因为这些点约谈越深,根本出不来。
这里谈的横向扩展包含了很多点,比如系统主服务扛不住可以加机器,数据库扛不住也可以加机器做分库分表等,接下来要说的缓存如果扛不住也可以机器。
其实说到缓存,可能第一印象就是 Redis,但是缓存这个概念在计算机里到处都是,比如我们了解到的CPU 缓存、Web 缓存、磁盘缓存等等,这些地方都用到了缓存。缓存的种类和实践是非常多的,但是我们可以发现这些缓存的点,最终目的就是降低响应时间。再回过来想我们学习 Redis 的第一点就学到,Redis 是基于内存的,它很快。
又说到同步、异步这些词,这些词真的是太太太大众化了。
那什么是同步,什么是异步呢?
以调用一个方法举例,
做个比喻:以等外卖为例,你在门口一直等到外卖送过来,这个就是同步外卖。你先去干自己的事情,外卖到了给你打电话叫你取餐,你才来取餐,这个就是异步外卖。
比如前面图片我说到的花呗还款,还款一直显示的是还款处理中,其实这个提示就代表着系统在异步处理我们的还款请求了。因为一个还款请求需要涉及到很多内部服务之间的互相调用。
我们做同步转异步的方式就是:采用消息队列,还款处理时我们会把这个请求丢到消息队列中,然后同时快速告诉我们:还款处理中,然后就释放出资源去处理更多的还款请求。当我们的还款请求在消息队列最终被处理完毕之后,再告诉我们还款成功/失败。
当我们采用消息队列同步转异步,比如可以从以前的同步还款 10s 响应时间,提高到 4s 响应时间告诉他处理中。系统的资源占用也少了很多,可以去处理更多的花呗还款请求了,系统承受高并发的能力也就提升了。这里其实也是消息队列的作用之一。
花呗异步处理还款操作示意图
其实我们还需要思考很多点,很多异常情况,写好代码做好设计很简单,但是更难的是我们要如何做好异常处理进行兜底,比如:
说到这里,其实就算一个基本的结束了,高并发的设计其实就聊这些,以上内容基本都是理论。但是 一个实践案例不能完全涵盖一个理论,相反一个理论可以支撑很多的实践案例。
这些思路其实在最近的实践中也进行了运用,这样设计里面肯定还会出现很多问题的点,这些问题的点这篇文章不做细讲。我们目前已经把修房子的房子架构图已经修好了,至于房子里的装修怎么弄,就是后面的事了。
但是如果当你去面试或者做设计的时候,你就可以从这些点来出发回答问题和思考问题。这样就不会过于细节或者回答偏离逻辑点,从总体到细节。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有