架构社区互联网系统架构与应用架构

高并发解决方案

2018-07-14  本文已影响4人  没睡醒的鱼

高并发之扩容思路

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

数据库扩容

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

高并发之缓存思路

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

缓存命中率的影响因素

高并发下缓存常见问题

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

高并发之消息队列思路

一个简单的消息队列模型

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

消息队列特性

消息队列好处

高并发之应用拆分思路

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

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

应用拆分原则

微服务

如何使用微服务

高并发之应用限流思路

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

限流的算法

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

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

服务降级分类

服务降级需要考虑的问题

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

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

上一篇下一篇

猜你喜欢

热点阅读