写点什么

CrowdStrike 为什么从 Scala 迁移到 Go

  • 2015-12-29
  • 本文字数:1346 字

    阅读完需:约 4 分钟

自 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 读者交流群(#2))。

2015-12-29 18:005987
用户头像

发布了 1008 篇内容, 共 432.7 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

AI Agent 工程师绕不开的必修课:API 网关 vs API 管理

阿里巴巴云原生

阿里云 AI 云原生 API网关

TortoiseSVN使用-合并深度介绍

刘大猫

人工智能 svn 算法 数据分析 tortoiseSVN

出版社教学资源网的主要功能

北京木奇移动技术有限公司

AI教育 软件外包公司 出版社 教学资源网

通义灵码你问我答:看看 5 月上线了哪些新功能?

阿里巴巴云原生

面了个腾讯拿 38K 出来的,让我见识到了基础的天花板

Geek_Yin

Java 程序员 Java 面试题 java 架构

油气行业AI转型的三昧真火

脑极体

AI

OpenAI SDK 上新 RealtimeAgent;OpenAudio S1 语音生成模型:语调情感标记,精确控制风格

声网

使用 Amazon Q Developer CLI 调用 MCP Server 实现 Amazon Support 案例自动创建

亚马逊云科技 (Amazon Web Services)

VMware VeloCloud SD-WAN 6.2 新增功能简介

sysin

velocloud

ETLCloud:重新定义AI驱动的数据集成未来

谷云科技RestCloud

人工智能 AI 数字化转型 ETL 数据集成

2025Go面试八股(含100道答案)

王中阳Go

Go 最新面试题

鸿蒙仓颉语言开发实战教程:商城搜索页

幽蓝计划

Rocky Linux 9.6 正式版发布 - RHEL 100% 1:1 兼容免费发行版

sysin

Rocky

BeeWorks 协同办公能力:局域网内企业级协作的全场景重构

BeeWorks

即时通讯 IM 私有化部署

华为初面 + 综合面试,附上面试题,share 给大家~

Geek_Yin

Java 程序员 java面试 Java面试题

AI浪潮下的认知重构:从一个数据老兵的转型思考

松子(李博源)

职场 职业转型 #大模型 #产品经理

AI Agent需要什么样的数据库?

元闰子

其实,从程序员到架构师,只需要掌握这些知识点就够了!

程序员高级码农

程序员 架构师

IM即时通讯软件,构建企业局域网内安全协作

BeeWorks

即时通讯IM 私有化部署

React-native实战系列

溪抱鱼

前端 React

95年,28岁、聊聊外包四年的真实感受

Geek_Yin

Java 程序员 java面试 Java面试题

Go语言是现在进大厂的捷径?快来看看Golang学习语言图

Geek_Yin

Java 程序员 java面试 Java面试题

相较于其他局域网聊天工具,BeeWorks优势在哪?

BeeWorks

即时通讯 IM 私有化部署

企业im,为企业设计的私有化即时通讯工具

BeeWorks

即时通讯 IM 私有化部署

通义灵码你问我答:看看 5 月上线了哪些新功能?

阿里云云效

数字人如何通过垂类营销大模型获得“行业超脑”的能力

东信营销科技

智能体 #AI AI营销 #数字人 #东信营销科技

全网首发!马士兵内部共享—1658页《Java面试突击核心讲》

Geek_Yin

Java 程序员 Java面试题

驶向智能未来:车载 MCP 服务与边缘计算驱动的驾驶数据交互新体验

EMQ映云科技

人工智能 边缘计算 大模型 MCP

什么是低代码?2025年低代码开发平台发展现状及标准化研究

优秀

低代码 低代码开发平台

出版社题库系统的开发

北京木奇移动技术有限公司

题库系统 软件外包公司 出版社

软件测试 | 使用 Playwright 实现滑动验证码

测试人

软件测试

CrowdStrike为什么从Scala迁移到Go_Scala_谢丽_InfoQ精选文章