博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈OceanBase的多线程并发日志回放
阅读量:5838 次
发布时间:2019-06-18

本文共 1335 字,大约阅读时间需要 4 分钟。

hot3.png

OceanBase选择了强一致性,主UpdateServer往备UpdateServer同步操作日志,如果同步成功,主UpdateServer操作本地后返回客户端更新成功,否则,主UpdateServer会把备UpdateServer从同步列表中剔除。另外,剔除备UpdateServer 之前需要通知RootServer,从而防止RootServer将不一致的备UpdateServer 选为主UpdateServer。

如下所示,主UpdateServer往备机推送操作日志,备UpdateServer的接收线程接收日志,并写人到一块全局日志缓冲区中。备UpdateServer只要接收到日志就可以回复主UpdateServer同步成功,主UpdateServer接着更新本地内存并将日志刷到磁盘文件中,最后回复客户端写入操作成功。这种方式实现了强一致性,如果主UpdateServer出现故障,备Updatcserver包含所有的修改操作,因而能够完全无量地切换为主Updateserver继续提供服务。另外,主备同步过程中要求主机刷磁盘文件,备机只需要写内存缓冲区,强同步带来的额外延时也几乎可以忽略。

_1

OceanBase引入多版本并发控制机制后,UpdateServer备机支持多线程并发回放日志功能。如上图所示,有一个日志分发线程每次从日志源读取一批日志,拆分为单独的日志回放任务交给不同的日志回放线程处理。一批日志回放完成时,日志提交线程会将对应的事务提交到内存表并将日志内容持久化到日志文件。

class ObLogReplayWorker{public:    //提交一批待回放的操作日志    // @param [out]task_id 最后一条操作日志的编号    //@param [in] buf 日志缓冲区    // @param [in]len 日志缓冲区的大小    //@paran [in]replay_type 日志回放类型,包话RT_LOCAL(回放本地日志)和RT_APPLY(回放通过网络接收到的日志)    int aubmit_batch(int64_t4& task_id, const char* buf, int64_t len, const ReplayType replay_type);public:    //需放一条操作日志    int handle_apply(ObLogTask* task);};

备UpdateServer 有专门的日志回放线程不断地调用ObUpsLog-Mgr中的replay_log函数获取并回放操作日志。UpdateServer 支持多线程并发写事务后,replay log函数实现成调用ObLogReplay Worker中的submit_batch,将一批待回放的操作日志加入到回放任务队列中。多个日志回放线程会取出回放任务并不断地调用Handle_apply回放操作日志,即首先将操作日志预提交到MemTable中,接着加入到提交任务队列。另外,还有一个单独的提

转载于:https://my.oschina.net/u/3611008/blog/1832032

你可能感兴趣的文章
“互联网+广交会”,AMT助广交会确立互联网时代竞争新优势
查看>>
配置ks.cfg实现自动安装过程
查看>>
Soul 网关发布 1.0.4-RELEASE 版本
查看>>
Setting Up Load Balancers Using Terraform
查看>>
第一届对象存储技术及应用大会:Esri中国周宁——万物互联时代,云存储技术的变革与展望...
查看>>
有孚网络副总裁吕鑫:合纵连横,云领未来—如何打造低成本混合云架构
查看>>
GNU nano 4.0 发布,简单又强大的文本编辑器
查看>>
最佳实践系列丨Docker EE 日志记录最佳实践(二)
查看>>
收集移动端HTML5/H5使用的插件
查看>>
备用电源
查看>>
安卓应用安全指南 4.2.1 创建/使用广播接收器 示例代码
查看>>
中小学生也能独立创作VR内容?睿诚华智发布面向K12的VR STEAM产品
查看>>
回文检测(包含中文与字符)
查看>>
Creating a custom creation complete effect on a Flex Alert control
查看>>
在WPF里面显示DIB图片格式的图片
查看>>
教你怎么使用Jmail发送匿名的邮件(不要身份认证)
查看>>
QQ登陆功能的实现2
查看>>
蓝桥杯 算法提高 日期计算
查看>>
SharePoint 2013 安装配置(3-2)
查看>>
Puppet数据类型中[数值类型,数组的使用] (十四)
查看>>