高并发解决方案

高并发之扩容思路

每个线程都有自己的工作内存,占用内存大小取决于工作内存中变量的多少与大小,随着并发的线程不断增加,占用的内存会越来越多,我们就需要考虑给系统扩容。
方法:

  • 垂直扩容:提高系统部件能力,比如增加内存
  • 水平扩容:增加更多的服务器

数据库扩容

数显判断你的网站是写操作多还是读操作多的网站,例如博客网站就属于读操作多;相反的,大型网站的订单交易系统,这个系统的主要负载在于处理交易记录,属于写操作多。
多操作扩展:加redis缓存
写操作扩展:加Hbase来实现水平扩展

高并发之缓存思路

如何利用有效的资源来提高吞吐量呢?一个有效的办法就是引入缓存,请求可以从缓存中直接获取目标数据并返回,从而提高响应速度。
缓存的特征:

  • 命中率:命中数/(命中数+没有命中数)
  • 最大空间:代表缓存中可以存放的最大元素的数量,一旦缓存中元素数量超过这个值,就会触发缓存清空策略,根据特定情况来设置最大空间往往可以提高缓存命中率
  • 清空策略:关于redis的数据清空策略见redis知识点

缓存命中率的影响因素

  • 业务场景和业务需求:缓存常常适合读多写少的场景
  • 缓存的设计(粒度和策略):通常情况下,缓存的粒度越小,命中率越高;另外策略也是一个影响因素,当数据发生变化时,更新缓存比直接移除缓存命中率更高
  • 缓存容量和基础设施:缓存容量有限,容易引起缓存失效;采用应用内置的本地缓存容易出现单机瓶颈,采用分布式缓存更容易扩展

高并发下缓存常见问题

具体可以看这篇文章:缓存世界中的三大问题及解决方案

高并发之消息队列思路

一个简单的消息队列模型

现在假设这样一个场景,用户下单成功需要给用户发短信,如果没有消息队列,我们会选择同步调用发短信的接口并等待短信发送成功。现在假设短信接口实现出现了问题或者短信发送短时间内达到了上限,这个时候是选择重试几次还是放弃发送呢?这里的设计会很复杂
如果使用了消息队列,我们选择将发短信的操作封装成一条消息发送到消息队列,消息队列通知一个服务去发送一条短信,即使出现了上述的问题,可以选择把消息重新放到消息队列里等待处理
消息队列的好处:通过上述了例子,我们看到消息队列完成了一个异步解耦的过程,短信发送时我们只要保证短信发到消息队列成功就可以了,接下来就可以去做别的事情;其次,设计变得更简单,在下单的场景下,我们不用过多考虑发送短信的问题,交给消息队列管理就行了,可能短信发送会有延迟,但是保证了最终的一致性

消息队列特性

  • 业务无关,只做消息分发
  • FIFO,先投递先到达
  • 容灾:节点动态增删和消息持久化
  • 性能:吞吐量提升,系统内部通信效率提高

消息队列好处

  • 业务解耦
  • 最终一致性:主要是用记录和补偿的方式来处理;在做所有的不确定事情之前,先把事情记录下来,然后去做不确定的事,它的结果通常分为三种:成功,失败或者不确定;如果成功,我们就可以把记录的东西清理掉,对于失败和不确定,我们可以采用定时任务的方式把所有失败的事情重新做一遍直到成功为止
  • 广播:如果没有消息队列,每当一个新的业务接入时,我们都需要连接一个新接口;有了消息队列,我们只需要关系消息是否送到到消息队列,新接入的接口订阅相关的消息,自己去做处理就行了
  • 错峰与流控:利用消息队列,转储两个系统的通信内容,并在下游系统有能力处理这些消息的时候再处理这些消息

高并发之应用拆分思路

现在假设有一个股票系统如下:
股票系统

它的功能如图所示,通常在开市期间,股票行情数据量特别大,交易和开户等就稍微差一些,压力很小;如果此时股票行情功能出现了问题,可能会带来整个系统无法使用,此时应用拆分就显得很有必要,可以拆分成类似于交易中心,账户中心,行情中心,通知中心这样的服务;对于行情中心就可以采用扩容思路增加几台服务器来缓解压力。

应用拆分原则

  • 业务优先原则
  • 循序渐进:拆分和测试二者缺一不可,边拆分边测试
  • 可靠测试

微服务

  • 分布式服务组成的系统
  • 按照业务划分
  • 强服务个体,弱通信
  • 自动化运维
  • 具有高度的容错性
如何使用微服务
  • 客户端如何访问这些服务:API Gateway
  • 每个服务之间是如何通信的:消息队列
  • 如此多的服务如何实现:多个服务节点来做负载均衡
  • 服务挂了该如何解决:重试+限流+熔断+负载均衡+系统降级

高并发之应用限流思路

限制一段时间内允许通过的流量
常用的限流方法:

  • 限制总并发数
  • 限制瞬时的并发数
  • 限制时间窗口内的平均速率

限流的算法

  • 计数器法
  • 滑动窗口
  • 漏桶算法
  • 令牌桶算法
    具体可以看这篇文章:限流算法

高并发之服务降级与熔断思路

服务降级:当服务器压力剧增的时候,根据当前业务情况,对一些服务有策略的降级,以此缓解服务器的压力并保证大部分用户能得到正确的响应(给出一个默认的响应)。
服务熔断:指软件系统里由于某些原因,某些服务出现了过载的现象,为了防止造成整个系统故障,从而采用的一种保护措施

服务降级分类

  • 自动降级:1. 超时降级:配置好超时时间和超时重试次数,当超过这些值时降级 2. 失败次数:是一些不稳定的API,当失败调用次数达到一定的值之后自动降级 3.故障降级:比如要调用的远程服务挂掉了,可能是网络故障,http抛出异常的状态码等,这时可以直接降级,返回默认响应 4. 限流降级:当网络流量太大时利用限流来实现降级
  • 人工降级:当在某些秒杀业务中,我们可以将非核心服务降级,来保证核心服务的正常运行

服务降级需要考虑的问题

  • 哪些服务时核心服务,哪些服务是非核心服务
  • 哪些服务支持降级,哪些服务不支持降级
  • 降级策略是什么

高并发之数据库分库分表思路

关于数据库的分库分表可以看这篇文章:微服务架构下的数据库分库分表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容