Curve文件系统元数据持久化方案设计Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft 存在的问题? redis 改造 vs 自己实现? redis 中哈希表实现的优点? 参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 STL 中的哈希表(unsorted_map),之后有可能根据需求换成 B+ 树或跳表,但是 redis 中的这些数据结构我们是不需要的 另外,如果 C++ 中的哈希表在后期使用中发现性能不达标的话(特别是在 rehash 扩桶的时候),我们可以把 redis 中的哈希表借鉴过来用(redis 中的哈希实现很独立,单独的文件 t_hash.c,其性能表现也非常好) redis 哈希表实现主要优点参考以下 redis 感觉不是很划算 redis 中哈希表实现的优点? 主要是当哈希表需要扩桶的时候,rehash 过程中 redis 采用了均摊/渐进式的思想,把 rehash 中的性能损耗均摊在每一次 SET/DEL 操作中(如 rehash 总耗时 1 秒,均摊给 100 个请求,那么每个请求只增加延时 10 毫秒),rehash 过程如下: 哈希表渐进式 rehash 的详细步骤: (1)0 码力 | 12 页 | 384.47 KB | 6 月前3
副本如何用CLup管理PolarDBCLup管理节点2 高可用机制自动切换 数据一致性保证 数据可用性 提供读写VIP 读写高可用 读写分离 多个读库之间负载均衡 负载均衡 读线性扩展 支持分库分表 高扩展性 写 VIP 读 VIP PG (Primary) PG (Standby1) PG (Standby2) PG (Standby3) 数据同步复制 写请求 读请求0 码力 | 34 页 | 3.59 MB | 6 月前3
CurveFS方案设计inode → blk_list {blk1, blk(M*N)} 在文件系统mount的时候,读取所有inode的信息就可以重建出当前哪些block是已经分配的,哪些未分配,因此空间分配信息的表无需另外做持久化。这一信息可以缓存在 client 或者 metaserver。© XXX Page 12 of 14 1. 2. 3. blk的粒度为多少? 从调研的系统来看,如0 码力 | 14 页 | 619.32 KB | 6 月前3
Open Flags 调研*how, size_t size); open系统调用会打开pathname指定的文件(如果不存在,如果携带O_CREAT flag则会创建),返回一个文件描述符fd(该fd是进程打开文件描述符表的index),在后续系统调用(read(2)、write(2)、lseek(2)、fcntl(2) etc.)中指向这个打开的文件。打开的文件描述符记录中保存着文件的offset 和 文件status。0 码力 | 23 页 | 524.47 KB | 6 月前3
Curve文件系统元数据管理com/happyfish100/libfastcommon/tr ,(LGPL) ee/master/src hash table O(1)~O(n) O(n) + table 需要占用额外空间,性能和hash表的大小有关,最理想可以达到O(1)复杂度,最差O(n)复杂度。 c++ stl unordered_map moose,使用c实现 4、curve文件系统的元数据内存组织0 码力 | 24 页 | 204.67 KB | 6 月前3
共 5 条
- 1













