青训营后端总结(七)之 TOS 对象存储 | 青训营

109 阅读4分钟

TOS 对象存储

随着数据量和应用场景的不断增加,存储系统的设计和选择成为了一项至关重要的任务。在分布式存储领域,对象存储 (Object Storage) 已经成为了备受关注的一种解决方案。本文将围绕着 TOS 对象存储展开,探讨其特点、用途、优势以及面临的工程挑战与解法。

1. 分布式存储选型对比

1.1 存储体系分类

在选择存储方案时,我们通常会考虑单机存储、分布式存储、单机/分布式数据库等不同存储体系。本文将聚焦于分布式存储,并详细介绍对象存储作为分布式存储的代表。

1.2 HDFS vs. 对象存储

对象存储是当前众多云厂商所推崇的存储解决方案之一,与传统的分布式文件系统(如 HDFS)相比,对象存储在以下方面有着明显优势:

云原生存储

对象存储作为云原生存储方案,具备开箱即用的特性,极大地减轻了运维负担,同时借助云生态体系的支持,能够更好地满足不同业务的需求。

数据模型和接口

对象存储采用扁平的逻辑命名空间,以 Bucket/Key 的形式组织数据,相较于 HDFS 的 Directory/File 数据模型,更加符合人类的思维逻辑。此外,对象存储使用基于 HTTP 的 Restful 风格接口,简单易用且便于扩展和集成,可无缝接入 CDN 等服务。

可扩展性和成本

对象存储在可扩展性和成本方面具有优势,其可扩展性更强,支持无限容量的扩展,并且在成本方面更加经济高效。

2. 对象存储的用法

对象存储提供了一系列的基本接口,基于 Restful 风格的 HTTP 接口实现,其中包括:

  • GET:获取对象内容

  • PUT:上传对象内容

  • DELETE:删除对象

  • HEAD:获取对象元信息

此外,还有 MultiPartUpload 接口,针对大对象和弱网环境的上传做了优化。对象存储的数据模型采用扁平的逻辑命名空间,通过类似目录的层次化命名方式实现命名空间的结构化。通过 CommonPrefix 的概念,可以将扁平的逻辑命名空间转化为更易于理解的层次结构,同时还实现了分页查询功能。

3. 对象存储面临的工程挑战和解法

3.1 工程挑战

对象存储在实际应用中可能面临海量容量、海量 QPS 和高可用性等业务场景,从而带来以下工程挑战:

可扩展性

在大规模数据存储场景下,系统需要具备线性可扩展性,能够支持存储容量、带宽吞吐、QPS 等关键指标的持续增长。

持久度

系统需要确保数据存储成功后能够抵御单机、单机架、单机房等各种类型的故障,以保障数据的持久性。

可用性

系统的不可用时间需要尽可能小,且需要具备快速恢复的能力,以满足高可用性的业务需求。

性价比

在海量存储容量的情况下,需要降低单位存储成本,以降低业务的成本支出。

3.2 解法

Partition 分治提升可扩展性

通过合理的 Partition 方式将数据散布到分布式系统中的不同节点,实现线性可扩展性。Hash Partition 和 Range Partition 是常见的做法。

Replication 多副本提升持久度

通过数据多副本的方式提升数据的持久性,使数据能够在多份副本中存储,以应对单机或单机房故障。

单元化最小化爆炸半径

将系统切分为多个垂直独立的单元,使得不同单元之间相互独立,从而提高系统的可用性和运维友好性。

镜像灾备应对极端情况

构建镜像的主备集群,以应对极端情况下的故障,实现极高的可用性和可靠性。

开源节流提升性价比

通过采用开源技术和节流策略,降低存储成本,同时利用冷热分离、高比例的 EC 等方式提升性价比。

结论

TOS 对象存储作为分布式存储的代表之一,在云原生环境中具备诸多优势,其简单的数据模型和丰富的接口,使其在面对海量数据和高 QPS 场景时表现出色。然而,随之而来的工程挑战也需要通过合理的解法来应对,以确保系统在可扩展性、持久度、可用性和性价比等方面取得良好的表现。在实际应用中,根据业务需求和性能要求,选择合适的分布式存储方案将成为至关重要的决策。