发表主题 回复主题
  • 23565阅读
  • 10回复

[分享]两万随机IOPS的SSD云盘是如何炼成的?

发帖
105
云币
259
两万随机IOPS的SSD云盘是如何炼成的?
ozUsp[W>  
u"5 hlccH  
1.        引言 Aa!#=V1d  
        经过几年的发展,越来越多的用户认可云计算的弹性、便捷、低成本等优势。云计算不但帮助用户减少IT基础设施的投入、而且帮助用户提升业务部署效率;因此,我们能看到越来越多的用户将其核心业务搬上云。由于核心业务涉及到大量的数据存取,存储性能的好坏将直接决定用户能否将其核心业务搬到云上。 Q&`if O  
IfzW%UL  
        为了解决用户核心业务上云的诉求,阿里推出SSD云盘,最大提供20000随机读写IOPS、256MBps的存储性能,足以支持I/O密集型核心业务应用对I/O性能的诉求、同时具有极高的数据可靠性。 c.{t +OR  
zL=PxFw0  
        那么,如何理解存储性能的快慢?存储性能好比交通运输量。比如A-B两地之间由公路相连,B地有仓库,A不定时向B发货(写IO)或取货(读IO);A与B之间运输货物量的多少由多种因素影响,比如A-B之间的公路长度、运输车辆种类(跑车装货量远不上大卡车、但速度更快)、运输车辆数量、B仓库容量、B仓库存取货的效率等等;在相同公路长度及时间内,十辆大卡车肯定比十辆小轿车运输的货物数量要多得多,但是跑车肯定比大卡车的运输次数多得多; z;lWr(-x  
(_nU}<y_i  
/D,<2>o  
#4Ltw ,b^  
2.        初识存储性能 U}c05GiQw  
      阿里云的SSD云盘能为I/O密集型业务具体提供哪些性能优化呢?在介绍SSD云盘的关键实现技术之前,先介绍存储性能的基本概念。         |'!9mvt=  
  • 块大小(block size):主机每次从存储侧读取数据块的大小,一般以KB为单位;以数据库为例,Mysql以8KB读写块大小为主、Oracle以16KB读写块大小为主、Mongodb以4KB读写块大小为主;不同的业务应用,其读写块大小有较大的差异。不同的块大小,类似于不同的运输车辆类型; cNG`-+U'  
    n_eN|m?@  
  • 队列深度(queue depth):主机每次向存储发送I/O读写操作的并发数;通常情况下,硬盘有个队列存放正在等待处理的IO请求,当前正在处理的IO操作完成后,从队列中取一个IO请求来执行IO操作;队列深度越大,越可以让硬盘一直不断工作,减少硬盘的空闲时间;不同的队列深度,类似于多辆车辆运输货物;显然,多辆车运输的货物量肯定大于一辆车运输的货物量;同理队列深度越大,IO性能越好; 7R#$Hm  
    2'-o'z<  
  • 同/异步IO:同步IO时,主机每次向存储发送一个IO请求然后进入等待状态,主机收到响应后再发送下一个IO请求;异步IO时,主机每次向存储发送多个IO请求;相比于交通运输,同步IO类似于每次只有一辆车运输货物,等当前车辆回来后再发下一辆车;异步IO类似于每次派多辆车前往仓库运输货物; g93H l&  
    Rc#c^F<  
  • IOPS(I/O Per Second):主机每秒从存储侧存取数据的IO次数;IOPS越大表示存储性能越好,同时IOPS受多种因素影响,比如块大小、队列深度、同/异步io等;拿交通运输做类比,IOPS相当于单位时间内车辆运输的次数;显然,速度快的跑车相比速度慢的大卡车在单位时间内运输的次数要多得多; k.?@qCs[  
    19*D*dkBR  
  • BPS(Bandwidth Per Second):主机每秒从存储侧存取数据量的大小,通常以MBps为单位,BPS=块大小*IOPS;同理,BPS受块大小、队列深度、同/异步IO等因素影响。 ;t \C!A6  
    Jk_ }y  
  • 时延(latency):主机每次从存储侧存取数据的平均时间,通常以毫秒(ms)为单位;就像交通运输一样,在相同公路条件下完成从A->B->A,跑车所需的时间肯定少于大卡车;同理,在相同的网络条件下,小的block size相比大的block size完成一次I/O操作,所需的时间肯定要小得多;如果是多并发的I/O访问,时延还与存储侧处理I/O请求的响应速度有关,不同硬件的I/O响应时间不同;就好比从A地同时派十辆车往B地取货,由于B地仓库只能串行工作,一辆车装完货后才能装下一辆,由于不同车所能装的货物量不同,因此不同车装货所需的时间也不同,这十辆车取完一车货所需要的每车平均时间肯定大于一辆车取完一车货的时间;
+?ilTU  
         从以上信息可看到,影响存储性能有多种因素,最终体现存储性能好坏的关键指标是IOPS、BPS、时延。 Ry`Y +  
~mk>9Gp  
         在运输车的速度、装货容量、车辆数一定的情况下,单位时间内从A-B之间运输货物量取决于公路路程长度、公路畅通程度、公路限速上限、B地仓库存取货的效率,同时要考虑运输车辆在路途中出现爆胎等异常情况导致运输效率下降的问题;在路程长度较少的情况下花在路途的时间较短 ,需要重点提升B地仓库存取货效率的问题。 1+9}Xnxb  
由于块大小、同/异步IO、并发度往往是业务应用本身特点决定的,存储性能的提升要从主机与存储的网络通道条件、存储侧并行处理I/O请求的效率、主机与存储之间的I/O路径长度等方面做优化。 wj-z;YCV  
Q+zy\T  
u$ a7  
|`Q2K9'4bL  
3.        关键实现技术 -^WW7 g`  
        我们选择基于纯SSD硬盘、双万兆网络的服务器作为基础条件,来构建SSD云盘这个高性能、高可靠的存储产品。由于采用双万兆网络,虚拟机与存储之间的网络通道能力将不会成为存储I/O性能的瓶颈。因此,SSD云盘重点是在优化主机与存储之间的I/O路径长度、存储侧并行处理I/O请求的效率。 VL8yL`~zc.  
盘古是一个分布式文件系统,在整个阿里云计算平台——“飞天”中负责数据存储的任务,为虚拟机提供稳定、高效、可靠的随机访问能力。盘古软件运行在虚拟化hypervisor层,每台物理服务器的CPU资源固定,给盘古可用的CPU只有8个core,这样有更多CPU资源给用户虚拟机使用。因此,SSD云盘所有的优化都在CPU资源非常有限的情况下对盘古进行优化。 XpT+xv1`;  
盘古采用client、ChunkServer、Master的架构;Master负责集群存储空间的分配与管理;Client从Master拿到分配的空间,将数据写三份到三个不同的ChunkServer,ChunkServer负责本机的数据存取; 0xzS9  
nD}CQ_C  
J9q[u[QZ9O  
图1 { v#wU  
j7 \y1$w  
3.1.        高性能 U@"f(YL+"  
3.1.1.                RPC及线程池优化 i ?]`9z  
图2 (dQsR sA  
        上图是一张简单的ChunkServer端I/O处理流程图,网络IO线程收到数据--->业务逻辑处理线程--->同步磁盘IO线程池写数据落盘;我们都知道在分布式存储中网络IO与磁盘IO性能至关重要,RPC是最频繁使用到的通信模块,根据2/8原则,首先得优化调用最频繁的模块;优化前的ChunkServer使用KRPC通信,小包性能大概不到20万;经过优化,使用的ERPC小包性能达到50万;在20万相同性能的情况下,ERPC对CPU的消耗相比KRPC减少60%。 m?`?T   
*5q_fO  
&m{vLw  
         ChunkServer磁盘IO是一组同步线程,相对于libaio,同步io消耗更多的CPU,压满一块SSD性能需要多条线程,而一条异步线程可以轻松压满SSD性能;由于盘古可用的CPU资源有限,所以我们重构了原有同步IO的流程,更改为异步线程处理。 KpfQ=~'  
7qEc9S@  
       经过上面两步优化,单物理机在E2E中的存储性能瞬间从4万提升至8万。拿前面的B仓库做比较,相当于进B仓库的效率提升2倍; a4x(lx&  
Cd'K~Ch3  
p$}1V2h;  
3.1.2.        内存拷贝优化 %Z { 7*jtE  
        通过工具分析,我们看到ChunkServer内部三个模块之间的处理逻辑涉及到两次模块间的内存拷贝,这些内存拷贝动作会占用相当的CPU资源(因为每个I/O请求都涉及到内存拷贝,在大量I/O请求时内存拷贝动作将相当频繁);通过优化,将数据结构透传到上层就可以在用户态做到zero copy。通过单机的E2E测试,该优化带来0.5个core的CPU消耗降低。 R[f@g;h  
简单点说,在仓库中处理货物,需要三个人来分工处理,当a在己的工作台将货物处理完后搬到b的工作台、b处理完成后将货物搬到c的工作台,这过程中有两次搬迁动作,如果使用自动化的传送带就可以免去搬迁动作,从而提高a/b/c人员的工作效率; LHHDD\X   
ySNXjH Q=  
3.1.3.        异常情况下的高性能优化 ebIRXUF}>  
图3 LseS8F/q  
        当client发起对一个chunk(Chunkserver上的一块存储空间)的写操作时,3份replica都会收到chunk写的请求。因为网路、硬盘等因素,client可能会发现1个或多个replica出现了超时的情况。此时,client不会贸然丢弃超时的replica,它会对超时的replica采用一种名为Chase的机制进行“挽救”,以促进IO的稳定性,同时确保数据的可靠性。 }<mK79m  
C0[ Z>$  
                      图4                                                图5 r"=6s/q7  
        如图4,如果Chase机制无法“挽救”超时的replica,该超时replica只能被丢弃,这时client会另寻正常的chunkserver替代超时的replica,新replica需要从老的正常replica上拷贝该chunk的原有数据,如图5。 xL\R-H^c]  
-"/l)1ox,  
J:G~9~V^  
        简单点说,车辆运输过程中如果公路上出现事故导致车速变慢或者堵塞,你需要有一定的时间来判断只是暂时的变慢或堵塞,还是长时间的堵塞;如果是暂时的,那可以先不管;如果判断认为是永久或很长时间变慢堵塞,这时要考虑重新规划一条路线,避免耽误运输计划。 M:cW/&ZJ  
3mH(@ -OA  
3.2.        高可靠 {O (@}  
        盘古分布式文件系统中,master会为chase失败的chunk分配新的chunkserver,以确保chunk的拷贝数目达到3份(保证数据的可靠性,因为硬件或网络故障不可避免)。新的chunkserver需要从老的Normal Replica上拷贝chunk数据,在此过程中,新的chunkserver称为“目的端”,老的NormalReplica称为“源端”,PullModeReplication机制负责完成源端和目的端之间的数据拷贝。 +JPHQx'W  
"Is0:au+?}  
k/.a yLq  
       PullModeReplication机制称为“拉”模式,它是在原有的“推”模式的replication基础上提出的。它能够消除Replication时源端高压力写入产生的数据重复复制及源端流控或hang io对性能的影响,并且支持多路并发读。 cB|Rj}40v  
*S] K@g  
                 图6                                                                                                图7 [hXnw'Im/  
        推模式的数据复制指client向源端发起复制请求,源端从本地读取数据,然后向目的端写数据,在源端有新数据写入时,需要继续将新写入的数据写入目的端。所以,推模式的数据复制网络传输的数据量包括已有Chunk的数据和数据复制过程中新写入的数据。 w0Y V87  
Erq% Ck(  
taqmtXU=(  
      拉模式的数据复制指client向目的端发起复制请求,目的端维护需要读取的数据段Range,并通过多路并发的方式向源端读取Range的数据,写入本地Chunk中。在有新数据写入时,同时写入源端和目的端,当目的端需要读取的Range被新写入的数据覆盖时,则被覆盖的Range不再需要从源端读取,减少读取数据的数据量。所以,拉模式的数据复制网络传输的数据量为已有Chunk的数据减去数据复制过程中被新写入的数据覆盖的数据量。 ?b3({P  
q !Nb-O{  
Y^9b>H\2  
      所以,拉模式的数据复制量小于推模式,这不仅减小了replication对网络的开销,而且使replication能够更快地执行。 Pef$-3aP>E  
$\vTiS'  
e2vL UlL8  
4.        性能测试 ))eQZ3ap9  
4.1.        Sysbench模拟OLTP N!YjMx)P  
用sysbench模拟OLTP性能测试,测试集为10000000条记录,TPS可达869、QPS达18265,单盘足以支撑每秒上千人的在线同时交易。 0mYKzJi  
N]7#Q.(~  
'o% .Q x  
4.2.        FIO压测I/O性能 pPnJf{  
4.2.1.        写吞吐(BPS)性能 Xi"<'E3_  
;.#l[  
j6r.HYX!  
4.2.2.        读吞吐(BPS)性能 ~2M+Me  
k!= jO#)Rd  
tk~<tqMq  
3{R7y  
4.2.3.        随机读IOPS :9f/d;Mo3  
T<S_C$O  
+ -OnO7f  
6Cz%i 6)  
4.2.4.        随机写IOPS O.^1r  
@o4n!Ip2x/  
i)mQ?Y#o  
因为写三份数据,性能有10%左右的抖动属于正常情况。 0w<G)p~%n  
rIo)'L$uU  
o.M.zkP a  
rWnZIt"  
5.        总结 Y.}8lh eH  
本文简单的介绍了基于纯SSD硬盘及双万兆网络的服务器,通过优化飞天-盘古分布式存储来提供高性能、高可靠的随机存储--SSD云盘。 { ((|IvP`  
l>iE1`iL<  
(Aw!K`0Y1  
G'0]m-)dw  
----------------------------------------------------------------------------------------------------------------------------------------- OF/DI)j3  
【SSD云盘+ECS(IO优化)】 6月8日起免费公测! '>0rp\jC  
0Er;l|  
自SSD云盘2015.5.4发布以来,受到广大用户的踊跃参与,由于大量用户反馈需要更多的时间来验证其业务上SSD云盘及I/O优化ECS实例的效果,因此我们决定将SSD云盘及I/O优化ECS实例的免费公测截止日延长到7月30日;         同时,代金券返还策略保持不变(单个账号最大返还1000元),代金券返还从公测结束后7月31日开始返还,15个工作日内返还完毕。
[ 此帖被pittman在2015-07-22 11:11重新编辑 ]
级别: 程序猿
发帖
429
云币
585
只看该作者 沙发  发表于: 2015-07-16
不是说15号收费的吗 z s Qo$p  
怎么又没消息了
发帖
105
云币
259
只看该作者 板凳  发表于: 2015-07-16
回 1楼(泽晨) 的帖子
qOCJTOg7  
云盘收费延期到7月30日了: 5G}6;UY  
?9j{V7h  
自SSD云盘2015.5.4发布以来,受到广大用户的踊跃参与,由于大量用户反馈需要更多的时间来验证其业务上SSD云盘及I/O优化ECS实例的效果,因此我们决定将SSD云盘及I/O优化ECS实例的免费公测截止日延长到7月30日;       iY[+Ywh  
HCA{pR`  
查看详情:http://bbs.aliyun.com/read/241167.html `Y?t@dd  
级别: 科学怪人
发帖
6260
云币
9938

只看该作者 地板  发表于: 2015-07-16
回 1楼(泽晨) 的帖子
你怎么那么想送钱给阿里
级别: 码农
发帖
107
云币
217
只看该作者 4楼 发表于: 2015-07-20
Re两万随机IOPS的SSD云盘是如何炼成的?
试试
级别: 码农
发帖
117
云币
134
只看该作者 5楼 发表于: 2015-07-22
  
级别: 科学怪人
发帖
9309
云币
3536
只看该作者 6楼 发表于: 2015-07-22
SSD强大很多啊
级别: 新人
发帖
1
云币
1
只看该作者 7楼 发表于: 2015-07-23
Re两万随机IOPS的SSD云盘是如何炼成的?
用了才知道他的好 X2dc\v.x  
级别: 架构狮
发帖
1477
云币
1758
只看该作者 8楼 发表于: 2015-07-23
回 2楼(pittman) 的帖子
正式开售迟点没关系,重要是解决测试时候的问题,嘿嘿,加油
级别: 小白
发帖
48
云币
55
只看该作者 9楼 发表于: 2015-07-24
Re两万随机IOPS的SSD云盘是如何炼成的?
级别: 小白
发帖
10
云币
10
只看该作者 10楼 发表于: 2015-07-26
Re两万随机IOPS的SSD云盘是如何炼成的?
期待中,希望阿里云的产品越来越好
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个