CrowdStrike为什么从Scala迁移到Go



CrowdStrike为什么从Scala迁移到Go

自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数据。


Read full article from CrowdStrike为什么从Scala迁移到Go


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts