21CTO社区导读:
本文为TEGTALK上的分享整理之内容,内容包罗腾讯云云硬盘产物(CBS)的背景体系的演进进程、核心技能以及大道至简的方法论。
什么是云硬盘?
云硬盘,CloudBlockService,简单来讲就是云上的硬盘。
云硬盘提供硬盘全部的本领:就像各人个人电脑中的硬盘,可以创建文件体系,可以存影戏,可以读写文件;乃至更多:由于云硬盘的数据存在云端,可以充实发挥云的本领,提供更丰富的功能,比方:快照,可以把云硬盘某一时候的数据做快照,当数据发生非常是,用户可以恣意的将数据回滚到这些快照时候。
用户只必要在腾讯云上购买一台云主机,就可以方便的利用腾讯云硬盘。
怎样实现云硬盘(弹性块存储)体系?
CBS云硬盘早先是依靠腾讯已有的3个分布式体系:TFS提供冷数据存储、TSSD提供热数据存储和CKV提供分布式锁,用这三个分布式体系做简化整合从而产生了CBS存储背景。
着实最开始CBS是将这3个分布式存储体系拼集在一起,并在前端封装一个iSCSI的块存储服务,这就是CBS1.0。
但是这个1.0的产物依靠3个巨大的分布式体系,IO链、运维支持链太长,体系痴肥,可用性极差;以是又把这3个分布式体系在代码层面做了简化整合,从而产生了CBS2.0。
CBS2.0的架构是怎样的?
起首,CBS2.0前端是一个接入集群:
Client,即客户端,让服务器出现一块硬盘;Proxy,即块装备的背景接入层,前端的云硬盘通过它才华将数据放到云端;Client和Proxy专业名次叫iSCSIinitiator和iSCSItarget,就像各人比力认识的CS布局一样;Master,集群总控节点,控制和和谐解个集群的工作。
同时后端是一个分布式存储集群:
就像经典的分布式存储体系架构,起首接入模块Access提供接入访问服务;存储模块Chunk负责数据存储;同样它也是一个分布式体系,同样也有一个总控节点,就是Master。
CBS2.0体系的运营状态怎样?
如今CBS2.0的体系在线上已经安全运行了好久;为数十万贸易客户提供服务;几十万块云硬盘在线上安全运营;存储规模百PB级别。
各人大概对这个规模没有概念,打个比方,假如把存储的数据用册本记录下来的话,那将耗尽地球上的丛林。这个规模还在快速增长。
腾讯云硬盘提供3种规格的产物:HDD介质的平凡云硬盘、HDD+SSD肴杂介质的高效云硬盘和高性能的SSD云硬盘;产物可靠性到达8个9的级别,在业界处于领先职位。
CBS2.0的运营过程中的困难?
起首是本钱题目:本钱是永恒的主题,特别是互联网海量存储中,任何的本钱优化都会带来巨大的经济收益,特别是规模快速增长阶段的腾讯云硬盘。
尚有一个题目是高性能场景的利用性题目:在前边的架构图里可以看到,腾讯云硬盘的数据哀求从用户到数据落地存储,颠末了两个集群、四个条理,每一层的网络延时在几十个微秒级别,而这和作为高性能场景的存储介质SSD的操纵时延在一个数量级,以是数据在访问路径上的耗时占比就太大了。
怎样去办理这些题目?
契合文章的主体:大道至简,做减法,简化体系,去掉接入层。
具体来说:上图左边是CBS2.0,也就是当前体系上规模运营的体系。它由接入体系和存储体系两个分布式集群构成;而腾讯云硬盘是个存储体系,接入是为了支持存储的存在而存在的。
以是最直接的想法,把接入层去掉,简化成两层架构,只保存Client客户端在主机上出现硬盘装备,Chunk模块提供数据落地存储,Master总控节点负责整集群的管理。
上图就是两层架构实现的CBS3.0的软件逻辑架构,和物理架构的三个节点对应:
Driver,对应物理架构中的Client模块,在软件实现上称为Driver。
Chunk,提供3副本存储的存储引擎。
Master,总控节点,多机互备提供高可用性。
两层架构的CBS3.0的技能困难?
一、数据构造:数据按什么样的数据布局存在背景分布式体系中。
二、数据路由:怎么确定命据存放的位置。
三、路由同步:路由信息怎么在集群节点之间同步。
四、数据多副本:作为一个高可靠性的存储体系,CBS三副本数据存储在差别机架的服务器上。
五、故障规复:海量存储中,硬件故障是一种常态,怎么在故障中快速规复服务和数据。
六、数据迁徙:装备非常时大概集群扩容时,怎么讲数据从一个服务器迁徙到另一个服务器。
这些都是分布式存储体系计划中常常碰到的困难,而和两层分布式架构关系最精密的是前三条,以是重点先容:数据构造、数据路由和路由同步。
数据构造:
先看看数据构造中最底子的题目:数据怎么分片,大概说数据的分片粒度应该多大。
假如数据分片粒度太小会那么路由信息太大,导致路由同步机遇群的负担太大,特别是在两层分布式架构中,路由必要同步给成千上万的Client节点,过大的路由信息对总控节点瓦解。
反过来假如数据分片太大,由于每个数据分片是分配给一个用户利用的,假如用户只写入4K数据,而分配一个1M的数据分片,那会造成存储体系空间的浪费,导致空间利用率低。
为了办理这个抵牾,CBS在数据构造上引入了假造分区Partition的概念。在物理上硬盘被分为多了固定巨细的Block,物理上每个Block属于一个硬盘,而在逻辑上又将多个Block构造为一个Partition,Block和硬盘的关系是固定的,但是Block和Partition的关系只是为了完成特定的功能需求而存在的。
数据路由:
基于Partition的数据构造方式,数据怎么路由呢?即数据怎么定位到存储的位置呢?
当前端数据访问时,它携带diskid、blockid大概说lba、snapid(快照id号),CBS体系将这3个参数通过同等性哈希,盘算出对应的Partition;而Partition和物理服务器、物理硬盘的对应关系是在集群初始化的时间设置的,如许前端的数据哀求就路由到了必要存储的物理位置,这就是CBS基于假造分区Partition的数据路由方式。
路由同步:
在两层架构中,没有接入节点,实际上会导致全部的Client节点都会成为接入节点,由于每一个Client都必要有路由信息举行数据访问;而接入节点成千上万,必要总控节点和成千上万的Client去同步巨大的信息,实际上总控节点会被压垮。
为了办理这个题目,CBS参考了一种懒汉办事的方法:只管少办事、晚办事、非做不可的时间再去做。
在CBS架构中:Master是个懒人,当Master总控节点发生路由变动的时间,原来必要将路由信息推送到全部的Driver模块,但是由于Master是个懒人,它只简单的把路由信息推送到Chunk模块;Chunk也是个懒人,Chunk收到路由推送之后,它也只是简单的将路由信息存到了本地;Driver发起数据访问的时间,Chunik检测IO中携带的路由版本和Chunk本身的路由版本是否同等;假如不同等,Chunk关照Driver必要路由更新,Chunk固然懒,但很负责;Driver收到存储节点的关照,它实行从存储节点Chunk更新路由;假如Chunk由于宕机或其他非常不能及时相应Driver的更新哀求,Driver就向Master发起路由更新哀求,Master具有最高的权势巨子,它将精确的路由信息反馈给你Driver,终极完成路由同步;整个路由推送到处表现懒人风格,谁都只管少办事、晚办事、非做不可的时间再去做,固然懒人没题目,但肯定要是一个负责人的懒人。
王银虎团队给这种懒人风格的路由推送算法起了个名字:lazy路由同步大概叫惰性路由同步。
用假造分区Partition的方式举行数据构造和路由,用lazy路由同步的算法举行路由同步,从而办理了两层架构中最关键的数据构造、数据路由、路由同步题目。
两层架构的结果怎么样?
两层架构的CBS3.0已经上线,上线后平凡云硬盘的本钱低落46%;两层架构的CBS3.0提供了一个同一的平台,不但支持通用的平凡云硬盘,也支持高性能场景的高效云硬盘和SSD云硬盘。
业界对比
CBS在自身发展的同时,也在紧跟业界发展动态,比方如今开源里比力盛行的ceph。
CBS和ceph都是两层架构的实现。但是CBS在性能方面要远高于ceph。
CBS支持风雅化运维,CBS有美满的监控告警体系,但CBS只提供了一个简单的通用运维体系,假如利用ceph,必要在运维体系方面有巨大的投入。
CBS在可控性方面也要远高于ceph,比方数据安全可控性,CBS在任何场景下都不能丢数据,数据安满是一种信奉,但是ceph在某些特定的故障场景,数据安满是没有办法包管的。
固然ceph也有很多值得我们鉴戒的东西:比方CBS是块存储平台(如今已经支持文件存储),而ceph一开始就是作为同一存储平台计划的,同时支持块存储、文件存储和对象存储;CBS的是镜像多副本存储,但是ceph在支持镜像多副本的同时,还支持纠删码,特别是一些本钱特别敏感的应用场景是很有上风的。
总结
CBS的发展进程就是一个“简”的过程;在最新的两层架构计划中,领会到以简致胜的真谛,不做太过计划,提供用户真正必要的功能;所谓大道至简,简化体系架构,提供高性能、高可靠性、易用的服务,和用户创造共赢。
作者:Yh,2010年参加腾讯,有12年的存储履历,在弹性块存储技能方面履历丰富。
我要评论