5

世界上最低调的编程语言,高并发的王者,程序员翻身的秘密武器!

 11 months ago
source link: https://www.51cto.com/article/768909.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

世界上最低调的编程语言,高并发的王者,程序员翻身的秘密武器!

作者:liuxin 2023-10-08 09:38:06
Discord 就是 Elixir 的早期采用者, Erlang VM 是我们想要构建的高并发实时系统的完美候选者,过去两年,系统中的并发用户数已达到近 500 万,每秒有数百万个事件...... 如果让我从头再选择一次的话,我还会选择Elixir。

1998年,爱立信推出了一款著名的交换机AXD301, 这款交换机实现了惊人的9个9(99.9999999%)的可用性。

一般的系统,实现5个9,即一年停机5分钟已经相当不错了,9个9意味着20年的运行时间内只有0.631秒的停机时间。

实现这个奇迹的关键就是爱立信发明的编程语言Erlang。

图片
图片

Erlang的作者Joe Armstrong在采访时说道:

如果Java是“一次编写,到处运行”,Erlang就是“一次编写,永远运行!”

图片
图片

奇怪的是,这么一个神奇的语言,爱立信竟然禁止在公司内部使用了,这是为什么呢?

Erlang的诞生其实是个挺无奈的过程。

最早的时候,爱立信只想找到一个语言,更好地构建下一代电信系统。

Joe Armstrong等人拿着一个大“筛子”,把20多种语言“筛来筛去”, 标准是:

1.为了提高生产率,要选择高级的声明式语言

2.为了支持高可用的电信系统,在语言层面就得支持并发和错误恢复

第一条“筛”掉了C、PASCAL, Ada, C++等语言,第二条又筛掉了Lisp, Prolog,Parlog等语言。

没办法,只好自己发明一个新语言了,这就是Erlang。

Erlang的核心是“进程”,每个进程使用消息和其他进程进行通信,每个进程有个邮箱可以存储消息,进程通过检查邮箱的消息,然后采取行动,这其实就是现在的Actor模型。

图片
图片

大家也能看出来,Erlang的进程不是操作系统中常说的进程,它非常轻量级,每个进程的开销只有几百个字节,一台服务器可以轻松地支持几百万个进程同时运行。

进程可以是分布式的,可以跨越网络来互相发送消息,添加服务器就可以轻松扩展。

Joe Armstrong还在Erlang中内置了“弹性”的能力,当一个进程崩溃时——不管是因为Bug还是硬件故障——都不会导致整个系统崩溃,这对电话交换系统来说非常重要。

图片
图片

02艰难发展

新语言的推广是非常困难的。

有爱立信员工听说了Erlang这个新语言,就在一个原型系统中尝试了一下,他们惊奇地发现,这个新玩意儿开发起系统来,比其他方案要快得多。

但即使如此,Erlang依然没法大范围地在爱立信铺开使用,更别说普及到全世界了。

Joe Armstrong和团队想了很多办法进行“促销”,比如写书,召开会议,把Erlang移植到DOS、Windows、Mac、VxWorks等各种平台。

图片
图片

他们甚至录制了一个小电影做宣传。

图片
图片

1995年,Erlang终于迎来了转机。

爱立信公司计划开发新一代的交换机产品,以分组交换形式进行语音、数据和各种宽带服务的通信。

但是这个项目实在太复杂了,最早用C++开发,很快就陷入了巨大的泥潭,濒临崩溃。

这时候,大家想到了Erlang,死马当做活马医,用它来救场吧。

Erlang不负众望,顺利帮助团队完成了交换机的开发,这就是文章开头提到的AXD301。

有意思的是,这么优秀的编程语言,爱立信竟然把它禁掉了,禁止内部使用!

原因居然是电信产品生命期长,维护一个自己专有的语言成本很高,不如采用全世界都用的编程语言!

这个禁令一出,为Erlang付出大量心血的Joe Armstrong等人大为震惊,没办法,只好游说公司开源Erlang。

1998年12月,Erlang正式开源,团队的初始成员也离开了爱立信,成立了自己的公司Bluetail,致力于Erlang的开发。

Erlang离开了电信领域,进入广阔的互联网市场。

03大放异彩

