admin管理员组

文章数量:1570208

怎样衡量一个存储系统的好坏呢?以下指标是专业人员常用的指标。

持久性(Durability)

在存储行业的从业人士看来,数据是有生命的,用户将数据托付给我们,我们就要对用户数据的生命负责。存储业务不赚钱可以不做,但只要做存储就要对数据持久性负责。

这就像航空公司必须将飞行安全置于最高优先级一样。哪怕是飞机晚点、空姐服务不好,也千万不能飞机掉下来。航空公司哪怕已经严重亏损,只要航班还在飞,该做的飞机养护就必须做,该配两个机长就一个都不能少,发现任何影响飞行安全的故障宁愿赔款也不能飞。总之,飞行安全是最高优先级。

同样,存储产品、技术、服务的最高优先级就是数据持久性,要对用户数据的生命负责。

“对用户数据的生命负责”这句话不能只停留在口头上,要落实在行动上。一个存储系统,第一重要的就是要设计一套数据持久性保障性机制,使得存储用户的数据随时处于可靠的保障之中,这样才能保证数据不丢,而不是听天由命。换句话说,凡是没有设计数据持久性保障机制的存储系统,都是还没入门的非专业系统。

数据持久性一般用达到多少个9表示,用如下公式计算:

Durability=100%-AFR

其中AFR(Annual Failure Rates)是年故障率,AFR=1%时,数据持久性为99%,也就是2个9;AFR=0.1%时,数据持久性为99.9%,也就是3个9。每多1个9,持久性增加10倍。

一般桌面级存储系统可以达到2个9的持久性,企业级存储(RAID5/RAID6)可以达到4到7个9的持久性,分布式存储(例如Ceph/HDFS)可以达到11个9的持久性,WAN存储(例如YTFS)可以达到15个9以上的数据持久性。最近大热的IPFS由于缺乏数据持久性保障机制,数据持久性还停留在听天由命的阶段,热数据持久性很高,冷数据持久性等同于桌面级存储,总体大约在2到3个9的样子。

安全性(Security)

数据安全性的意思是数据不被人偷,即未经授权的人员拿不到数据,或者即使拿到也只能得到数据密文,无法破译出数据明文。

对中心化存储系统来说,安全性并不是必备特性,因为存储系统完全处于其所有者的管控之中,并且可以通过网络安全措施(如防火墙)和系统安全措施(如OS安全)来防止被外人偷。尽管网络安全措施和系统安全措施不如数据安全措施可靠,但也能满足大多数应用场景的需求,所以存储系统一般不考虑数据安全机制的设计,最多增加一个数据加密接口。

对于WAN存储系统来说,情况就完全不一样了。不仅数据在公网上传输随时可能会被截获,而且存储节点极为分散,很多都是非常轻量级的边缘节点,不可能对每个存储节点采取高强度的网络安全和系统安全措施。这时最好的方法就是像比特币一样干脆放弃网络安全和系统安全措施,完全依靠基于密码学的数据安全措施。

存储系统如果没有内生的安全性保障机制,依靠外在的安全产品,是很难做好安全性的。最好是在系统原生就设计了完备的数据安全体系,可以实现全程加密、无缝加密、零知识加密,并自带完备的密钥管理系统,可以全程管控所存储数据的全生命周期。

包括传统分布式存储在内的中心化存储大都没有任何数据安全机制,少数系统有非常不完备的数据安全机制,例如只有简单的加密,没有密钥管理系统。在WAN存储系统中,YTFS有内生的、完备的数据安全体系,但IPFS也没有数据安全体系。

可用性(Availability)

服务可用性是一个专业术语,学术上的定义是“在指定时间内返回操作结果”,通俗地说就是不宕机。

服务可用性和数据持久性是不同的指标。打个比方来说,你去ATM机取钱,结果说银行电脑故障,今天不能取钱,这就是服务可用性出现问题了。但如果在这次故障之后,你在银行账上的钱都没了,原本你有10万元,但变成零了,那就是数据持久性出现问题了。

服务可用性一般也是用多少个9来衡量。例如,4个9(99.99%)就是每年宕机不超过1小时。

大型云服务公司的可用性一般是按照4个9设计但是承诺3个9的SLA(Service Level Agreement,服务等级协议)。WAN存储系统在可用性方面有天生的优势,虽然没有严格的测试数据,但理论上来说至少可以提高几个数量级。

一致性(Consistency)

为了保证数据持久性,数据都要做冗余存储。数据一致性就是冗余的数据之间是一致的还是互相冲突的。典型场景就是在多副本冗余方案中,一个文件的多个副本是相同的还是不同的。

