MySQL 兼容性可以做到什么程度PolarDB-X 如 何 做 生 态兼 容 好的 MySQL 兼容性可以做到什么程度 胡中泉(舟济) 阿里云数据库解决方案架构师为什么要兼容 MySQL 01 The longer you look back, the farther you can look forward.也从阿里巴巴的“去IOE”运动说起 业务驱动下的分布式技术实践之路 5月17日,支付宝最后一台小型 机下线标志去IOE落下帷幕0 码力 | 18 页 | 3.02 MB | 6 月前3
Curve核心组件之Client - 网易数帆 IO处理:转换、拆分、合并 元数据获取及缓存 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 复制组所在的chunkserver列表 复制组的leader信息 Failover支持 MDS:只有主MDS才会监听端口 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 复制组所在的chunkserver列表 复制组的leader信息CLIENT IO流程 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 由MDS分配并持久化,client拆分用户请 求时会获取并进行缓存 为了减少元数据量,MDS一次会连续分配 1G范围内的映射关系,称为SegmentCLIENT IO流程 复制组所在的chunkserver列表 chunkserver心跳定期上报给MDS 这两种信息client也会进行缓存 上报心跳CLIENT IO流程 子请求处理步骤: 1. 从MDS获取逻辑chunk与物理chunk的 对应关系(包含逻辑池以及复制组信息) 2. 从MDS获取复制组所在的机器列表 3. 从Chunkserver获取复制组leader信息 4. 将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io0 码力 | 27 页 | 1.57 MB | 6 月前3
CurveFS S3数据整理(合并碎片、清理冗余),需要注意不超出len),compaction+1,chunkid为上一步获取的chunkid,为需要新增的obj - 老的obj为全部需要删除的部分 应用变更 - 先读写新增的s3 objects列表, 由于新增了version字段, 不会涉及到覆盖老的对象 - 加锁, 增量的更新inode的s3chunkinfolist, 保证原子更新, 更新失败回退新增数据 - 等待N秒, 保证mds已经告知client缓存失效 已经在整理的任务不会被新的删除标记的请求打断. 如果标记删除到实际删除之间的时间间隔非常短, 并且在标记删除前已经开始了整理任务, 可能会出现边删除边整理的状态(出现概率较小) 可以在实际删除前检查当前整理的inode列表, 如果在列表里就暂时跳过(同步删除)/重新丢进删除队列(异步删除) 或者就不管, 处理一下报错, 让后续的应该会开发的数据清理工具来删除, 因为出现这个冲突的概率比较小 truncate: 只进行元数据里len的改变0 码力 | 3 页 | 101.58 KB | 6 月前3
Curve文件系统元数据持久化方案设计)© XXX Page 11 of 12 1. 2. 3. 如果自己实现,只是一个简单的 sava/load 逻辑,比较清晰 redis 中有许多数据结构可供使用,如 (哈希、列表、set、sort_set),但对于目前的需求来说,我们内存数据结构使用的是 C++ STL 中的哈希表(unsorted_map),之后有可能根据需求换成 B+ 树或跳表,但是 redis 中的这些数据结构我们是不需要的0 码力 | 12 页 | 384.47 KB | 6 月前3
Curve支持S3 数据缓存方案在Flush函数中,加写锁,通过swap获取FileCacheManager的chunkCacheMap_到临时变量tmp,并清空chunkCacheMap_,解写锁。遍历tmp中的DataCache列表,执行Flush函数,并更新对应的元数据。 3.Flush返回成功。 4.如果DataCache的Flush失败,则整个Flush失败。但是缓存需要重新回退到chunkCacheMap_中,这里要注0 码力 | 9 页 | 179.72 KB | 6 月前3
Raft在Curve存储中的工程实践分钟一次,每次快照会产生大量的数据拷贝,占用chunkserver的 处理能力,对磁盘造成很大压力,影响正常IO。 解决思路: chunk支持覆盖写,覆盖写天然是幂等的,写一次和写多次结果一致。 打快照只记录chunk文件的列表,不拷贝chunk的内容。从快照+日志加载数据时,下载的chunk文 件不是打快照的状态,而是最新的状态,回放日志时,把数据重写一遍。Curve对RAFT的优化 优化点二: chunkfile pool0 码力 | 29 页 | 2.20 MB | 6 月前3
CurveFS Client 概要设计off_t off, struct fuse_file_info *fi); 根据inode id 找到当前dir的inode struct结构,从缓存或metaserver获取当前dir的dentry列表。 读取当前[off,size]对应位置的dentry,调用fuse_add_direntry,生成dir buffer,返回 getattr & setattr void (*getattr)0 码力 | 11 页 | 487.92 KB | 6 月前3
CurveFs 用户权限系统调研fuse_lowlevel.h is const struct fuse_ctx *fuse_req_ctx(fuse_req_t req) 对ACL(Access Control Lists)的管理 访问控制列表(ACL 或 POSIX ACL)是多用户系统的 。 与基本的 POSIX RWX 位相比,POSIX ACL 有助于对文件系统权限进行 的控制。可以针对用户(User)、群组(Group) 附加安全控制功能0 码力 | 33 页 | 732.13 KB | 6 月前3
共 8 条
- 1













