浅谈数据容灾体系中带宽、推迟、并发流、功率等(摘自《鬼话存储2》)51CTO博客 - AG环亚娱乐

浅谈数据容灾体系中带宽、推迟、并发流、功率等(摘自《鬼话存储2》)51CTO博客

2019年03月29日10时16分21秒 | 作者: 笑容 | 标签: 数据,带宽,推迟 | 浏览: 580

本文节选自行将出书的《鬼话存储2》的第17.9一节,出书社保存版权信息。先发出来让咱们先睹为快。一起欢迎提出过错和主张,谢谢!

17.9 带宽、推迟及其影响
        100Mb/s,这个速率意味着什么呢?有人说,每秒能够传输10MB的数据(8/10b 编码下)。通常情况下,这种说法是对的。可是假如发送方与接收方之间的间隔变得很远,比方数百公里乃至一千公里,那么这种说法,你会发现底子不成立。咱们现在就来剖析一下。
        咱们知道,光或许电信号的传输是有固定速度的,即近似每秒30万公里(其实远未到达,光在光缆中的传达速率只要20万公里每秒,电信号在电缆中的传达速率则近似21万公里每秒。基本上是光在真空或许空气中速率的三分之二)。假如两点之间间隔为1000公里,那么信号传一个来回(传到对端,然后对端处以ACK应对)所消耗的时刻便是1000÷300000×2≈6.6ms。什么概念呢?也便是你想把1bit的数据传输到一千公里之外的当地,那么至少你要消耗6.6ms。那么传输10bit、100bit、1Kb、100Mb,需求多长时刻呢?首要想到的是,至少比传1bit要慢。究竟需求多长时刻?来看这个公式:传输来回时刻=(数据量÷链路速率×2)+(传输间隔÷光速×2)。数据在传输的时分,是首要会被通过编码电路将数据串行化编码然后放到电路或许光路上传输,这个编码速率,便是链路带宽,100Mb/s的带宽与1000Mb/s的带宽,差异就在于后者在单位时刻内能够编码相当于前者10倍量的数据,可是不论链路带宽有多少,数据被编码之后,数据在电路上的传输所消耗的时刻对各种速率的链路来讲都是相同的,由于传输的时分现已与链路编码速率(带宽)无关了,传输到对方之后,对方还需求解码(所以编码所消耗的时刻也要乘以2),相同也是取决于链路带宽。
        所以,当两点之间传输间隔很近的时分,比方1千米,那么传输时延≈0.0066ms,基本上能够疏忽了。所以那个公式变为:传输时刻=(数据量÷链路速率)。所以说,链路速率越大,只代表其编码速度越快,而不代表传输速度越快,传输速度是固定的,都是光速。再打个比方,有一辆长途车,50个人排队上车,排队上车需求120s,轿车行进需求60000s,50个人排队下车需求120s。50个人被排队送上车,就比方数据被串行编码放到电路上传输,轿车行进相当于电路信号从一端传递到另一端,50个人被排队下车,就比方对端的解码进程了,可是到此还没有完毕,当轿车抵达意图地之后,司机有必要在回来起点进行报信,这就比方TCP协议在收到数据之后发送给源端的ACK应对相同。能够司机空着车跑回去报信(独自发送ACK应对包),也能够在意图端捎带着一些回程客人回来去报信(TCP能够在反向流量中夹藏ACK应对信息以进步功率)。可是在容灾体系中,数据总是从源端流向意图端的,或许在灾祸回切的时分从意图端流向源端的,总归只要一个方向有实体数据活动,那么此刻回程ACK都是独立的ACK应对包(独立ACK包很小所以其编解码所消耗的时刻也疏忽掉即可)。
        别的,一辆轿车能承载的人数是有限的,也便是说,得一趟一趟的拉,这就比方TCP每次所发送的最大数据长度,也便是TCP的滑动窗口长度,TCP得分批把用户数据传送出去,每次的发送量有必要小于TCP滑动窗口的长度,每次传输之后均需求对方发送一个ACK(这儿不考虑ACK兼并等特别情况)。每批数据尽管到了底层或许被切分,比方TCP的MSS(Max Segment Size)切片,一般等于底层链路的MTU,底层链路再用MTU的值来切片,可是这些底层的切片在被传输到对端之后,并不需求对端底层协议的应对,只要对端的TCP在完好的收到TCP发送的一批数据之后,才会应对。
        那么咱们来算算在相隔1000千米的两点之间,每秒究竟能够传送多少个来回:1000ms÷6.6ms=151个来回。假如依照TCP的典型滑动窗口即16KB来核算的话(每次发送16KB数据然后就等候应对,不考虑推迟应对或许兼并应对等特别情况),那么每秒吞吐量仅为151×16KB=2416KB,也便是2.4MB每秒。夸大么?
当然,上述算式是疏忽了编解码所消耗的时刻以及整个链路上各种中继、转发或许协议转化设备所带来的处理推迟,假如算上这两者,则吞吐量会更低。愈加精确的实践数据传输吞吐量核算公式为V=TCP Window Size÷2(TCP Window Size÷链路带宽+间隔÷光速+链路设备处理推迟)。总归,间隔越远,实践传输吞吐量就越低,在实践运用中必定要有底。

