TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
, `9 L+ k% j! [. Q* V, c+ _# l& P
! M$ I/ a: ]/ g& H) b3 ^+ X2 P; ~* I8 w. v
“长+重=厚”。比如传统说的协议栈很厚,就指这个意思,又长又重。厚影响时延,刚才那个例子。什么场景下在乎这个时延呢?比如OLTP,用什么场景呢?就是在线处理。这个场景就相当于你在淘宝里买了东西,点个购买,你恨不得马上我就成功,点个付款,马上成功,你总有人等着你,马上回来。这就是证明有人在等,赶快回来。如果点击购买,发给谁,半天才回来,你肯定不再在网上买东西了,因为三天两头超时你就会很不爽,所以时延很重要。
* Z' N" L6 `6 X1 P+ C: Q, U0 i 同步IO是典型的要求时延的场景,你发一遍IO以后,IO结果返回了,才发下一个IO。我IO调用下去以后,阻塞掉了,你不返回,我的代码就没法往下走,又被阻塞掉了。如果是同步IO,这个路又非常长,性能就非常差,但是,如果是异步IO,你流程长,我时延大没有关系,但是吞吐量还是可以上来的。因为我原端不断把IO往下发,IO不断的过去,你不断的接收,总体是有一个时延的,这个就看场景了。OLTP很在乎时延,对吞吐量要求不那么高。
8 n; e; B, L! x; S$ @6 L, k* x5 S( }- l( w4 f& F8 e
窄和浅就影响吞吐量,因为本来并发的变成串行了,一个一个来,最后吞吐量就上不去,OLAP场景最怕吞吐量低,比如大数据分析,因为没有人等着你马上把结果返回来,你这个任务下发下去,要分析谁谁谁,某处买个什么东西,哪个时间段干什么事,这就是定型的OLAP场景,不是点一个按纽,马上就知道结果的,可以等一分钟,这一分钟以内,你只要保证底层的吞吐量最大,完成的速度就快,它对时延反而没有什么要求。
9 \- c+ ^3 @* `$ |1 b8 W7 z+ }) r0 ]4 }
7 z7 |( `, o+ J
8 m9 E2 f; }0 _) T/ v; U
我们看看传统IO协议栈问题很严重,对于机械盘来讲,是没有问题的,你算算就可以了。协议栈引入比如0.01毫秒的时延,一个IO下去,一直到发给磁盘,出了这台机器,耗了0.01毫秒,别看这么大的带宽执行。机械盘执行这个IO,平均需要10毫秒,这么一比,开销就这么点,根本没有问题。但是,对于它就有问题了。SSD执行平均耗费比如10微秒,基本50%的开销了。所以,这个IO下去一半的时间在路上,一半的时间执行,这个效率非常差。所以,要着手去优化这个协议栈。 |
1 {8 W0 U. D6 W4 [" u |
|