BT

你的观点很重要! 快来参与InfoQ调研吧!

CrowdStrike为什么从Scala迁移到Go

| 作者 谢丽 关注 3 他的粉丝 发布于 2015年12月30日. 估计阅读时间: 4 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

自2012年开始,安全公司CrowdStrike就使用Scala开发他们的应用程序,Scala成为其技术栈的重要组成部分。但随着工程师团队由早期的5人扩大到现在200多人,他们决定迁移到Go语言技术栈。近日,该公司云计算工程部门的高级主管Jim Plush撰文阐述了他们采取这一举措的原因。

不过,Jim首先声明,迁移到Go并不是说将Scala从CrowdStrike的技术栈中完全清除出去,实际上,它可以补Go之不足。Scala是CrowdStrike机器学习/分析技术栈的重要组成部分。它可以同该公司使用的Java项目进行互操作,而且能够提供不错的DSL供分析师使用。也就是说,Scala更多地成为一种专用工具,而不是核心开发语言。

作为一名技术负责人,Jim希望代码具有很好的可维护性,开发人员很容易跨项目工作,而新进人员很容易跟上项目的进展。早在2009年尚在其他公司工作时,Jim就开始认识到Scala的扩展性问题。他们遇到了一个本可以几分钟解决的Bug,但却因为编写那段代码的人正在度假而花了几个小时。这说明团队出现了分化。Jim指出,这种分化同Scala语言本身的特点有关。通常,Scala开发人员分化成了两个阵容:一个将其看作“更好的Java”;一个将其视为“Applicative Functors”。前者喜欢Scala的简洁性以及那些让它比Java更惹人爱的标准特性;后者则关注函数式编程。这两种风格没有优劣之分,但确实会导致团队的分化。而且,随着工程团队的日益壮大,这种分化会愈加明显,新进人员要跟上项目的进展就更加不易了。

当然,这不是他们迁移到Go的全部原因。他们还有许多与构建环境相关的痛点,如SBT、IDE环境、构建时间长、JAR包老而大,等等。另外,大量的ScalaZ概念和长时间的前期培训降低了开发效率。据Jim介绍,他们并不是唯一存在这些痛点的公司,Twitter也经历过。因此,他得出结论:

使用Scala,你可以拥有一个非常高效的小型团队,但当你尝试将工程团队的规模扩大到50人以上时就非常困难了。

相比之下,Go存在的其中一个原因就是让开发人员更高效,限制实现方式的种类。在Sean Berry的鼓励下,Jim经过深入研究发现,Go可以解决他们使用Scala时在组织扩展层面上遇到的许多问题。Go有诸多优点:构建快、二进制文件小、单文件、更好的工具、内置测试框架、性能分析器、不错的并发模型,等等。他们用Go逐个完成了多个项目的开发,能够使用Go的开发人员越来越多。开发人员加入任何一个Go项目都可以很快弄清楚当前正在进行的工作。使用Go还有一个好处,就是招聘更便利了。他们可以招聘任何语言背景的开发人员,然后进行为期数周的Go语言培训即可。有位起初抵制迁移的高级工程师在做完他的第一个Go项目后告诉Jim:

那个库,我读了一遍就确切地知道它在做什么了,而那个库的Scala版本,我已经读了四遍却仍然不知道它在做什么。我知道你的伙计为什么那么喜欢它了。

现在,CrowdStrike大部分的服务都是使用Go语言编写的。它们每秒处理几十万条消息,每天处理数TB数据。


感谢魏星对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者(已满),InfoQ读者交流群(#2)InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

好眼熟的赶脚。。 by 孙 庚泽

这文章看着好眼熟啊,是不是之前就有过。。

没了解过GO by 李 鹏

Go语言真的有传闻中的那么好么?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT