赞
踩
假定我们的架构是一个水平分层架构,那么,用户请求就会首先由网关层接收,再到业务逻辑层,再到数据访问层,然后,再逐级返回。如下:
这样的架构,称之为同步架构。
如果再任意两层之间引入一个第三方(通常是MQ),就可以将同步架构转换成异步架构。一般情况下,MQ会被插到业务层和数据层之间,或者是业务层与业务层之间(业务层本身会被细化拆分成多层),如下:
在异步架构的情况下,请求会先落到MQ,之后就会返回。从MQ到数据访问层,会有另外的线程去异步执行。
异步架构相比同步架构来说,其优势在于,请求可以更快地返回,也就意味着,时间段内可以处理更多的请求,系统的吞吐量会更大。其根本原因在于,写MQ要比写数据库快,且快得多。
这里,有个疑问:MQ在做消息持久化时,会读写磁盘,数据库也是读写磁盘。为什么MQ的IO就比数据库的IO快呢?
原因在于,对于MQ来说,数据通常由消息ID,消息体,发送者,接收者等信息组成,消息体本身对于MQ来说,是没有语义的。这就使得,在MQ中,消息是可以按照接收顺序,依次写入磁盘,也可以依次读取,即顺序IO。而在数据库中,数据体是有语义的,比如代表用户,代表商品等等。这就导致,在数据库中,绝大部分情况下是随机IO。随机IO的效率远远低于顺序IO,这就是数据库读写磁盘,慢于MQ读写磁盘的原因,也是异步架构的关键所在。
在机械硬盘
上写还是在固态硬盘
上写,尽管结论都是顺序写比随机写快,但是原因却是不一样的。
机械硬盘
我先介绍一下它的存储原理,机械硬盘的结构你可以想象成一个唱片机,它有一个旋转的盘片和一个能沿半径方向移动的磁头。处理读取和写入请求时,首先可以根据请求的开始地址算出要处理的数据在磁盘上的位置,之后要进行以下几步工作:
固态硬盘
理论上来说,它不应该存在明显的随机写与顺序写的速度差异,因为它就是一块支持随机寻址的存储芯片,没有寻道和旋转盘片的开销,但是随机写实际上还是比顺序写要慢。这是由于其存储介质闪存的一些特性导致的,简单来说:
垃圾回收算法
,用来更好地利用存储空间,同时减少数据迁移,保护闪存寿命。那么随机写显然比顺序写带来更大的碎片化
,从而带来更多的垃圾回收开销、数据迁移开销,自然就比顺序写要慢了。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。