Erlang:安静地为WhatsApp和WeChat提供动力的编程语言

2020-12-29 14:56:54

今天,我们将介绍一种相当古老的语言,有些古怪的语言,你们中大多数人可能并不熟悉。

尽管Erlang不如某些现代编程语言流行,但它可以安静地运行诸如WhatsApp和WeChat之类的应用程序,这些应用程序每天为大量用户提供服务。

在本文中,我将向您详细介绍这种语言,其历史以及是否应该考虑自己学习。

Erlang是一种功能通用语言,旨在构建具有高可用性保证的可扩展并发系统。

它建于1980年代末在爱立信,用于处理电话交换机。当时,电话交换系统是目前最复杂的系统之一,就像当今的互联网一样。因此,用于编程它们的语言需要支持高并发性和零停机时间。

在经历了多种现有语言选择之后,公司的三个人– Joe Armstrong,Robert Virding和Mike Williams –决定创建自己的公司。这导致了我见过的最酷的编程语言之一,甚至是最出色的营销视频。

Erlang与其他语言的主要区别在于其基于过程的计算模型。它使用隔离的,轻量级的进程,这些进程通过消息相互通信。

这些进程可以接收消息,并响应消息,创建新进程,将消息发送到其他进程或修改其状态。换句话说,Erlang遵循演员模型。如果您在JVM上使用了Akka,那么您会感到宾至如归。

进程是隔离的,创建速度快,并且仅占用少量内存。通过创建更多扩展系统很容易。由于这些进程无法识别其他进程是在同一核心还是在其他位置,因此您可以轻松地水平(通过添加更多计算机)和垂直(通过添加核心)进行缩放。

人们通常将Erlang与其他语言(例如Scala和Haskell)一起作为一种功能编程语言。 FP的一些特征是:

首先,当涉及到网络中多个代理之间的消息传递时,Erlang是一个不错的选择,因为它很好地映射了该语言的基本结构。

聊天应用。消息传递应用程序(包括诸如WeChat和WhatsApp等著名示例)使用Erlang来处理大量并发用户。 Erlang有一个称为ejabberd的出色消息传递平台,可用于创建大型聊天应用程序。

消息队列系统。 RabbitMQ是实现AMQP和其他协议的开源消息代理,对Erlang来说是一个巨大的成功案例。

区块链Aeternity是用于可扩展,安全和去中心化dapp的区块链,它使用Erlang来实现其节点。

二进制操作。从历史上看,Erlang必须支持为电信目的快速实施二进制协议。因此,它具有使二进制操作更加舒适的功能,例如二进制文件上的模式匹配。例如,您可以将Erlang用作sed的二进制文件。

其他分布式高性能服务。如果您需要处理来自金融科技项目中很多地方的交易,或者创建一个出价/用户匹配平台,那么Erlang也不是最糟糕的选择。

您可以在我们的Elixir和Erlang公司列表中查看一些Erlang的频繁使用案例。

是。总体而言,Erlang非常适合创建快速且可扩展的Web应用程序。如果到达那里,那将是非常有益的。不过,有一些警告。

Web应用程序(以及任何其他与HTTP兼容的应用程序)的核心将是Cowboy,但除此之外,您还需要了解Web应用程序由什么组成,并分别为每一层选择工具。

图书馆有充分的文献资料,但是新手级别的入门资料相对较少,您将找不到有关所有内容的教程。不是JavaScript。

总而言之,如果您决定构建Web应用程序,那么使用Elixir(一种基于Erlang的语言)可能是更好的选择。

与其他编程语言相比,Erlang具有三个显着的优势,这主要源于该语言的独特构建方式。

并发。 BEAM是Erlang虚拟机,它使用轻量级的执行线程(称为进程)。它们是隔离的,可在所有CPU上运行,并通过消息进行通信。由于这一点和语言的功能特性,用Erlang编写并发程序变得不那么困难。

