这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
针对短视频app的业务需求,需要对海量的视频数据进行处理存储,因此目的就是要通过让存储系统能够存储海量的数据,成本低,能够让业务开发得到解放,能够专注于业务逻辑;
单机存储首先我们排除,数据量实在是太大了,单机肯定存不下,单机数据库同理。 分布式数据库,现代的分布式数据库在容量和弹性上面都有很大进展,是否可以呢?答案也是No,因为分布式数据库只适合存储结构化or半结构化数据。
结构化数据就是数据和数据之间有一定关系,如用户信息,一个用户会关联包括电话号码,性别等各种维度的信息,这些信息一般都是不超过KB级别的,超过MB级别就不适合使用数据库处理了; 唯一的选择就是分布式存储,分布式存储是针对海量存储场景特别设计的存储,能够存储海量的大数据。
对象存储的优点
对象存储的优点很多,简单归纳如下:
容量无限大
对象存储的容量是EB级以上。EB有多大?大家的硬盘普遍是TB级别。1EB约等于1TB的一百万倍.对象存储的所有业务、存储节点采用分布式集群方式工作,各功能节点、集群都可以独立扩容。 从理论上来说,某个对象存储系统或单个桶(bucket),并没有总数据容量和对象数量的限制。换句话说,只要业务需要,就可以不停地往架构里增加资源,这个存储空间就是无限的。前期根据自身需求购买相应大小的对象存储空间。如果需要调整大小,也是支持弹性伸缩的,不需要进行数据迁移和人工干预。
数据安全可靠
对象存储采用了分布式架构,对数据进行多设备冗余存储(至少三个以上节点),实现异地容灾和资源隔离 。 根据云服务的承诺,数据可靠性至少可以达到99.999999999%。这意味着,1000亿个文件里,每月最多只会有1个文件发生数据丢失。这比一个人被陨石击中的概率还要小143000倍。数据访问方面,所有的桶和对象都有ACL等访问控制策略,所有的连接都支持SSL加密,OBS系统会对访问用户进行身份鉴权。 因为数据是分片存储在不同硬盘上的,所以即使有坏人偷了硬盘,也无法还原出完整的对象数据。
使用方便
对于用户来说,对象存储是一个非常方便的存储方式。很多人把它比喻为“代客泊车”,你只需要把车扔给他,他给你一个凭证,你通过凭证取车就可以了。 你不需要知道车库的布局,也不需要自己去费力停放。数据的存取方法也非常灵活多样。除了前面说的可以使用网页(基于http)直接访问之外,大部分云服务提供商都有自己的图形化界面客户端工具,用户存取数据就像用网盘一样。事实上,大部分的对象存储需求,并不是个人用户买来当网盘用,而且企业或政府用户用于系统数据存储。例如网站、App的静态图片、音频、视频,还有企业系统的归档数据等。像这种数据,是通过程序内部的接口调用的。对象存储提供开放的REST API接口。程序员在开发应用时,直接把存储参数写进代码,就可以通过API接口调用对象存储里的数据。 相比文件存储那一串串的路径,对象存储要方便很多。
总结
存储方式没有好坏之分,只有适合与不适合之分,满足当前业务系统需求的存储方式就是最好的存储方式。并不能说Ceph对象存储就一定比TFS、HDFS、FastDFS优秀。这就好像现在机械硬盘已经存在这么多年了,磁带仍然没有消失的原因,因为它用一种最廉价的方式解决了大容量离线数据的存储问题,尽管它是很慢的