Limited Control: No centralized policies:控制能力有限,由于系统分散,无法实施统一集中的管理策略,例如数据生命周期、访问控制、安全合规等策略。
愿景:元存储抽象层
愿景:元存储抽象层
“What We Wanted”(我们的期望)
这部分详细描述了新存储解决方案需要达成的目标,这些目标精确地对应了上一页提到的痛点。
Transparent Backend Routing based on cost & access patterns:基于成本和访问模式的透明后端路由。这意味着系统需要能够智能地、自动地将数据路由到最合适的后端存储(如低成本的冷存储或高性能的热存储),而这个过程对上层应用是完全透明的,应用本身无需关心数据究竟存在哪里。这直接解决了“成本高昂”和“缺乏灵活性”的问题。
Centralized Control for all blob traffic:对所有Blob(二进制大对象,通常指非结构化数据)流量进行集中控制。目标是建立一个统一的管理入口,以取代之前分散在多个系统中的混乱状态,从而解决“运维开销大”和“控制力有限”的问题。
Enqueue PUT requests by pail(按Pail将PUT请求加入队列):当应用发起上传(PUT)小文件的请求时,系统不会立即将其写入后端存储。而是先将这些请求按照其所属的容器(Pail)进行分组,并放入一个临时的处理队列中。
Trigger on timeout OR size threshold(基于超时或大小阈值触发):队列的处理由两个条件之一触发。要么是等待时间超过了一个设定的阈值(超时),要么是队列中所有文件累积的大小达到了一个设定的阈值。
Concatenate multiple objects → single blob(将多个对象合并成单个Blob):一旦触发,系统会把队列中的多个小尺寸对象(objects)合并(concatenate)成一个单一的、更大的数据块(blob)。
Write to Magic Pocket (targeting 4MB)(写入Magic Pocket,目标大小4MB):将上一步生成的大数据块(blob)作为单次操作写入到Magic Pocket中。这一步的关键是,合并的目标大小会尽可能地接近Magic Pocket的性能最佳点,即4MB。
Store metadata with offsets(存储带有偏移量的元数据):由于多个逻辑上的独立对象现在被物理上存储在了同一个大数据块中,系统必须在元数据数据库(MySQL)中记录下每个小对象在这个大blob里的具体位置,即它的起始位置(offset)和长度。这样,在未来读取某个小对象时,系统才知道去哪里找。
下半部分:影响与收益 (Impact) 这部分总结了“批量写入”机制带来的三大好处:
Fewer PUT requests = major cost savings(更少的PUT请求 = 大幅的成本节省):通过将成百上千次的小文件写入合并为一次大文件写入,极大地减少了对后端存储的写入操作次数。这不仅能节省类似S3按次收费带来的成本,也能提升内部存储系统的I/O效率。
Optimized for Magic Pocket 4MB constraint(针对Magic Pocket的4MB限制进行了优化):这是该创新的核心目的。它巧妙地解决了“上层应用写小文件”和“底层存储偏好大文件”之间的矛盾,确保写入到Magic Pocket的数据块都是性能最优的尺寸。
市场上针对对象存储读写优化的中间件有不少,JuiceFS/Alluxio 都是很好的产品。
Cache optimization for GETs(为GET请求优化了缓存):这是一个附带的性能提升。当用户请求读取(GET)其中一个小文件时,系统会从Magic Pocket读取整个4MB的大数据块到缓存中。如果用户紧接着请求访问同一个数据块中的其他小文件,这些请求就可以直接从缓存中得到满足,无需再次访问后端存储,从而提高了读取性能和缓存命中率。
No KEK = No data access(没有密钥 = 无法访问数据):(此处原文的“No KEK”应为“No BEK”更能准确表达意思)。一旦包含BEK的元数据被删除,与之对应的那个加密数据对象就成了一串无法解密的、毫无意义的乱码。因为解密的“钥匙”被永久销毁了,数据在密码学的意义上被“粉碎”了,从而达到了永久删除的效果。
Synchronous compliance via MySQL(通过MySQL实现同步合规):删除一条数据库记录是一个非常快速、同步(Synchronous) 的操作。这意味着系统可以在收到删除请求的瞬间就完成元数据的擦除,从而立即满足合规性要求,因为数据在这一刻起就变得不可访问了。
Asynchronous space reclamation(异步的空间回收):物理数据块虽然还在硬盘上,但已成为无人能访问的“垃圾数据”。系统可以通过一个独立的、异步(Asynchronous) 的后台垃圾回收(Garbage Collection)进程,在业务不繁忙的时候,定期扫描并清理那些已经没有任何有效对象引用的物理数据块,从而回收磁盘空间。
Magic Pocket optimized for 4MB(Magic Pocket针对4MB进行了优化):再次强调了底层核心存储系统的基本特性,即处理4MB大小的文件时性能最佳。
Many objects > 4MB (logs, artifacts, media)(许多对象大于4MB,如日志、构建产物、媒体文件):指出现实业务中存在大量尺寸远超4MB的大文件,例如日志文件、软件构建的中间产物、音视频等媒体文件。
Original solution: Route large objects to expensive S3(最初的解决方案:将大对象路由到昂贵的S3):描述了他们最初的应对方法。智能路由层会识别出这些不适合存入Magic Pocket的大文件(MP本质上是为小文件写入而设计的优化系统,对大文件的写入需要额外设计),并将它们转而存入Amazon S3。这样做虽然解决了技术适配问题,但却导致了高昂的存储成本。
中间:分块解决方案 (Chunking Solution)
这部分详细阐述了“对象分块”的具体技术实现:
Break large objects into 4MB chunks(将大对象切分成4MB的块):这是核心思想。当一个大文件被上传时,对象存储的前端逻辑会自动将其切割成一系列标准大小为4MB的数据块(chunks)。
Store chunks in Magic Pocket(将分块存储在Magic Pocket中):切割后的每一个4MB数据块,现在都完美符合Magic Pocket的最佳性能尺寸,因此可以被高效地存入这个成本更低的内部存储系统中。
Parallel reconstruction at read time(在读取时并行重构):当用户需要读取原始的大文件时,系统会同时(并行)去获取组成该文件的所有4MB数据块,然后在前端将它们按正确顺序重新组装成完整的文件,再返回给用户。并行读取可以大大提高大文件的下载速度。
Deterministic keys: No extra metadata needed(确定性密钥:无需额外元数据):这是一个非常精巧的优化设计。“确定性密钥”意味着每个小数据块的名称(或key)都可以通过一个固定的算法,基于原始文件名和它在文件中的序号计算出来。因此,系统不需要在元数据数据库中额外存储一张列表来记录这个大文件包含了哪些小数据块。当需要读取时,只需根据算法就能推算出所有需要获取的数据块的名称。这极大地简化了系统设计,并避免了元数据存储的膨胀。
All data hits Magic Pocket's sweet spot(所有数据都命中了Magic Pocket的最佳性能点):通过“批量写入”处理小文件和“对象分块”处理大文件,系统最终实现了无论原始文件大小如何,所有写入到Magic Pocket的物理数据块都是最优的4MB大小,最大化了后端存储的效率。
Millions in annual S3 cost savings(每年节省数百万美元的S3成本):这是最直接的业务价值。通过将大文件从昂贵的S3迁移到成本效益更高的自研系统Magic Pocket,公司每年节省了巨额的云服务开销。
AI时代的演进:未来方向
AI时代的演进:未来方向
第一阶段:Current AI Opportunities(当前AI机遇)
这部分列举了当前可以基于现有对象存储平台直接赋能的AI应用场景。
Natural language search(自然语言搜索):利用AI模型对存储在系统内的海量非结构化数据进行语义搜索。