写点什么

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

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

关注

评论

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

高性能日志结构化引擎 — GreptimeDB Piepline 设计与实现技术揭秘

Greptime 格睿科技

时序数据库 日志储存 日志引擎

万字长文2024最全Go面经汇总

王中阳Go

Go 面经 大厂

Hadoop优化|全面调优攻略 | HDFS、MapReduce、YARN性能提升秘诀 | 专家实战分享!

敏捷调度TASKCTL

hadoop hdfs YARN MapReduce服务

枫清科技高雪峰:从大模型到行业智能体的智能转型之路

Fabarta

大模型 #人工智能

数据虚拟化技术揭秘:如何整合多样数据源及其独特优势

Aloudata

数据分析 数据开发 数据集成 数据编织 数据虚拟化技术

高通中国区董事长孟樸:5G与AI的融合正加速企业数字化转型步伐

新消费日报

TG机器人链游开发项目:迈向去中心化游戏新时代

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

TikTok直播有什么要求?

Ogcloud

TikTok tiktok运营 tiktok直播 tiktok直播专线 tiktok直播网络

《深入浅出Apache Spark》系列③:Spark SQL解析层优化策略与案例解析

数新网络官方账号

sql 大数据

【教程】第二章:设计任务管理系统 —— 胸有成竹,步步为营

NocoBase

开源 低代码 教程 无代码

Zabbix 和 Prometheus 选型对比

巴辉特

Prometheus zabbix

AE2025视频后期优化处理:After Effects 2025 for mac 激活版

你的猪会飞吗

mac软件下载 Mac破解软件 AE2025破解版

数据分散在不同的业务线,如何对全域数据做高效整合和集成?

Aloudata

数据仓库 数据分析 商业分析 noetl

指标平台帮助企业在业务运营过程中快速定位和解决业务问题

Aloudata

数据仓库 数据分析 指标管理 指标平台 指标开发

前端三件套配合豆包MarsCode 实现钉钉官网动画

TRAE.ai

程序员 AI 钉钉 开发

为什么建议不要使用TikTok共享节点?

Ogcloud

TikTok tiktok运营 TikTok养号 tiktok矩阵 tiktok网络

GeoAI驱动土地价值重塑!中国地质大学(武汉)&和鲸社区Workshop圆满结束!

ModelWhale

Workshop 地球科学 geoai 遥感数据

无代码MES是什么?MES系统包含什么功能?

积木链小链

无代码 无代码平台 无代码MES

DeFi 4.0峥嵘初现:主权金融时代的来临

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

SpringBoot必须掌握的常用注解!

王磊

LeetCode题解:2665. 计数器 II

Lee Chen

指标平台为业务部门提供实时、准确的数据支持,以助力业务决策

Aloudata

数据分析 指标管理 指标平台 指标开发

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