刘斯科斯特省是一个博士学位。奥胡斯大学的学生,他们与优步工程的Aarhus,丹麦办公室进行了2017实习。在本文中,LAU讨论了他对优步和技术挑战的道路,而在建立其实习项目作为我们基础设施团队的成员时面临的技术挑战。
在某些时候,每个计算机科学学生都站在十字路口,不得不决定是否在工业或学术界追求职业生涯。在我的硕士课程结束时,我发现自己在这个十字路口,决定狂热并追求博士学位。在奥胡斯大学。
2018年初,我的博士结束了。研究在地平线上,我再次面临着同样的问题:行业或学术界?这次我停下来考虑我的选择。我在大学里度过了七年半的学习,没有踏上学术界的脚,所以我真正知道在工业中的工作是基于我朋友和同事的故事。我决定我需要创造自己的经验,所以我选择追求软件工程实习。
我申请了一些地方,而是一个可能的实习项目之一优步奥尔胡斯我的兴趣:基础架构团队需要帮助构建YQL的其他功能,图表查询语言gr,优步的内部基础设施状态聚合平台。我在编程语言中投入了大量的研究,似乎是将我技能工作在生产环境中使用的语言上工作的绝佳机会。
实习项目:YQL中的聚合支持
YQL是用于从Uber的基础架构状态聚合平台检索数据的查询语言,gr。基本上,Grail是一个巨大的缓存,存储有关优步基础架构的最新信息,包括主机硬件信息和Uber存储解决方案的每个实例的磁盘使用情况。Grail由其他Uber基础架构服务杠杆,以及其他用途,发出识别和自动修复它们。Grail以内部存储解决方案管理系统中的发出识别,但由于其一般用途,因此Grail已启动为发出问题,但它成为自己的服务,因此它可以使其他系统受益。
内部Grail用户基数随着新的和现有服务经常采用而迅速增长。但是,Grail Hinges的成功是关于使用的,部分意味着是否容易获取数据。这是YQL进入图片的地方。
YQL是Uber的本质上图表查询语言,可作为Grail的用户界面。Grail的有用性受到YQL是否可以表达获取所请求信息的查询。例如,假设您想知道所有Uber的存储解决方案中使用的磁盘空间量。Grail包含所有主机上所有磁盘的磁盘使用信息,因此有必要的信息在存在,并且YQL允许您为每个磁盘获取数据。
但是,假设您想要的信息不是每个磁盘的磁盘使用率,而是磁盘使用总数。换句话说,您希望汇总信息。In this instance, the client could aggregate all of the relevant data, but with data from a host fleet the size of Uber’s, it takes a significant amount of time just to transfer the data from Grail to the client, an issue preventing other infrastructure components onboarding to Grail. This was the motivation for my internship project: building aggregation support in YQL.
使用聚合扩展YQL需要三个步骤:设计,实现和评估。
设计
在第一步,语言扩展设计,我不得不弄清楚扩展的语法和语义应该是什么。毫无疑问,这是该过程中最重要而困难的步骤,因为设计塑造了整个语言功能。如果您完成了错误,实现它,并找出您想要更改它,那么您必须通过迁移用户远离功能的繁琐任务,然后才能删除它。换句话说,最好在一段时间首先获得设计。
设计过程简单只是因为很容易让设计错误。在YQL聚合的情况下,我首先需要弄清楚需要哪些类型的聚合。事实证明,我谈论的大多数Grail用户甚至没有考虑是否需要聚合支持。但是,我发现了一些用例。其中一个是显示存储解决方案问题频率的UI。频率是计算客户端的,导致加载时间长(在16秒的球形乐园中)。这实际上是开发人员符合技术限制时发生的事情的一个很好的例子。他们只是在他们身边工作,以完成他们需要的东西,这可能导致技术债务。
已经确定了一些用例,我有一些东西来基础设计。下一步是设计扩展的语法和语义。这种设计必须满足三个要求:1)应该能够解决所识别的用例,2)它应该与现有的YQL一致,3)在现有的YQL查询评估引擎中实现应该是可行的。我与其他Grail团队成员讨论了可能的语法和语义,最后,我有三个设计建议RFC.。我用Grail用户分享了RFC,以便他们在我们在设计方面进行了反馈。最后,我们决定建立作为函数实现的聚合,因为该功能纯粹是现有YQL的扩展,它似乎满足所有三种设计要求。
实施和评估
下一步是实际实现YQL中的聚合。这一步非常顺利。我在设计步骤中花了很少的时间,所以我确切地了解了什么。此外,当我开始第二次猜测设计时,设计文件提醒我对我担忧的答案。
在实施并投入生产后,第三步和最终步骤是为了评估我们的用例。事实证明,聚合扩展并不完全解决了用例。这些聚合本身应该在他们所需要的地方指定它们。松散地说,问题是我们无法汇总最终的查询结果,只能汇集查询的子部分。聚合延伸是迈出的一步,但很明显它不足以自己。在YQL中确定了新的限制,我们需要删除,整个过程再次开始使用设计,实现和评估。
最终,YQL还通过变换扩展,因此不仅根据需要在整个查询结果上执行允许的聚合,而且还更换输出结果。通过实现的转换和聚合,最终可以解决我们最初识别的用例。
实习生经历外带
回顾我的实习,我希望在我本科学习期间,我希望我在超级公司等公司度过了一两次。我有很多乐趣,我必须学会成为一个工程师,建立新技术和部署系统的产品,以外的大学的绝缘。只有这样做的实习,我没有其他经验来比较,但我希望突出我对在Uber Engineering Aarhus的经验的影响:
成为团队的一部分
在Grail团队上,我没有觉得实习生- 我只是觉得就像团队的另一个成员一样。我不仅仅是我的实习项目的角落。我在系统的几乎所有部分都被分配了任务(我必须感受到急于找到导致期间内记忆杀死的巨大内存泄漏的原因),但我的经理和技术领先领域也确保了足够的时间来完成实习项目。我被邀请参加所有团队设计讨论和规划会议,当我表达它时,我的意见是考虑的 - 即使对于我不在身边的东西,也是如此。
用真正的语言
使用实际用户在查询语言上工作是令人兴奋的。有时,这也是令人沮丧的,我不能只做我喜欢这种语言的任何改变,因为它可能会违反服务。这意味着我无法宣染一些YQL的怪癖,这只是为了展示通过扩展到YQL等语言思考的重要性,以最小化第一名的怪癖数量。在某种程度上,它也与学术界有所不同,在那里有更多的自由来与事物一起游戏,因为没有家属。然而,总的来说,要讨论和实施真正语言的方向很有趣,最后,我觉得我留下了比我开始努力的更好状态。
立即和持久的影响
我对YQL的变化对Uber Engineering Aarhus的其他工程师产生了直接影响,他们并不害羞地表达他们的欣赏和建议,以便其他可能的YQL改进。这种积极的反馈循环非常激励,并鼓励我更好地使YQL更好,即使我不得不返回大学。
在Uber Engineering Aarhus,我曾看到第一手行业有令人兴奋和具有挑战性的服务,我觉得做出了更好的准备做出决定我未来的职业道路。
如果为您的Grail兴趣等大型基础设施系统处理工程挑战,请考虑申请职务在我们的团队或作为我们的奥尔胡斯工程办公室的实习生!






