1、引子
随着网络视频行业不断走向成熟,越来越多的企业都参与到视频网站建设中来,竞争愈加激烈,而带宽、服务器、存储、编解码等各项技术直接关系到竞争优势。存储系统作为视频数据的载体,其IO性能和可扩展性、可靠性对整套系统架构起着至关重要的作用。
集中存储
在面对海量数据存储时,以往用户会采用传统的使用方法:集中存储,将所有的数据存放于一个单一大容量盘阵或者存储服务器中,并采用较高等级的RAID进行数据保护(如RAID 5、RAID 6等)。
这种类型的方案确实给用户带来了一定的益处,那就是数据可以集中管理,用户不用忙于数据迁移工作。但集中存储方案中整套业务的可靠性完全集中于单个存储设备之上,用户将所有数据集中存放将会带来集中崩溃的反作用。而且故障发生点也不仅局限于磁盘,网络、RAID控制器、供电、系统、人为误操作等各类故障都潜在威胁着数据安全,任何一点的故障都可能造成服务中断,甚至数据丢失。
数据存储采用集中式存储时,所有的数据读写都必须通过其有限的IO总线。尤其在视频分享一类的应用中,大量用户并发访问会给存储系统带来巨大的IO压力。
分散存储
数据的分散存储结构将服务器的计算资源与存储资源紧紧地绑定在一起,等于是各项资源被困在某一处。在计算资源方面,即使是一部分热点数据前端的应用服务器计算处理能力不足,大部分较为冷门数据前端的应用服务器也得不到充分利用。在存储资源方面,也存在部分存储系统空间被耗尽,而其他存储系统却只有小部分数据。这样,由于资源难以灵活调度,庞大的计算资源和存储资源利用率低下。
在数据量不断扩大的情况下,存储的规模也会不断扩展,整套存储平台的管理维护工作的难处也就逐渐地凸现出来,平台的潜在故障对数据安全性的威胁也逐渐增大。
数据一旦被分散存储到多套存储系统上,各存储系统的网络、磁盘、软件BUG、人为误操作等各种危险故障,都会给部分数据造成威胁。并且,随着规模扩大,各种故障出现的概率也就越大。管理员为了保障数据的安全而忙于处理数据备份、迁移,过多的人为参与也增加了误操作的危险。
集群存储
目前,非结构化数据爆炸性增长、传统存储系统难以满足需求,于是诞生了一种新型数据存储方案:集群存储。它采用数据分布到集群中各节点上的存储方式,提供单一的使用接口与界面,使用户可以方便地对所有数据进行统一使用与管理。集群存储将集群中所有磁盘设备整合到单一的共享存储池中提供给前端的应用服务器,极大提高了磁盘利用率。集群存储系统同时集合了NAS的数据共享和SAN的高性能等特性,可以为非结构化数据提供具备极高IO带宽和灵活可扩展性的存储解决方案。
集群存储现在已经发展到了一个成熟的时期,多款成熟的产品已经在不同的生产领域得到实际使用,帮助企业提升竞争力。例如,著名视频分享网站Youtube,使用Google的GFS等集群存储技术搭建了极具伸缩性和性价比的集群存储架构,以支撑极高的并发访问量和视频上传量,具有高聚合带宽和高可用的特点,并很好地控制了软硬件费用支出,为业务长期运转打下了良好基础。
LoongStore大规模集群存储系统是北京龙存科技有限责任公司的旗舰产品,具有自主知识产权。那么,该产品是如何解决视频分享网站所关心的存储难题的呢?
如何满足视频分享不断增长的IO带宽和存储容量需求?LoongStore大规模集群存储系统由应用服务器集群、元数据服务器集群、智能存储服务器集群等三部分组成,各部分都以通用服务器硬件为构建单元,并且都具有动态扩展能力。当视频分享服务器增加、IO带宽需求增加时,用户可以动态添加智能存储服务器,以获得更高的聚合带宽和更大的存储容量。
存储集群中有软硬件故障是否会影响业务正常进行?LoongStore大规模集群存储系统在集群环境中使用了数据高可用技术,可以避免因节点、网络、系统等故障和人为误操作引起的业务中断和数据丢失,系统内置的故障恢复流程可以在无用户参与的情况下完成处理。
LoongStore已经被国内多个大型视频分享网站所采用。由于使用通用的服务器硬件,用户无需考虑兼容性、价格、复杂的配置等因素。在实际使用中,LoongStore存放着上千万个视频短篇,提供数百TB的存储容量、高达数GB的聚合带宽,企业以更低的支出成本获得了更高的IO性能,管理员也从原来数据迁移与故障恢复工作中脱离出来。
2、集群的本质——自组自控轮回的RAID
你所看到的上面这两幅图,左边这个是一台传统的双控制器的磁盘阵列系统精简架构图,两个控制器通过FCAL(光纤通道)或者SAS网络共同控制着后端的多块磁盘,多块磁盘组成某种RAID类型,数据被均匀打散在RAID组中的所有磁盘中。
右边这个是IBM XIV进群存储系统的精简架构图。
我们可以看到两者执行IO的过程是类似的,唯一的区别就是前者是控制器将IO下发给磁盘,而后者是前端控制器节点将IO下发给后端控制器而不是直接到磁盘。我们可以认为控制器组成了一个大的raid系统,每个控制器下面的磁盘做成RAID,然后多个控制器之间再做成RAID0,或者全局磁盘做成一个灵活的RAID10.
三线理论:
如果说客户终端访问服务器的网络为传统的以太网LAN,是第一网,也就是业务网,那么服务器访问存储系统所使用的网络就是第二网,也就是SAN, san可以基于以太网或者FC等网;而用于存储集群及主机集群内部通信和数据传输的网络,已经形成了一个第三网:
集群统一:各种各样的集群有计算集群,存储集群,存储集群又分为 集群SAN,集群NAS,分布式文件系统,集群文件系统等,如此多样的集群,其本质就是一堆x86的节点,用某种网络连接起来,后面挂了大量的磁盘的,就是存储集群中的节点。而拥有大量cpu,内存的就是计算节点。
3、CAP理论http://www.jdon.com/37625
http://www.douban.com/group/topic/11765014/
分布式领域CAP理论,
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。
Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。
Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。
Durability. 一旦事务完成,就不能返回。
跨数据库事务:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸缩模式的,JavaEE中的JTA事务可以支持2PC。因为2PC是反模式,尽量不要使用2PC,使用BASE来回避。
BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:
Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库)
Soft state软状态 状态可以有一段时间不同步,异步。
Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。
BASE思想的主要实现有
1.按功能划分数据库
2.sharding碎片
BASE思想主要强调基本的可用性,如果你需要High 可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。
现在NoSQL运动丰富了拓展了BASE思想,可按照具体情况定制特别方案,比如忽视一致性,获得高可用性等等,NOSQL应该有下面两个流派:
1. Key-Value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不同倾向的数据库产品。
2. 领域模型 + 分布式缓存 + 存储 (Qi4j和NoSQL运动),可根据CAP三原则结合自己项目定制灵活的分布式方案,难度高。
这两者共同点:都是关系数据库SQL以外的可选方案,逻辑随着数据分布,任何模型都可以自己持久化,将数据处理和数据存储分离,将读和写分离,存储可以是异步或同步,取决于对一致性的要求程度。
不同点:NOSQL之类的Key-Value存储产品是和关系数据库头碰头的产品BOX,可以适合非Java如PHP RUBY等领域,是一种可以拿来就用的产品,而领域模型 + 分布式缓存 + 存储是一种复杂的架构解决方案,不是产品,但这种方式更灵活,更应该是架构师必须掌握的。