2010年,$Expective_COMPANY成立时,它在$TECHBRO_创始人车库的一台服务器上运行。从那时起,我们经历了由VC资助的爆炸性增长,今天我们有来自全球各地的数亿日常活跃用户(DAU)通过我们的移动应用程序和著名公司的美元访问我们的产品。通用域名格式。自那以后,我们对后端进行了几次由恐慌引发的更改,以管理我们的技术债务(通常是在一次引人注目的停机之后),防止我们的服务器崩溃。这些年来,我们现有的技术堆栈一直为我们提供良好的服务,但随着我们寻求进一步发展,很明显,完全重写我们的应用程序将以某种方式防止我们在获得客户方面每年损失20亿美元。
正如我们在之前的博客文章中提到的那样,$PROFECTION_COMPANY后端在历史上是用$PROFECTION_语言开发的,并且是在$PROFECTION_开源_框架的基础上构建的。为了满足我们的独特需求,我们设计并开源了$AN_ENGINEER_take_A_history_类,这是一个高度可用的即时编译器,只需$unremarable_语言。然而,即使使用自定义运行时,我们最终也开始在第99百分位延迟统计中看到零星的峰值,随着我们扩大规模以处理不断增加的DAU计数,这种峰值变得越来越明显。幸运的是,我们所有的软件都是为自省而从头开始设计的,使用我们从Brendan Gregg的网站复制的一些BPF脚本,我们的内部分析工具$著名的公司工程师确定性能瓶颈是在垃圾收集器中花费时间的结果。
起初,我们试图搞乱一些我们并不真正理解的垃圾收集器参数,但出乎意料的是,这并没有神奇地解决我们的问题,所以我们完全禁用了垃圾收集。这增加了我们的内存使用,但我们的自动按需定标器为我们解决了这一问题,如下图所示:
然而,最终,我们之所以决定转学,是因为我们很难用不起眼的_语言聘请新人才,尽管美国各地几十所大学都在教授这种语言。我们在$PRACTICAL_OPEN_SOURCE_FRAMEWORK上发表的博客文章在Reddit上发表时,获得的支持率似乎也更低,这巩固了我们的信念,即我们的技术堆栈现在是遗留代码。
我们知道,我们需要找到一些能跟上我们的公司规模的东西。我们评估了一些有希望的替代方案,我们根据他们在网站上的要点数量、他们出现在黑客新闻头版的频率,以及我们让办公室人员填写的重要语言特征(性能、效率、社区、易用性)的电子表格,对这些方案进行了选择和排名。
由于我们的电子表格满足了随机性的强大统计保证,我们能够重用它来取代应用程序的CSPRNG。
经过仔细考虑,我们决定重新构建我们的平台,使用$FLASHY_语言和$hypod_技术。根据Stack Overflow开发者调查,$FLASHY_语言不仅广受欢迎,而且是跨平台的;我们也在用它来重新实现我们的移动应用。重写我们的核心基础设施相当简单:因为我们拥有的工程师比我们可能需要的更多,甚至不知道该怎么办,我们只是冻结了处理错误报告的工作,并将我们的工作转向了$HYPED_技术。我们最初在适应$FLASHY_语言的一些怪癖方面遇到了一些困难,并在$HYPED_技术上遇到了一些错误,但总体而言,它们强大的新功能让我们消除了以前的解决方案必须处理的一些复杂性。
在不停机的情况下部署更改需要一些仔细的规划,但这也不太困难:我们只是硬编码状态页面,以便在推送新更改时不进行更新,让用户猜测我们的服务是否已启动。管理增量部署是关键:我们积极地对新代码进行了A/B测试。我们的内部研究表明,通过偶尔向用户展示一个全新的界面,然后在下次加载页面时切换回旧界面,可以提高用户参与度,因此我们确保基于一篇我们发现与多武装匪徒有关的媒体文章实现这样一个系统。
随着我们的重写工作现已完成并向所有客户推出,我们认为这项工作对我们和我们的团队来说都是巨大的成功。我们已经衡量了我们的绩效,您可以看到以下结果摘要:
每一个对我们来说重要的指标都在重写后大幅增加,我们甚至发现了一些与我们不再相关的指标,比如错误数量、用户挫折感和维护成本。今天,我们将在GitHub页面上提供一些我们能够负担得起的开源代码。它本身是无用的,而且与我们的基础设施紧密相连,但你可以将其作为明星,让我们看起来更相关。
人们常说,完全重写软件充满了风险,但我们在$PROFIMENT_公司喜欢下大赌注,很明显,这一次得到了丰厚的回报。虽然我们在这篇博文中重点讨论了后端的变化,但正如我们前面提到的,我们在移动应用程序中也使用了$FLASHY_语言,因为我们没有资源为每个平台编写本机应用程序。不幸的是,为了增加锁定,这些重写也意味着我们将拒绝第三方API访问我们的服务。我们知道我们的一些用户出于可访问性的原因依赖这些界面,但我们$PROFIMENT_COMPANY致力于改善我们为残疾人提供的服务,只要您不使用任何辅助技术,这些技术在我们的应用程序中根本不起作用。
我们希望你把我们公司的轶事内化为某种真实的事实,并把它展示给你公司的CTO,这样他们也可以考虑重新设计他们的架构,就像我们已经做过的那样。我们知道你会忽略一个事实,那就是你不是我们,我们有足够的工程师和资源来做我们喜欢做的任何事情,但这个决定会毁掉你的初创公司,所以我们不会很快看到你关于你使用$HYPED_技术的经历的博客帖子。如果你无法影响公司的使用,你仍然可以在下一次出现语言战时提出,以便得分。
如果你正在读这篇文章,并且像我们一样对$HYPED_技术感兴趣,我们正在招聘!一定要查看我们的工作页面,那里将没有与$FLASHY_语言相关的职位。
问题?评论?更正?欢迎随时联系我[email protected]; 我';I’我很想听听你的想法!