一致性对数据持久性是很重要的。如果不能保证数据一致性,当不同副本的数据冲突的时候,虽然其中有一个副本的数据是正确的,但因为不知道哪个是正确的,存在正确数据被淘汰、错误数据被保留的风险,数据持久性受到威胁;如果不淘汰不一致数据,那在读取的时候就可能读到错误的数据,而且当存放正确数据的介质出现故障的时候,也无法从其它副本恢复数据(因为其它副本保存的是错误的数据)。

数据一致性又可以进一步细分为强一致性、顺序一致性、弱一致性、最终一致性、会话一致性、单调读一致性、单调写一致性等:

  1. 强一致性
    也称为原子一致性、线性一致性。强一致性可以理解为在任意时刻,所有节点中的文件是相同的,任何一次读都能读到该文件的最近一次写的数据。
  2. 顺序一致性
    任何一次读都能读到所读文件最近一次写的数据,系统的所有进程的顺序一致,而且是合理的。即不需要和全局时钟下的顺序一致,错的话一起错,对的话一起对。
  3. 弱一致性
    未能达到强一致性的要求,但在一个较低要求下也能实现一定程度的一致性,称为弱一致性。
  4. 最终一致性
    最终一致性是弱一致性的一种常见实现方式。最终一致性不保证每次写数据都能马上更新所有副本,但保证在一个特定的时间后用户最终能够读取到最新的数据。如果该文件之后不再写入新数据,在一段时间后,各节点(或各副本)间的数据会最终达到一致状态。但是如果该文件不断地写入新数据,则不同节点(副本)的数据总是在向趋同的方向变化,却可能一直都不能达到完全相同。
  5. 会话一致性
    在一个存储应用访问存储系统的一个会话(session,可以视为两个系统之间交互的一个通道)中,可以保证读己之所写”一致性,即一个进程写一个文件后,它再读该文件时总是能读到最新的数据,绝不会看到旧数据。但是当该会话终止(视为该交互通道关闭)后,再读该文件就需要建立新的会话,不能保证一定会读到最新数据了。
  6. 单调读一致性
    如果一个应用已经读到一个文件的新数据,那么同一应用后续再读都不会再读到旧数据。
  7. 单调写一致性
    存储系统保证来自同一个应用的写操作在任何节点(或副本)都是严格按照顺序执行的。一般说来,单调写一致性总是要保证的,否则对应用层来说就非常难了。
  8. 对象一致性
    这是YTFS提出的一种适用于对象存储的一致性方案。在该方案中,不保证一个对象存储过程中的一致性,但是可以保证一个对象存储完成后的一致性。换句话说,在写一个文件的过程中不保证一致性,但是写完文件关闭后,能够保证一致性。
  9. 协同一致性
    存储应用与存储系统协同,以取得一致性。其它的数据一致性方案对存储应用来说都是一个黑洞,存储应用只能去了解存储系统的数据一致性方案,然后去猜测在什么情况下可以实现数据一致性。YTFS提出一种协同一致性方案,让存储应用可以感知底层的数据一致性状态,例如什么时候完成写确认,什么时候完成读一致性,这些状态都可以被存储应用感知到,从而无需猜测就能明确地知道是否可以获得一致性结果,在此之前读出的数据是不确定的,。

看到这里,很多人可能会问:难道往一个文件写了数据后,马上再读能读到新数据不是理所当然的吗?这个要求确实很合理,但存储系统尤其是分布式存储是非常复杂的,做到这一点其实很不容易,或者说代价很高(很高成本或者性能很低)。因此在很多应用场景下,都尽量将一致性的要求降低到能够满足该应用需求的最低程度,从而可以用更低的成本或更高的性能来完成存储操作。一个典型的例子是修改微信好友的备注时,有时会发现操作完成后该微信好友的备注并没有修改,这就是因为修改操作发给了一个节点,但操作完成后再读该好友信息时是从另一个节点读的,这两个节点的数据在新数据刚更新的一瞬间是不一致的。这就能看出来微信对修改好友备注操作没有采取强一致性的方案,而是采取了最终一致性的方案。也就是说,微信认为最终一致性对这个场景是可以满足要求的,偶尔出现点更新滞后是可以被用户所忍受的。不需要为之付出强一致性的代价。

延时(Latency)

延时又称时延、延迟,是指一次读写花费的时间,是一个重要的存储性能指标。如果将读写操作的性能比作北京到天津的运输性能,那延时就相当于从北京到天津运输所需要花费的时间,如果是高铁需要大约半小时,如果是高速公路大约是2小时。

一般硬盘操作的延时是毫秒级别的,SSD是读操作几十微秒、写操作几十到几百微秒。分布式存储由于有网络延时,延时指标一般会差一些,在毫秒左右,但SurFS由于采用了分布式共享架构,可以达到几十微秒量级。WAN存储由于网络延时更高,所以延时指标会更差,大约在几百毫秒量级,这也是中心化存储系统唯一能确保胜过WAN存储系统的技术指标。

吞吐量(Bandwidth)

吞吐量又称带宽,是指平均每秒读写的数据量。在同样的延时指标下,增加并发可以提高吞吐量。在如上的比方中,吞吐量就是每小时能从北京运送多少人到天津去,在同样的车速下,增加更多的车道可以运送更多的人。

WAN存储系统虽然延时指标较差,但由于可以增加更多的并发,因此吞吐量可以做到与中心化存储系统相当的程度。

IOPS

IOPS是IO Per Second的缩写,即每秒执行读写操作的数量,又可以进一步细分为顺序读IOPS,顺序写IOPS,随机读IOPS,随机写IOPS等指标,常见的有4K随机读IOPS、4K随机写IOPS、64K顺序读IOPS、64K顺序写IOPS指标。

4K随机读是一次读写4K字节,读地址是随机的。对硬盘来说,一个盘片是按磁道读写的,读写速度与硬盘转速有关,但寻道(即磁头更换磁道)速度就会慢很多,随机读写会导致随机寻址,读写性能会大幅度下降。顺序读写就基本上不存在这个问题,所以二者分别反映了不同场景下的性能。

对于SSD来说,虽然闪存颗粒本身就是随机寻址的,但缓存是顺序读写友好的,而且颗粒的擦除也是顺序的(连续多个Page一起擦除),所以也是顺序读写性能更好些。

专业测试还会测试读写混合(例如50%读50%写、70%读30%写)以及其它更多的细分指标。

IOPS和吞吐量是有直接关系的。IOPS乘以每次读写的数据块大小就等于吞吐量。增加IOPS最简单有效的方法也是增加并发。例如SSD的IOPS可以比硬盘高几千倍,但SSD的延时可能只提高了几十倍,但因为SSD可以多个颗粒同时并发读写,所以IOPS就可以很高。

去重(Deduplication)

简称Dedup,又称重删(“重复数据删除”的简称),指重复数据占用相同存储空间,从而可以大大节约数据存储所需的物理空间。

去重率是去重前的数据总量除以去重后的数据总量的比率,与用户数有直接的关系。单用户的重复率是不高的,用户数越多,重复文件就会越多,去重率就会越高。去重率与应用场景也有较大关系,例如灾备系统的去重率就会很高。

一个中型的云盘系统的去重率大约在3倍左右,一个大型的云盘系统的去重率大约在5倍左右,一个典型的企业备份软件的去重率大约在4倍左右。

去重需要消耗一定的性能,但是当遇到重复文件时可以不用再存储,只需要修改相关元数据即可,因此在正常去重率下反而应该提高存储性能。

明文去重是很多高端存储都有的常规功能,但密文去重是只有YTFS才有的专利技术。

并发能力(Concurrency)

并发能力指可以同时响应多少个访问请求的能力。

对桌面级存储来说,对并发要求不高,一般也就是同一个操作系统下多个进程可能会同时读写硬盘,但由于一个用户同时使用的应用极为有限,除非遇到磁盘碎片整理这样的持续大量占用硬盘I/O操作的应用会让其它应用的I/O变得非常慢,一般情况下这样的并发对用户是没有感知的,也比较好处理。

但对服务器来说,由于要同时服务于多个客户端,并发就成为一个基本的要求,高并发也成为每一个架构师的追求。无论是企业级存储还是分布式存储,高并发都是必不可少的。对WAN存储来说,由于数据节点众多,高并发相对来说更容易实现。

设计和工程实现上的缺陷在并发负载上来后很容易暴露出来,一秒钟几个I/O请求,与一秒钟百万个I/O请求对存储系统的负载能力要求是天壤之别的,并发能力成为衡量架构师能力的重要尺子。例如IPFS的单节点并发大约在2个左右,YTFS则是100左右,有了非常明显的提升。

为了防止并发访问同时写同一个数据产生混乱,需要有并发锁机制,一个人写的时候不能另外的人同时写。锁机制属于非常复杂、专业的纯技术领域,超出本文的范畴了。

分区可容忍性(Partition Tolerance)

分区可容忍性就是存储系统因故障分成多个区后整个系统依然可用。分布式存储是由多个存储节点组成的,这些节点之间一旦网络连接断掉了,对系统可用性就会构成严重的威胁,因为此时节点之间就无法进行数据同步了,如果继续提供存储服务的话数据一致性就无法保障了。所以,分布式存储存在一个经典的CAP理论,即数据一致性(Consistency)、服务可用性(Availability)和分区可容忍性(Partition tolerance)不可能同时满足。CAP三者如何选择,就成了不同分布式存储系统设计的差异之一。