2009年1月,雅虎前员工Jan Koum买了一部iPhone手机,他想到了一个点子:为什么不开发一个App,通过互联网来发送消息呢?

传统的方式是短信,资费高,还有流量限制,这很不爽。

于是他拉来了雅虎的同事Brian Acton一起干,互联网用户的特点那就是用户数极多,并发数极高,两人经过研究,发现Erlang简直就是处理大规模消息的不二之选,后台开发就它了!

2009年1月,WhatsApp诞生。

图片图片

WhatsApp一经推出,用户便迅猛增长,如今在全球已经拥有了20亿活跃用户。

图片
图片

2014年,Facebook斥资190亿美元收购了一个叫做WhatsApp的软件,震惊业界。

此时的WhatsApp,已经有了4.5亿亿用户,并且每天以100万在增长。

但是,让人吃惊的是,WhatsApp只有32名工程师,负责服务器后端开发的程序员只有10人。

这么惊艳的成绩,Erlang可以说是功不可没!

04向Web进军

虽然Erlang性能卓越,但是它的函数式编程的语法却并不为大众所熟悉。

一个叫Jose Valim的巴西人觉得Erlang, OTP, Beam VM这样的好东西,广大的码农群众不能使用真是太可惜了。

Jose Valim是Ruby on Rails的核心开发人员,深受Ruby社区的影响。

于是大神出手,借用了Ruby简洁优雅的语法,把Erlang和OTP进行了包装,创建Elixir这门新语言。

图片
图片
图片
图片

以Elixir为基础,Jose Valim等人还开发了一个新的Web框架Phoenix,方便程序员使用Elixir进行Web应用的开发。

许多创业公司使用了Elixir和Phoenix快速构建应用,尤其是高并发,实时的应用,其中最著名的是Discord。

图片
图片

Discord的CTO在2017年的一篇文章中说道:

Discord 就是 Elixir 的早期采用者, Erlang VM 是我们想要构建的高并发实时系统的完美候选者,过去两年,系统中的并发用户数已达到近 500 万,每秒有数百万个事件...... 如果让我从头再选择一次的话,我还会选择Elixir。

05Erlang为什么不流行?

看到这里,你脑海中很可能会浮现这个问题:

你把Erlang吹得天花乱坠,为什么它还无法成为Java这样的主流语言呢?

有位Lisp大佬Richard P. Gabriel说得很有道理:Worse is better。

大佬说软件设计有四个目标:简单性,正确性,一致性,完整性。

在软件设计上有两大流派:MIT流派(以Common Lisp和Scheme为代表)和新泽西流派(就是贝尔实验室,以Unix和C语言为代表)。

MIT流派认为设计一定得正确,接口一定得简单,为了这两点,实现层面复杂一点也没关系。

而新泽西流派则反过来,认为简单性比正确性更重要,尤其是实现的简单性比接口简单性更重要。

这带来的结果就是:Unix和C语言具备简单的结构,易于移植,运行时只需要很少的资源,虽然他们只能提供操作系统和编程语言50%~80%的功能,还是能够像病毒一样,疯狂传播。

因为Unix和C解决了痛点问题,大家可以轻松接受,并且由于实现的简单性,很容易和别的平台和软件整合,用户还会不断修改它们,完善它们。

而Erlang,很抱歉,它是典型的MIT流派,这是个设计精巧、实现复杂的系统,一旦它不能满足特定需求,想在保证正确性和简单性的同时对它进行修改,非得是高人不可,这一点严重阻碍了Erlang的传播。

那Erlang真的不好吗?

不,这要看这要看谁在使用它,WhatsApp和Discord就是典型案例,在这里Erlang和Elixir发挥了极大的威力,遥遥领先竞争对手。

Paul Graham在《黑客与画家》的“拒绝平庸”这一章也说过,他用一个小众语言Lisp开发了一个电子商务的网站ViaWeb,利用Lisp强大的宏,定制出电子商务领域的DSL,让Viaweb开发速度飞快,他们不断推出新功能,让那二三十个使用C语言和Perl的竞争对手目瞪口呆。

跟随主流不会出错,但是要想迅速脱颖而出,你得采用那些有点难度的但是生产力惊人的语言,从这个意义上来说,Erlang/Elixir很可能是击败普通人的秘密武器。

责任编辑:武晓燕 来源: 码农翻身

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK