一位挪威博士的PolarDB资深架构师之路

写在前面:本文作者Øystein Grøvlen,来自挪威,过去的三年中,一直在阿里云PolarDB团队的优化器和执行器团队担任资深技术专家。2018年来到杭州阿里巴巴公司, 一年后,又搬到了加利福尼亚州桑尼维尔的阿里巴巴公司办公室。

我的软件开发之旅始于作为美国的一名交换生,在那里我在APPLE II电脑上接触到了BASIC语言。我发现,我对能够创建自己的程序来解决不同的问题感到非常满足,这激发了我在Norwegian Institute of Technology的学习期间去学习计算机科学,期间发现数据库和信息检索特别有趣,因此我决定在该领域攻读博士学位。我与挪威电信的研究部门取得了联系,最终在他们的研究项目ClustRa上工作了一段时间,同时攻读了基于Compensation-Based Query Processing课题的博士学位。
获得博士学位后,我开始在一家初创公司工作,该公司旨在将ClustRa数据库系统商业化。ClustRa是针对电信运营的高可用数据库系统。Clustra的体系结构与MySQL集群非常相似,你们中的许多人可能听说过。我们的工作重点是事务、分区、复制、故障容错和恢复。那是一段有趣的时光,解决了许多有趣的问题。

不幸的是,当网络泡沫破裂时,我们耗尽了资金,但我们很幸运,Sun Microsystems决定收拾残局。在Sun公司,我继续在Clustra上工作了一段时间,然后开始使用Java实现的数据库Cloudscape的开源版本。当Sun后来购买MySQL时,我切换到MySQL上工作,并且获得了在优化器团队中工作的机会。Sun后来被Oracle收购,我在加入阿里巴巴之前,在Sun/Oracle从事了10年MySQL的工作。

我发现从事查询优化和处理真的很有趣。我最喜欢的部分是研究如何让查询运行得更快。PolarDB基于MySQL代码,因此我可以运用已有的优化器经验来使PolarDB成为更好的产品。

我觉得为PolarDB团队工作特别有意义的是,阿里巴巴愿意为PolarDB投入大量资源。我们有一大群人在改进产品,我认为我在这里工作的这段时间,我们能做的事情是令人惊叹的。我大部分时间都花在支持并行查询处理项目上;而MySQL只能使用一个线程来执行查询,PolarDB可以将查询执行划分为多个线程并行执行。

我会被问到是否可以给其他研发人员提供一些建议,指导和帮助他们实现成为资深技术架构师的职业目标。我认为有许多不同的成功之路,有些人可能会认为,一部分成功者是因为幸运地在正确的时间出现在了正确的地点。但是,根据我的经验,我想讨论一些我认为对于软件架构师角色至关重要的方面。

深入研究

我认为学习一个软件系统是如何工作的唯一方法就是深入代码进行研究。不要假设你理解代码是如何工作的,而是要通过跟踪执行过程或使用调试逐步执行代码来验证它。

我遇到了很多开发人员,当遇到错误时,不去对代码的工作原理有很好的了解,而是尝试不断反复试错来走捷径。他们可能会成功地修复这个BUG,但是他们对代码是如何工作的知之甚少。很多时候,这种方法还导致了似乎可以解决BUG的修复,但是潜在的问题可能仍然存在。不要只是满足于所有的测试成功,而是要通过跟踪/调试验证它是否按预期运行。第一次可能需要更长的时间完成工作,但是当你在同一领域被分配另一项任务时,你就会非常受益。

一位挪威博士的PolarDB资深架构师之路

Optimizer Trace is a great tool to learn about the MySQL Query Optimizer

通过示例学习

每个人是不同的。我发现通过执行一些特定示例来学习新代码更容易,然后推广这种方法。有些人可能仅通过阅读就成功地理解了代码,但是我想我的心智还没有达到这个水平。

我在ClustRa的第一个任务之一是让事务回滚成功。这个任务的大部分代码已经完成了,但是仍然有一小部分缺失了。通过仔细跟踪事务的执行情况,我花了很长时间才发现缺失的部分并使其正常工作。我认为,如果我仅通过阅读代码来识别缺少的部分,那将花费我更长的时间。

不要害怕问

当你偶然被一个问题绊住时,不要害怕问你的同事。分享你对问题的理解,并征求他们的意见。大多数开发人员非常乐意分享他们所知道的。但是,在提出问题之前,请确保你已经付出了一些努力来理解问题。否则,你的同事可能会觉得你只是想让他们做你的工作。

分享你的智慧

与你的同事分享你的知识。欢迎他们提出问题。在这个过程中,你经常会学到一些东西。
另外,在技术文章中记录你的工作内容,并寻求机会在公开场合分享。这是让其他团队或公司以外的人了解你和你的工作的好方法。
一位挪威博士的PolarDB资深架构师之路

了解你的用户

我发现许多开发人员在理解用户需求方面投入的努力太少了。通常开发人员更喜欢要么快速直接的解决方案,要么在技术上更 “有趣”,而不是解决实际问题。可以多问问自己:“这将如何使用?”,“选择的交互对用户实用吗?” 等等。

在开始设计之前,最好指定一些客户场景,来描述将如何使用此新功能以及它将解决什么问题。

保持耐心

成为技术、产品或代码库的专家需要时间。我花了很多年才认为自己是MySQL查询优化器的专家。虽然拥有丰富的经验当然很好,但我认为如果你经常换工作或技术,你将错过获得深刻见解的机会,而这是自己成为专家的必要之路。换句话说,要有耐心,并为自己设定长期目标!(完)
一位挪威博士的PolarDB资深架构师之路

上一篇:Java的历史


下一篇:call apply bind 的区别,this的四种绑定方式