浅谈OceanBase的多线程并发日志回放

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中,接着加入到提交任务队列。另外,还有一个单独的提交线程会从提交任务队列中一次取出一批任务,提交到MemTable并持久化到日志文件中。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/602832

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。