当间隔很短时,能够疏忽间隔带来的推迟,此刻明显谁带宽高谁传的就快;而间隔很长时,此刻带宽再高也杯水车薪,由于大头都被间隔给耗掉了。别的,即便是底层链路的带宽相同,间隔也相同的情况下,运用不同的协议进行传输,所带来的推迟也是不同的。可是想象一下,不论链路跨过了多长的间隔,假如这条链路上永久都有数据在传着,那么发送方与接收方就能够以链路带宽的原生速率来收发信息,只不过有时延,就像卫星电视那样,此刻传输速率并不会打折,假如做到这一点,那么关于一个容灾体系来讲是非常好的工作,充其量只会丢掉几毫秒之内的数据。可是,现实却并非如此。超远间隔传输,怕的便是数据流的卡壳,卡一次两次没关系,频频卡壳,那就底子无法运用起链路带宽了。这就比方磁盘寻道操作相同,本来磁头能以很高的速度读写盘片上的数据,可是没方法,有必要换道,这一换道,外部速率骤降。可巧的是,15K转每秒的SAS盘其均匀寻道时刻为5.5ms,而一千公里间隔的传输时延为6.6ms,这两个值却是挨近并且还挺有意思。

传输协议无法防止“卡壳”,由于总要传一段歇一段来等候对方吱个声,看看收到没有。比方TCP,这样就无缘无故的糟蹋了底层链路时隙;再加上长间隔下的高传输推迟,一来一回更糟蹋了很多时刻,所以会呈现上文中的即便是千兆链路下,1000公里的间隔每秒也只能传输2.4MB的理论值,实践值将会更低了。

别的,假如在长间隔下运用比方iSCSI等协议的话,那将更是一笔惊人的糟蹋。咱们知道SCSI层自身就有传输保障机制,人家自己有ACK那一套,而底层TCP再来这一套明显就显得多此一举了。按理说有了SCSI层的传输保障机制,其基层协议栈就应该是个无状况的相似链路层协议了,应该直接将数据一股脑传曩昔,可是现实是它非得传一段,停一段,等候对方说个OK,然后再传再停,慢慢腾腾;不仅如此,再加上SCSI也要传传停停,那便是肆无忌惮。所以长间隔上跑比方FCP、iSCSI等这种SCSI协议与FC/TCPIP协议的合体协议,将会是个梦魇。

下降不必要的ACK数量,添加滑动窗口,这些都是广域网加快的技能,对传输速率会有必定程度的进步。可是终究解决方法,仍是要尽量缩短两地间隔,或许开发专用优化的协议了。   

    提到私有协议,这儿就打开讲一下。上述一切场景,均树立在两点之间只要单TCP衔接,即单流的场景下,此刻的链路带宽当然无法被充分运用,并且也提过,假如底层链路一刻也不闲着,那么其有用带宽就能够更高的被运用,怎么办呢?明显,通过进步并发衔接的数量,就能够充分运用起底层链路的时隙。关于这个思维,在磁盘阵列控制器怎么充分运用起后端FCAL环路的带宽方面也是相似的,咱们能够阅览附录1中的第5问。
    咱们知道iSCSI里有个Multi Connection Per Session的概念,运用Microsoft的软iSCSI Initiator的话,里边就能够进行设置,让Initiator端能够一起与iSCSI Target端树立多条并发的TCP衔接,然后进步远间隔传输时的功率,当然这个特性需求iSCSI Target端的支撑合作。可是关于FCP来讲,就没有这种特别考虑的并发衔接规划了。通过考量规划的可并发衔接的私有协议能够极大进步长途数据传输的功率。

     已然提到了多流并发,那么干脆就再打开一些。关于一个异步形式的数据容灾仿制体系,最最少要确保的是灾备端数据的一致性,而数据一致性又有多个层面,最底层的一致性便是所谓“时序一致性”,灾备端最少要确保每个IO都依照其在源端被履行的次序刷入灾备端数据会集。假如运用单流TCPIP则能够确保时序,可是传输功率很低;可是在多流并发的情况下,由于本来流与流之间是无相关的,或许在源端先履行的IO被传送到对端之后却被后履行了,此刻就需求引进更杂乱的逻辑来确保同步曩昔的数据被依照次序履行。这儿又有两种方法能够考虑,一种是确保RPO,在多个流之间保护强一致性,将多个流强制相关以确保收发次序,此刻灾备端能够立行将收到的IO数据刷入底层数据集;第二种则是献身RPO,主备站点之间之间选用端到端的一致性组技能,在数据批与数据批之间确保时序性,而不是每个IO之间。此刻灾备端不能在收到数据后当即刷入,比方等候一批数据悉数收到之后才能够刷入。这么做尽管或许导致丢掉一批数据而不是几个IO,可是能够便利的确保数据一致性。本文节选自没有出书的《鬼话存储2》,发出来让咱们先睹为快。一起欢迎提出过错和主张,谢谢!

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章