Erlang 二十年,如何在编程语言中占据一席之地?
声明:本文来自于微信公众号CSDN(ID:CSDNnews),作者: Fred T-H,授权站长之家转载发布。
译者 | 苏本如
1998 年开源发布的 Erlang 项目,在全球范围内只是个小众编程语言。
根据 TIOBE 最新发布的语言排行榜,Erlang 仅排名在第 65 位,市场份额占有小于 0.1%。但是作为一门函数编程语言,它拥有着强大的并行处理能力和容错机制,简单好用且易学。最开始,Erlang 之父 Joe Armstrong 编写的初衷针对的是类似于电话交换机那样的高可用性、高可靠性系统,但后来却成就了可靠性达到 99.9999999% 的目前世界上最复杂的 ATM 交换机!
须臾二十载,如今的 Erlang 项目仍然焕发着生机,并在技术淘汰中稳稳站住了脚跟。那么 Erlang 在这些年中经历了哪些发展阶段?Erlang 语言的知识阶梯如何影响了对它的采用?Erlang 及其社区未来的发展方向是怎样的?......下面就让我们一探究竟。
声明:本文已获作者 Fred T-H 翻译授权。
以下为译文:
大约在 10 年前,我加入了Erlang社区,当时正值Erlang语言的第一个炒作阶段。我们都被告知,Erlang语言代表着并发性和并行性开发的未来,因为它能够以最轻松和最快速的方式完成开发。你还可以得到免费的Erlang分发包,因为它已经变成了一个开源软件。在那个年代,一切都开始变得不可思议。虚拟机也刚刚获得了SMP支持,而在此之前,要想真正利用同一台计算机上的所有CPU,你必须在那台机器运行多个虚拟机。
在这篇文章中,我想先花点时间对这十年的大部分时间作个反思。然后我会介绍一些这期间发生在Erlang上的事情,例如炒作阶段对Erlang的影响?Erlang语言的知识阶梯如何影响了对它的采用?以及我在Erlang社区的十年中自身发生了什么变化?最后,我将探讨一下我认为Erlang及其社区的发展方向。
炒作阶段
炒作周期(或技术成熟度曲线)在一个产品或技术的生命周期中引入了“阶段”这个概念。这是一个营销概念,而不是一个科学概念,但是用它来描述事情的发展往往会很有用。而我最感兴趣的部分是“炒作阶段”,它就像一股发生在编程社区的淘金热。你可能见过一个或多个这样的炒作阶段,通常他们似乎都依附于某个杀手级应用程序,吸引着每个人蜂拥而至。
我能想到的“炒作”的例子有:炒作Ruby on Rails的“如何在 15 分钟内构建一个博客引擎”的视频(https://www.youtube.com/embed/Gzj723LkRJY,其中的“看看我没有做的所有事情!”仍然是一句有趣的话),炒作Kubernetes 的“在Kubernetes下使用Go语言”的文章(Kubernetes在此以前已经有了大量使用,但在那之后确实进入了一个爆发期)。在某种程度上,对Elixir和Phoenix的炒作或许也可以列入这个名单。
在这样的一个炒作阶段,大量的新来者蜂拥而至,都想来看看能捞点什么好处。有些人会留下,但多数人会很快离开。大多数人的停留时间可能只是几个月或几年,能真正地安顿下来并且坚持几十年的人非常少见。绝大多数人都是一些络绎不绝的先期采用者,他们从一个技术冲浪到另一个技术,嗅探最佳的机会,希望先行采用某种框架、语言或工具包,来获取一定的竞争优势。
所以通常的想法是,首先你要拥有一个真正的杀手级应用程序,然后人们就会涌入你的生态系统。杀手级应用程序会驱动这股人潮,只要你把它构造出来,人们就会蜂拥而至。如果你能留住他们中的小部分并保持他们的活跃度,那么在可以预见的未来,你将会拥有一个活跃的社区。这用一种奇怪的方式,让我想起了“雨随犁至”这个理论:
上帝加快犁地的速度。……这是奇妙的“人类主宰自然”的理论假定,天上的云会分配取之不尽的雨水…而[犁]是让野蛮变成文明的工具;能把沙漠变成农场或花园。……或者更简洁的表达,就是“雨随犁至”。
这一理论的基本前提是,通过人类的定居和农业活动可以影响干旱和半干旱地区气候的永久变化,使这些地区更加湿润。这一理论在 19 世纪 70 年代被广泛推广,作为美国大平原(曾被称为“美国大沙漠”)开垦定居的理由。这也被用来证明南澳大利亚在同一时期的边界土地上小麦种植的扩张是合理的。
如果我们能让一个大项目一直进行,开发人员就会出现,然后它就会自我维系下去。我认为这种观点显然是错误的,因为尽管Erlang在其最热的炒作阶段拥有了数十个杀手级应用程序,但是,它的社区仍然维持在很小的规模。下面,就让我们看看在那个时代,Erlang都有哪些杀手级应用程序:
ejabberd(诞生于 2002 年,第一个稳定版本发布于 2005 年):它是迄今为止最具可扩展性的主机聊天服务器之一(即使不是之最)。Ejabberd曾经是一个巨大的成功,在某种程度上来说现在仍然是。到目前为止,在StackOverflow上仍然能看到关于它的模块的提问。在 2011 年左右,它衍生出了MongooseIM分支,现在这两个解决方案仍然处在维护中。
CouchDB(2005):是根据CAP定理,用Erlang编写的第一个流行数据库,也是当时新潮的多主文档存储解决方案之一。虽然现在MongoDB是该领域的王者,但CouchDB在存储引擎方面仍然有其精神继承者,最出名的是BarrelDB,它现在还在维护中。
RabbitMQ(2007):几乎占据整个AMQP市场的一个消息队列软件,它现在仍在用并且很有价值。在流式工作负载方面,它经常被和Kafka一起讨论,尽管它们具有明显不同的特性和用例。
Facebook Chat(2008):Facebook Chat的初始版本是用Erlang编写的。由于许多内部因素,如系统稳定性的考虑,和内部C++工程师的强势地位,以及已经有了C++实现的一套解决方案等等,后来它用C++全部改写。
WhatsApp( 2009 年, 2014 年被收购):在Facebook的聊天系统摆脱了Erlang语言后,他们最终购买了WhatsApp这个众所周知的只用了 50 个工程师开发的服务于 9 亿用户的跨平台应用程序。它今天仍在使用,事实上,WhatsApp的开发者决定比以前更加深入地参与Erlang和Elixir社区中。
Riak(2009):是分布式系统世界展现自己优势的最佳例子之一。Riak是一个真正可靠的分布式键值数据库店,它是Basho Technology公司开发的一个当前仍在医疗保健系统和其他关键基础设施中运行的NoSQL数据库产品。在Basho Technology遭遇财务危机并被迫破产时(这在很大程度上是因为公司违反了信托责任,迅速走向了败亡),Bet365 买下了它的所有知识产权,并优雅地将其开放源代码,现在Riak数据库仍然在开源世界中运行,尽管它的支持力度和过去最好的时期比稍稍不如。
以上提到的杀手级应该程序,很多都是在乔·阿姆斯特朗的《Erlang编程》一书问世的时候出现的。它们制造了一场对Erlang大量采用的完美风暴,同时也为Erlang吸引了大量的旁观者,甚至对黑客新闻网站都产生了明显的影响,以至于它强制要求在某一天所有讨论都必须是关于Erlang的内部机制。
然而,喧嚣之后,留下来的人很少。
我认为,现在的杀手级应用程序的出现和过去相反,它是出于人们想在最初的炒作阶段分一杯羹的贪婪。任何应用程序,总有一个弱小的、早期的阶段,有人嗅出了它技术的有趣之处,决定喜欢它,并且将它构建出来,如果碰巧它成了一个杀手级的应用程序,那么就会进入一个更大的炒作阶段。人人都盼望从天上掉馅饼,一个成功的故事会培养更多的模仿者。另一个常见的现象是“重塑世界”阶段,每个人都花时间重新实现现有的一切,所以你会看到很多很多“与语言无关”的公告。
但是杀手级的应用程序本身从来就不能够实现开源语言的自我维系。其中一个有趣的结果是,像RabbitMQ和Ejabberd这样的产品,尽管很受欢迎,但其用户社区比贡献者社区要大得多。成千上万的公司使用他们的产品,但他们不一定会参与到Erlang社区中来。
毫无疑问,部分原因在于Erlang的大多数杀手级应用程序都在专门的基础设施中:你创建了一个其他人都可以使用的高可靠性黑盒组件,如果它工作得足够好,他们就不需要查看盒子内部。现在好了,几十个开发人员已经为数千种其他产品和服务提供了基础设施。而按照定义,专业化的基础设施是一个不需要大量人员就能产生巨大影响的地方。所以它们的贡献者群体和社区总是比靠近最终产品的群体和社区要小得多。例如,拥有数不清的网页开发人员的Web开发框架,或者更通用的基础设施,都可以把它们用到小规模的部署项目上,因为任何企业都可能找到它们的用途。
著作权归作者所有。