可扩展性。 Erlang非常适合现代计算和当今的多核CPU的分布式特性。 Erlang流程使我们可以轻松地扩展系统,既可以增加更多的计算机,也可以向现有计算机添加更多的内核。

可靠性。 Erlang有一个座右铭–“让它崩溃”。由于采用了独特的容错方法,管理程序系统可以快速重启轻量级进程,从而帮助您构建自我修复系统。尽管这似乎并不可靠,但它可以处理大多数不是由于严重的实现错误而引起的错误。

在本部分中,我将尝试深入了解Er​​lang应用程序的结构以及现实生活中“让它崩溃”的原理。

实际上,让它崩溃并不意味着用户或系统崩溃。这是Erlang努力避免的事情。相反,它是关于不可避免地发生失败的控制,因为生活中有时候确实会失败。该死。让我们看看Erlang是如何清理的。

在树的底部,我们有工人流程–从事大部分工作的流程。在他们的上方,我们有主管,他们启动了工人并进行了检查。

监督者本身可以被监督;我们可以在此处轻松地在树的顶部添加一个高级主管。

万一进程崩溃,它会向其主管发送一条消息。根据设置的监督策略,可以仅重新启动过程,也可以重新启动其主管下的所有过程。

如果一定时期内重新启动连接的工人仍不能解决问题,则主管将终止其所有子项,然后终止其本人。届时,尝试解决问题的责任将被推升至下一个监督层。

仅当顶级主管失败时,它才会重新启动并且应用程序崩溃。

Erlang不是在BEAM上运行的唯一语言。还有多个其他人。主要的是长生不老药。

Elixir由JoséValim于2010年代初期创立。他采用了Erlang,并在其上做了一层薄薄的处理,使之具有类似于Ruby的更现代的语法。

最终的语言是对Erlang和Ruby的改进。在2015-2016年发布主要网络框架Phoenix时,它的受欢迎程度激增。

Elixir实际上并未为Erlang添加很多新功能。您可以在Elixir中进行的所有操作,也可以在Erlang中进行的操作,并且可以相互调用这两种语言。 Elixir的大多数优势都来自于它具有更现代的,类似于Ruby的语法的事实,这使得它比Erlang更受欢迎。

现代语法。如果您实际上已经使用任何其他流行的编程语言进行编程,那么Elixir的语法将更容易理解。它消除了一些样板代码,可以提高开发人员的生产率。

更高的知名度。 Elixir在这两个时代中一直比较流行,因此有关Elixir的内容是最新的,并且有更多的内容。

构架。如果您从事Web开发,Phoenix是目前最好的框架之一,并且如果您要进行Web开发和函数式编程,它绝对是最方便的框架。在谈到框架时,Elixir还拥有Nerves –一个很棒的嵌入式软件框架。如果这是您要采取的路线,Elixir是一个更好的选择。

您正在关注使用Erlang的特定字段中的位置。您喜欢聊天应用,并且想在WhatsApp工作。那很合理

您想要编写具有尽可能小的依赖关系的小型可移植程序。实际上,Erlang使您可以开箱即用。

您是一个真正的好奇心人,并且希望发现新的编程方法而又不会立即受益于底线。在这种情况下,我欢迎您加入BEAM的行列。

如果最后一个是正确的,我实际上会指出您对Elixir的看法。 虽然两种语言都很好用,但是Elixir是最近似乎更流行的一种。 这将为您提供更多的工作机会,并且更容易学习。 之后,您可以学习Erlang以及它的原理。 了解Elixir底下的Erlang的功能将帮助您编写更好的Elixir代码,并使您更有可能被聘为Elixir开发人员。 无论如何,即使您不只是阳光和彩虹,我也不认为您会后悔旅行BEAM的任何部分(BEAM语言有时会变得很奇怪)。 如果您想从哪里开始,我将指导您或者向您学习一些Erlang,以获取极大的好处! 或我们的初学者学习Elixir指南。 如果您想阅读更多有关BEAM语言的文章,请不要害怕也在Twitter或Medium上关注我们。