Coolsm: Distributed and cooperative indexing across edge and cloud machine (ICDE'21)
N. Mittal and F. Nawab, "CooLSM: Distributed and Cooperative Indexing Across Edge and Cloud Machines," 2021 IEEE 37th International Conference on Data Engineering (ICDE), Chania, Greece, 2021, pp. 420-431, doi: 10.1109/ICDE51399.2021.00043.
本文关注边云场景下的数据索引问题,提出了 Cooperative LSM (CooLSM) 一种分布式的 Log-Structured Merge Tree,旨在克服边缘索引中的挑战,如机器和工作负载的异构性、边缘通信延迟的不对称
目标:将 compaction 过程卸载到分离的服务器上,不是仅仅添加一个副本来执行压缩(其中原始服务器仍然是一个单片LSM树),而是将整个LSM树结构解构为三个基本组件,然后,研究了这些基本组件的不同变体之间的混合和匹配,以及单独缩放每个组件的情况
LSM 树 [23]:
-
每个更新都作为一个新条目附加,该设计针对底层磁盘的顺序I/O特性,这使得LSM-trees成为写密集型工作负载的理想选择
-
LSM 树由组件 components (levels) L_1,..L_K 构成,每个组件本身是一个 B+ 树
-
L_0 驻留在内存中,而所有其他组件都驻留在磁盘上
-
组件中的页面 pages 通常称为稳定文件 sstables
-
当组件 L_i 已满的时候,一个滚动合并操作就会被出发,将 L_i 中的内容合并到 L_{i+1}
-
有两种常见的 Compaction 技术:
- tiering:合并了两个 level 的所有内容,并在更高 level 中写入新合并的内容
- leveling:只压缩一个 level 的选择页面,并将它们与下一个 level 中重叠的 sstables 合并
-
-
-
一个插入操作的步骤如下:
- key-value pair 被附加到内存中的 memtable, 在这里写的内容被缓冲
- 如果 memtable 中的大小到达了阈值,则根据 key 进行排序,然后将 memtable 附加到 L_0 中
- 如果 L_0 到达了阈值,触发 L_0 和 L_1 之间的 compaction
- 如果压缩后超过了 L_1 的阈值,则继续向更高的 level 触发 compaction
CooLSM 的主要设计原则是将 LSM 树的整体结构解构成更小的基本结构,这种解构允许分配和放置组件,以最大限度地发挥边缘节点和云节点的潜力和效用,同时解构允许弹性地缩放每个组件的资源,而不影响其他组件
-
解构后的组件有:
-
接收器 Ingestor:接收要添加到索引中的数据 receive upsert and read operations for any key in the data range
-
维护 LSM 树的 L_0, L_1 层
- L_0 层包含 pages of inserted key-value pairs (与 upsert 命令相关联),每个 page 代表了 a batch of inserted keys,跨页面的键并不是唯一的或有序的。但是,页面中的键在插入到L0之前是先排序的。
- 每一层 level 有一个阈值 L[i].threshold ,一旦大小超过了阈值,就触发 compactor 向更高层压缩合并
-
-
压缩器 Compactor:处理索引的结构化和垃圾收集
- 维护 LSM 树的 L_2, L_3 层
- compactor 可能被 partitioned 或者有重叠的范围 ?
-
读者 Reader (Backup) :维护数据的最新快照,以提供有效的分析和复杂的读取查询
- 维护整个LSM树的一个副本,以实现恢复和读取可用性
- 可以接收老子 ingestors 和 compactors 的数据
-
-
这种解构支持边云环境的节点分布和放置
-
Ingestors 放置在靠近数据源的地方,实时接收,并将数据传递给 Compactor
-
compactor 放置在云上,利用云资源,从数据源和直接消费者中卸载压缩开销
-
云中的 Reader 支持长期存储和管理更复杂的任务,如垃圾收集和大型只读查询
- 放置在数据接收器和消费者附近,允许更快、更具交互式的分析和只读查询
-
每个组件都可以放置在一个独立的机器上,因此,可以独立于其他组件进行缩放
- 增加 ingestor 的数量可以更快地接收数据
- 增加 compactor 的数量可以将压缩卸载到更多的节点,从而减少压缩对其他功能的影响
- 增加 reader 的数量提高了 read availability
-
主要挑战:一致性和性能之间的权衡
-
解构了 LSM 树,并将组件分布之后,在支持读写操作的同时维护 linearizability 需要广泛的协调和开销
-
选择:weaken consistency to improve performance,引入了两个较弱的一致性
-
Snapshot Linearizability
- model the potential inconsistency resulting from lazily forwarding records to an offline reader
-
Linearizable+Concurrent
- model the potential inconsistency that results from having more than one Ingestor (i.e. , more than one entry point to the LSM tree.)
-
应用场景:
在 IoT/edge 应用中,有两种类型的访问:low-latency access for recent data and complex analytics for global data at larger time ranges
CooLSM 的设计灵活性允许有效地扩展到边缘云系统的异构和非对称环境