写点什么

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:006143
用户头像

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

关注

评论

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

百度工程师移动开发避坑指南——内存泄漏篇

百度Geek说

ios android 开发 企业号 5 月 PK 榜

2023年汽车软件行业趋势分析:安全性是汽车软件开发的重大挑战2023年汽车软件开发

龙智—DevSecOps解决方案

汽车软件安全 电动汽车软件 汽车软件开发

“全球金牌课程”6月17-18日 · CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

Scrum 敏捷

软件测试 | 开发接口

测吧(北京)科技有限公司

测试

重磅!用友荣登全球5强

用友BIP

【经验总结】你想知道的BGA焊接问题都在这里

华秋PCB

工具 电路 PCB PCB设计 焊接

数据在 Mocaverse 项目启动过程中是如何发挥作用的

Footprint Analytics

区块链游戏 NFT 链游 Mocaverse

“敏捷教练必修课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

Scrum 敏捷 敏捷精髓 敏捷实践 A-CSM

年营收将破千亿?运营商云的底气在哪里?

ToB行业头条

TDenigne 签约路特斯科技,助力高性能跑车领域数据架构升级

TDengine

时序数据库 #TDengine

FP&A整合,全面预算管理的制胜法宝

智达方通

全面预算管理 财务规划和分析 FP&A

领先芯片供应商u-blox通过Perforce Helix Core加强协作,实现基于组件的开发

龙智—DevSecOps解决方案

组件化 芯片设计

校园校区共享电单车怎么投?找谁投?

共享电单车厂家

共享电动车厂家 校园共享电动车 共享电动车投放 共享电单车合作

NGINX 与当下爆火的 ChatGPT 聊天,回答质量参差不齐

NGINX开源社区

nginx ChatGPT

数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(上篇)[xgboots/lightgbm/Catboost等模型]--模型融合:stacking、blending

汀丶人工智能

数据挖掘 机器学习 深度学习 数据建模

面面俱到!一份囊括35+核心知识点的Java架构师面试文档

小小怪下士

Java 程序员 java面试 Java八股文

软件测试/测试开发丨Python控制流-判断&循环

测试人

Python 软件测试 自动化测试 测试开发

CST为什么要关闭 GPU 卡的 ECC 模式而开启 TCC 模式?操作使用【详解】

思茂信息

cst cst使用教程 电磁仿真 cst电磁仿真 cst仿真软件

一文看懂OpenStack SR-IOV

统信软件

4大特性看Huawei Cloud EulerOS为开发者带来平滑迁移体验

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

ControlNet: 控制扩散模型的魔法

Zilliz

AIGC Towhee Stable Diffustion controlnet

Apache Kylin 5.0.0-alpha 正式发布,能力全方位提升!

Kyligence

开源 Apache Kylin

融云 WICC 2023 定档!「出海嘉年华」穂城来袭!

融云 RongCloud

通信 社交 融云 出海 wicc

Neuron 提供免费无限时试用:完整体验数十种工业协议连接

EMQ映云科技

工业物联网 网关软件 工业协议

MobTech ShareSDK|助力预热618

MobTech袤博科技

【论文分享|SIGMOD'22】WeTune 自动发现和验证重写规则

Databend

数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(下篇)[xgboots/lightgbm/Catboost等模型]--模型融合:stacking、blending

汀丶人工智能

人工智能 数据挖掘 机器学习 深度学习 数学建模

打造面向未来的开发者服务新范式,龙蜥社区开发者服务平台 devFree MeetUp 硬核启动!欢迎报名

OpenAnolis小助手

Meetup 龙蜥社区 基础设施SIG devFree 开发者服务平台

龙智即将亮相2023上海国际嵌入式展,为嵌入式开发提供全球领先解决方案

龙智—DevSecOps解决方案

嵌入式软件 嵌入式设计 嵌入式开发

小程序6大开发框架对比分析

Onegun

小程序 小程序框架 小程序容器

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