重写雅虎!BOSS DATAHUB。
故事(9), 雅虎(1)2008年,我的方法写博客在破坏技术和希望将其转化为令人惊叹,页面浏览量或至少超出工作的情况下,正在爆炸英语教学。我尝试了这种方法与各种程度蟒蛇那processing.js.,为什么幸运的僵硬鞋和其他一些人。
这是相当良好的密度,新奇和新近的成果是诱惑搜索相关众神的等待者 - 并最终打开了我在技术的第一份工作中,在雅虎工作了。上雅虎构建您自己的搜索服务(老板)。
老板的那一周宣布,我写了一系列关于它的博客帖子:1。雅虎在Django构建自己的搜索服务,2。搜索雅虎的食谱老板在Python.3,3。抛光我们的Django和BOSS搜索服务,4。从带有老板mashup的哈克伦斯剥线红线。足够的帖子,他们被卷混淆并伸出讨论。
经过六个月的讨论后,躲避裁员和超级冻结,他们将我作为一个小时的承包商从东海岸远程工作。我曾是所以绿色,并准备工作或现在做任何事情,我再次有健康保险。
BOSS的第一个版本允许您通过API查询雅虎的搜索结果并重新混合结果。当我加入团队时,那个版本已经在运行,我们刚刚开始工作第二个版本,这将允许您提交自己的数据,然后查询您自己的数据和雅虎的结果,将它们合并在一起。在某些方面很像Swiftype会成为。
产品对我来说没关系,我很高兴能够在技术上工作。没有人愿意写的yui., 闪光,APC.集成要显示文件上传进度?让我!没有人愿意在前端工作,因为它是矛盾的,它们下面(a)和(b)解决mozilla 1.5和IE6跨浏览器兼容性令人惊讶困难?让我!没有人愿意学会调试erlang工作流管理器?让我!
该团队是融合的融合,只能在一个萎缩的公司中发生,其过程在高增长期间擅长Excel。团队的三名成员撤回了支持可口的雅虎!将其移至维护模式,另一个十点正在参与对内部客户的多年追求,以进行自定义延期vespa.。
Vespa你可以想到Elasticsearch.,虽然当时最近的比较是solr.。以及称为托管Vespa的自定义扩展名是一个南方在Vespa之上跑了,为历史上一名单个租户系统提供了多租户。
托管Vespa背后的技术可能比一项技术从一项技术从事一直在努力追随冠军,这是一个可能的人。您可以创建一个包含许多字段的集合:
Int1,Int2,... Intn Float1,Float2,... Floatn str1“,str2,... strn
然后我们沿着以下行创建每个用户字段的映射到底层架构:
age => int1 name => str1 city =>“str2
在查询和索引时间时,用户字段将被翻译成集合的字段,离开底层Vespa实例是幸福地不知道它支持多个租户。如果采用已经采用,这一直挑战,但过度的收养并没有注定成为我们的核心挑战。
新用户将上传XML文件任何他们想要的格式,通过我们的DataHub运行,该数据量规范化了格式,并将归一化数据发送到Schemainauffering,执行一些针对每个字段的值匹配,以识别字段的类型并将其映射到底层Vespa字段。
正如我们对Beta用户带来的那样,我们开始接收更大且更大的文件。这些文件开始触发内存不足DataHub中的错误。800 MB的文件需要8GB的内存,我们正在运行我们访问的最大物理机器,我相信有大约12GB的内存。我们获得大于800 MB的文件,由于令人害怕的情况无法获得更大的机器David Filo运行的硬件审查流程是一位雅虎的联合者之一,考虑过我们的服务器也未充分利用更多的能力。
这是一个问题。
两个问题创建了此内存扩展。首先,该实现创建了几个加载数据的意外副本,当突变状态的团队开始以像erlang这样的功能编程语言开始工作时相当容易。其次,它依赖于dom解析器而不是sax解析器用于解析和编写XML文件。
敏捷是Fad du Jour,但在实践中,我们的团队具有非常强烈的个人代码所有权文化,而且大多数组成部分都有一个单身老板,他们是唯一可以修改或运作该代码的人。这意味着定影问题中的长杆经常摇曳代码所有者,并且很少很少正在实现瓶颈的解决方案。这对我来说尤其如此,这是一位拥有一年的工程师,其中一年的经验,在一支关于一支写软件六到二十年的人。
我去工作说服DataHub的所有者SAX Parser.解析器将使用比Dom解析器更少的内存,但有点令我惊讶的是,我无法在丝毫上摇摆。相反,我试图摇摆很小。我们讨论了为什么增量解析数据子集的理论方面将使用比加载整个文件更少的内存。我们审查了比较方法和显示SAX使用较少的内存的基准。我创建了一个比较方法和显示降低内存利用率的示例实现。
没有一个响应。我的队友坚持不懈地使用dom解析器使用较少的内存,识别可能导致内存膨胀的潜在内核错误。
Wanting to solve the OOM problem–and perhaps I was the slightest bit caught up in proving my point after several weeks of disagreement–I attempted updating the implementation’s DOM parser with a SAX parser, but the component was missing tests, making it difficult to know if the replacement worked. Likewise, replacing the parser would only address half the memory bloat issues, there were still the accidental memory copies to consider.
随着牵引者,我去上班了一个周末。我开始写一套全面的测试套件,然后我从头写了一个新的实现。这不是一个非常复杂的系统,也许是两条代码上的代码上,但是对于我的内存中最好的重写是大约九行代码,包括测试。重写传递了所有测试,它暴露了一个相同的界面,因此可以插入现有的工作流管理器,流程文件更快,最重要的是基准显示它与文件大小无关的常数内存,则占据每个并发文件几百MB。它很简单,它很快,它的工作,这是一个替代品。
它进入了一个SVN分支,我与团队分享了结果。
如果您预计这在英雄叙述中的最终叙述,这不是您的故事。这是工程管理的不同时代,两年多,我只能记住三个与我的经理人,而你,亲爱的读者,将无法清楚地知道那些人的第二个是意外的第二天早上,当我的经理从我的五脚间墙上抓住了我。
这是一个简短的讨论。“如果你经验丰富,我现在会开火。删除重写,删除测试,再也不会这样做了。“所以我删除了重写。我删除了测试。此后很快就有了微软雅虎!搜索交易暂停了我们的v2发射,一年后,球队的伤害了。
DataHub从未处理大于800 MB的文件,也不会获得测试,但我收到了消息。六个月后,我离开了Digg的更大和更好的事情。
几年来决定我想从雅虎的时间和这个特殊的DataHub拍下来夺走我想要带走的东西。我回顾了我的行为遗憾:我无法想象一个机动对球队的心理安全而不是重写别人的工作。我也可以把它认识到它是什么:一个误导的尝试在我没有经验的情况下毫不逊于一个挣扎的球队,很少的意识,比我今天的工具更少。
What has stuck with me most is an echo of what a member of my church advised me when I applied to college: “Don’t focus on the quality of the teachers, they’ll be excellent everywhere, focus on the quality of your peers.” I suspect there is more variance in the quality and qualities of company leadership than undergraduate education, but it’s been irrefutably true that what I’ve learned and accomplished has directly corresponded to the teams I’ve gotten to work with.