写点什么

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

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

关注

评论

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

软件测试| 普罗米修斯 - 基本使用

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

测试

详细解读 React useCallback & useMemo

夏天的味道123

前端 React

软件测试 | UI自动化设计军规

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

测试

美团前端二面常考react面试题及答案

xiaofeng

前端 React

美团前端二面经典react面试题总结

夏天的味道123

前端 React

容器化部署是什么意思?有什么优势?

行云管家

容器化

灾备是什么意思?怎么简单理解?

行云管家

灾备

物联网平台企业版:设备接入实例节点开发实战——实践类

阿里云AIoT

监控 前端开发 物联网 数据处理 网络性能优化

深度剖析React懒加载原理

xiaofeng

前端 React

【网易云商】概念解读稳定性保障

网易云信

稳定性 稳定性测试

滴滴前端二面常考react面试题(持续更新中)

夏天的味道123

前端 React

【干货】Maya学习过程中遇到的困难和解决方法

Finovy Cloud

联合 NVIDIA 完成首批 17 个自动驾驶模型优化

百度开发者中心

人工智能 自动驾驶

经常被问到的react-router实现原理详解

夏天的味道123

前端 React

深度探讨react-hooks实现原理

xiaofeng

前端 React

DataEase 集成 CAS 实现用户单点登录

搞大屏的小北

CAS SSO 单点登录 BI 分析工具 DataEase

软件测试 | UI自动化常用设计模式(二)

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

测试

软件测试 | 普罗米修斯 - 初识PromQL

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

测试

软件测试 | 普罗米修斯 - PromQL进阶

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

测试

模块7 王者荣耀商城-异地多活架构

KING

EMQ广州Office正式启用|在新一站续写开源

EMQ映云科技

开源 物联网 IoT emq 企业号 3 月 PK 榜

软件测试/测试开发 | 想测试入门就必须要懂的软件开发流程

测试人

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

自建MQTT迁移IoT物联网平台实战——实践类

阿里云AIoT

监控 物联网 消息中间件 数据格式 网络性能优化

海泰方圆精彩亮相第六届中国人工智能与大数据海南高峰论坛

电子信息发烧客

社交泛娱乐之外,融云 IM 在商业沟通中的实践

融云 RongCloud

IM 泛娱乐 通讯

软件测试 | UI自动化常用设计模式

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

测试

你有“ChatGPT综合征”吗:想搞钱,或是失业焦虑?

引迈信息

人工智能 AI ChatGPT

软件测试 | UI自动化中的分层设计

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

测试

低代码如何推动自动化未来

力软低代码开发平台

百度百舸 · AI 异构计算平台,加速自动驾驶模型迭代

百度开发者中心

人工智能 自动驾驶 计算 AIIaaS

前端一面react面试题指南

xiaofeng

前端 React

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