2013级本科生 朱近1300012755

在这个暑假,经过两边学校的层层筛选,我们终于得到了前往爱丁堡大学参与暑期科研的机会。我们于英国时间75号中午到达了爱丁堡机场,在师兄的带领下进行了基本的入住登记等事务以后,开始了我们在英国的科研生涯。

我在英国的导师是印度教授Vijay Nagarajan,是英国爱丁堡大学信息学系系统架构实验室的一名副教授,有着深厚的科研背景。我主要负责的是一个他旗下博士生之前做的一个关于分布式数据库的性能改良项目。

原来的项目对分布式数据库的数据准确性性能有了更高的要求。传统的分布式系统更多要求的是结果一致性,也就是不论网络延迟、硬盘故障等任何意外情况,我们都希望最后每个分布式数据库里的数据可以达到一致性。但是这个从不一致达到达到一致的过程中也充满着风险,尤其是在现实社会中,很多不同的事件有着先后顺序关系,最典型的就是类似银行账户的存款取款业务,如果有着强烈前后顺序关系的事件以不同的顺序到达了存储服务器,那么就会出现前后不一致的状况。这就衍生出了因果一致性:基于对不同读写事件计算偏序关系和依赖条件,从而有顺序地执行读写操作,让外界感官数据总是有其合理性的。

原版的论文和项目代码实现了四种不同的读写执行协议,有最基本的结果一致性协议,以及Bolt-On协议、Orbe协议、Orbe+协议等,后面三种都用不同的方式和基于不同的层面去实现因果一致性。而这里,原文中特地提到了对只读事务的优化。由于实现此类因果一致性需要对读写操作进行大量的干预和计算其依赖关系,如果将只读事务中每条指令分开执行,将会严重降低执行效率;而只读事务的存在意义也是保证每次读取的一批数据有着严格的因果一致性,这也是多次执行读取指令所无法做到的。而针对只读事务的实现,论文中的做法相对保守效率不高并且存在漏洞,并且代码中也缺乏对只读事务的实现部分。

我在其中的任务就是对原来的只读事务的算法进行改良和漏洞修补。针对原代码的修补主要有两个部分:一个是针对源代码中模拟服务器和客户端交互的改动,一个是真正运行在多台机器上的运行模式中的改动。其中前者的改动主要是增加系统后端针对只读事务的接口和函数调用链,以及后端系统针对存储结构的更新;后者的改动除了运用前者已有的架构以外,还需要增加客户端和服务器间的新的通信协议来保证对应只读事务请求可以成功发送和接受结果。

在整个科研的过程当中,我第一次接触关于分布式数据库的相关知识,也第一次阅读如此海量的源代码,这对我的耐性是一个很大的挑战。尤其是原版代码运用了大量C++新特性和命名空间嵌套的模式也没有任何注释,极大增加了代码阅读和修改的难度。不过在导师和师兄的积极指导下,我也逐步克服了这些困难,逐渐理解了源代码的基本思路,最后成功在源代码的基础上增加了相关的接口和回调函数,完成了对其中部分协议的只读事务的实现。

值得一提的是在充实的科研生活之余我们也抽空去了当地街区和其他的城市观光,领略到了独特的英伦风光,增长了我们队英国本地文化的认识。

总而言之,这次科研经历是一次难忘的经历,有很厉害的导师和负责人的团队,我在整个科研经历中也学到了很多全新的知识,我希望能在今后的科研经历中继续相关领域的研究。


 

北京大学信息科学技术学院版权所有 Copyright © 2010-2016