CAP理论看似正确无比,但其实有一些隐含的假设,例如假设数据是以多副本方式存储,而且每个节点的存储池都是独立的,附属于存储节点的。但某些分布式存储系统采用了更有创造性的存储架构,例如SurFS的分布式共享存储架构是后端存储池是共享的,数据是用冗余编码方式做冗余的,这样数据一致性和分区可容忍性就会有极大的改观。在YTFS存储系统中,同样是用冗余编码的方式来保证数据一致性,而且节点之间是通过互联网传输,天然抗分区风险,这也会改变传统的CAP理论。

容灾性(Disaster Tolerance)

一旦出现地震、火灾、停电、断网、雷电、盗窃、恐怖袭击、天津大爆炸等灾难性事件。整个地域的设备全部毁灭(而不只是个别零部件故障),是否还能不丢失数据,是否还能正常提供存储服务?

容灾性通常用“两地三中心”方式来满足,即在生产系统本地建一个本地灾备数据中心,在异地也建一个灾备数据中心。本地灾备中心主要是用于防范生产服务器发生的故障,异地灾备中心用于防范大规模区域性灾难。本地灾备中心与生产中心可通过高速局域网进行连接,因此数据复制和应用切换比较容易实现,可实现生产与灾备服务器之间数据的实时复制和应用的快速切换。异地灾备中心与生产中心不仅连接的网络线路带宽和质量存在一定的限制,而且存在一定的网络延时(光纤传输大约1毫秒200公里),应用系统的切换也需要一定的时间,因此异地灾备中心可以实现在业务限定的时间内进行恢复和可容忍丢失范围内的数据恢复。

“”两地三中心”是实践中总结出来的具有一种非常好容灾性的模式,但该模式成本非常高昂,因为需要建设三个相等规模的数据中心,再加上一套非常昂贵的容灾备份软件,以及日常的运维、演练。即便如此,也不能做到100%保证数据可完全恢复,即RPO和RTO可以花很高的代价接近于零,但不能等于零。

RPO是指灾难发生后可以将数据恢复到灾难发生前多长时间,RTO是指灾难发生后多长时间可以恢复服务,也就是说灾难导致业务停顿的时间。例如,如果RPO是10秒钟,RTO是1分钟,则当灾难发生后,业务将会停顿1分钟时间,1分钟后灾备系统启动,恢复服务,但最近10秒钟的数据会丢失,可以将系统恢复到灾难发生前10秒钟时的状态。

WAN存储系统具有天然的容灾性,可以在存储层面实现RTO与RPO均为零的极致目标,即出现任何灾难都不会停止存储服务,而且已经完成写确认的数据永远不会丢。如果再配合协同一致性、智能DNS、异地多活数据中心,理论上也可以在业务层面实现RTO和RPO同时为零。

抗DDoS(Anti-DDoS)

DDoS(Distributed Denial of Service)是分布式拒绝服务攻击,是指处于不同位置的多个攻击者同时向一个目标发动攻击,大量消耗被攻击目标的资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。

随着电信网络的高速发展,带宽越来越便宜,DDoS攻击的成本也在大幅度下降,几百元人民币就可以发起高强度攻击,使得DDoS成为各大网站的噩梦。

常用的抗D方法是不暴露真实服务器的IP,将域名解析到一个流量清洗节点,该节点用超大带宽来承接攻击流量,进行流量清洗后将真实访问需求再转发到真实服务器。该方式就是与攻击者比带宽,谁带宽大谁赢。

WAN存储由于将存储数据分散在全球各地,且对各数据节点因故障(物理故障或被DDoS攻击而失去服务能力)而掉线的容忍度高,所以天然具有较强的抗D能力,攻击者即使同时瘫痪了1000个节点也不会影响存储服务。

可扩展性(Scalability)

可扩展性是指存储系统扩容是否容易,以及最多可以扩展到多大容量。可扩展性分为纵向可扩展性和横向可扩展性,其中纵向可扩展性是指通过升级单一设备的配置来扩容,横向扩展性是增加更多的节点来扩容,一般说来横向扩展的边际成本要远远小于纵向扩展,而且横向扩展的扩展能力更强。

桌面级存储一般没有扩展能力,企业级存储一般以纵向扩展为主,分布式存储都是横向扩展的,但单一集群很难超过100PB,WAN存储也是横向扩展的,而且扩展能力更强,至少可以到EB级别(1EB=1024PB),理论上可以到ZB级别(1ZB=1024EB)。YTFS是Yotta File System的缩写,目标定位于YottaByte级别(1YB=1024ZB)。目前全人类有史以来的全部数据加起来也不到0.1YB,能扩展到YB级别就真正等于无限扩展了。

本文标签: 技术指标存储系统评价长文