10年的长生不老药

2021-01-15 20:20:55

在过去的一个周末,即1月9日,我们庆祝了自从首次承诺Elixir资料库以来的10周年。尽管我个人还不认为Elixir已有10周年了-成为Elixir的今天的语言仅在14个月后浮出水面-十年值得纪念!

这篇文章的目标是关注生态系统中某些项目的当前状态,然后简要介绍接下来几个月中一些激动人心的工作。

当我开始研究Elixir时,我个人就有将其用于构建可扩展且强大的Web应用程序的抱负。但是,我不希望Elixir与网络捆绑在一起。我的目标是设计一种具有多样化生态系统的可扩展语言。 Elixir旨在成为通用语言,并允许开发人员将其扩展到新领域。

鉴于Elixir是在Erlang之上构建的,并且Erlang用于网络和分布式系统,只要我不搞砸,Elixir自然也很适合这些领域。 Erlang VM对于我们在Elixir中所做的一切都是必不可少的,这就是为什么兼容性也已成为语言目标的原因。

我还希望该语言具有生产力,特别是通过专注于工具。学习功能性编程语言是大多数开发人员的新尝试。因此,他们的第一次使用该语言,建立一个新项目,搜索文档以及进行调试的第一次体验应该尽可能地顺利。

去年,我们在官方网站上发布了一系列有关在生产中使用Elixir的公司的文章。截止到今天,我们列出了7个生产案例,而今年还有更多的生产案例!总体而言,看到许多不同的公司在生产中使用Elixir的商业模式和行业运行情况令人非常兴奋。

Brex(案例),Discord(案例),Divvy,Podium和SalesLoft等公司已达到“独角兽身份”,并严重依赖Elixir。诸如Boulevard(播客),Community,Duffel(案例),Ockam,Mux,Ramp,Remote和V7(案例)之类的初创公司也使用Elixir,并且在过去一两年中获得了资金。 Elixir还用于Bleacher Report,Change.org(案例),Heroku(案例),PagerDuty,PepsiCo和TheRealReal等知名品牌和企业中。

还有一种特殊类别的创业公司,它们在开源模型上运行Elixir,例如Plausible Analytics,Supabase,Logflare(播客)和Hex.pm(播客)本身。仍然在开源领域,您会找到Pleroma和Changelog等项目。还有许多小型和业余项目,它们使用Elixir获得了富有成效的快乐开发经验。

如今,Elixir拥有可在广泛领域和行业中运作的多样化生态系统。让我们看一些例子。

借助Phoenix Web框架,大多数开发人员都熟悉使用Elixir进行Web开发。 Phoenix在生态系统中获得了广泛的关注,因为它是除了常规的MVC(模型-视图-控制器)产品之外,第一个充分利用语言和平台来构建实时应用程序的平台。

这一切都始于Phoenix Channels,即客户端和服务器之间的双向通信,以及Phoenix PubSub,后者使用Erlang的分布式兼容性在节点之间广播消息。据我所知,Phoenix是第一个提供现成的多节点Web实时解决方案的主要Web框架。无论您使用的是一个节点还是十个节点,所有配置都可以正常工作,而且配置和相关性最少。

自从首次发布稳定版本以来,Phoenix已经成熟了很多。 Phoenix v1.2包含了Phoenix Presence,它使开发人员可以立即跟踪哪些用户,IoT设备等已连接到您的群集。无需数据库或外部依赖项!首先,这是看似简单的问题之一,但是一旦概述了所有可伸缩性,性能和容错要求,它就会变得相当复杂。幸运的是,Phoenix运行在擅长解决这些问题的平台上,而且我不知道有任何其他框架在其默认堆栈中提供了这种精简而优雅的解决方案。

最近,Phoenix LiveView发布了,它引入了新的方法来使用服务器渲染的HTML构建丰富的实时用户体验,激发了开发人员尝试针对其他语言和框架的类似解决方案。您可以阅读原始公告,或了解如何在15分钟内构建实时Twitter克隆。作为Live系列的一部分,我们还发布了Phoenix LiveDashboard,使监视和仪表成为Phoenix应用程序的一流公民。

尽管我一直期望Elixir在构建Web应用程序方面大放异彩,但是当我听到有关用于创建高端嵌入式应用程序的Nerves平台时,我感到非常惊讶。但是,一旦我了解了它们的前提,一切就变得很有意义:编写嵌入式系统很复杂。对失败进行推理很难。那么,如果我们可以利用Erlang / OTP数十年的经验教训来设计嵌入式应用程序呢?如果可以通过让主管直接重启来解决Wi-Fi驱动程序上的故障该怎么办?毕竟,Erlang / OTP的第一个主要用途是在嵌入式系统,即爱立信AXD301 ATM交换机中。

Nerves将Elixir生态系统和久经考验的Erlang VM带到了边缘计算中,使用成熟的技术提供了丰富的开发人员体验。 Nerves是将Elixir项目转换为通用硬件设备的完整软件映像的第一步过程。如今,Nerves已被用于工业自动化,机器学习,消费电子等领域的生产中,其中最著名的例子就是Farmbot(案例)和Rose Point Navigation。

Nerves团队还创建了NervesHub,这是一个完全开源的设备管理系统。结合所有这些技术,Elixir成为构建端到端IoT平台的综合语言。

在Elixir v1.0发布之后不久,我和Elixir核心团队就开始研究用于处理Elixir中数据提取和数据管道的抽象。我们进行了几次设计,直到最终进入GenStage:一种在Elixir进程与外部系统之间进行背压交换数据的行为。对于介绍,请确保查看我介绍GenStage和Flow的主题演讲。

今天,将近5年后,GenStage已被许多行业所采用,并已成为推动Elixir被采用的因素之一。例如,您可以阅读Discord和Change.org如何在Elixir和GenStage上构建可处理峰值并大规模运行的系统。

但是,GenStage仅仅是开始。在2019年,我们宣布了Broadway,这是GenStage之上的高级抽象,使构建数据提取管道变得轻而易举。我们最初是在Amazon SQS支持下发布的。如今,也可以使用RabbitMQ,Google Cloud PubSub,Apache Kafka和其他来源(在百老汇术语中称为生产者)。

由于Erlang VM是为可扩展的网络处理而设计的,因此可以期望它也是音频和视频流的出色平台。但是,如果您还想即时处理和转换这些流,由于您可能必须与本机代码集成,因此情况变得更加复杂。

幸运的是,几年前当Erlang / OTP 20与所谓的脏NIF一起发行时,这些表已经发生了变化。 Erlang VM始终具有调用本机代码的能力,但是该本机代码不能运行很长时间,以免干扰Erlang运行时的抢先功能。肮脏的NIF允许开发人员将本机代码标记为IO或CPU绑定,它们在特定线程上运行。现在,在端口(基于I / O的端口),NIF,脏NIF和远程节点之间,开发人员可以选择许多选项来与具有不同性能和可靠性保证的本机代码交互。这正是膜框架所基于的基础。

膜是从旨在破坏无线电广播行业的初创公司RadioKit中提取的。最初,它专注于处理和混合音频。后来,Software Mansion收购了该框架,并提供稳定的资金和强大的团队来帮助其发展成为一个全面的框架。当前,它允许开发人员即时处理,传输,广播和转换音频和视频流。无论您是构建Twitch克隆,VOD应用程序还是视频会议系统,Membrane都可以提供越来越多的高级抽象和预制模块,因此您不必深入研究特定编解码器,协议和格式的特质。

对于Erlang生态系统和Elixir社区而言,2021年看起来非常令人兴奋。在本节中,我们将提及一些我们希望在2021年看到的事情。

2020年9月,Lukas Larsson和Erlang / OTP团队宣布了针对Erlang VM的名为BeamAsm的JIT编译器。实际上,JIT的运行速度将取决于您的应用程序,但公告中发布的结果是有希望的。引用卢卡斯的话:

如果我们运行Poison或Jason中的JSON基准测试,则对于所有Erlang / Elixir实现,BeamAsm的每秒迭代次数都可以增加30%至130%(平均约70%)。对于某些基准测试,BeamAsm甚至比纯C实现困难。

更复杂的应用程序往往会看到性能提高幅度较小的情况,例如,RabbitMQ能够根据情况每秒处理30%到50%以上的消息。

由于JIT拉取请求已合并,因此我一直在运行Erlang / OTP主服务器。我也对JIT给开发人员带来的好处感兴趣,我必须说,改进是显而易见的:代码编译和测试套件的运行速度明显加快(在我看来,大约是30%到50%),这是非常有希望的!

我的理解是,在涉及JIT方面还有更多的探索,但是到目前为止,其收益已经超出了微基准测试的范围,这给最终用户带来了可衡量的收益。

在网络上,我们很快就会看到Phoenix v1.6的发布,其中的主要功能之一是添加了mix phx.gen.auth代码生成器,该生成器概述了具有注册,确认,密码恢复,和更多。对入门工作流程的这些改进,以及v1.5中添加的指标和仪表板,使Phoenix处于独特的位置,可提供从开发到生产的出色而完整的开发人员体验,并具有可扩展的运行时来进行备份。

我们很可能会看到Phoenix LiveView在今年也获得1.0邮票,它具有完善的模板语法和令人兴奋的组件功能。尽管许多团队和公司已经采用并利用LiveView来构建出色的用户体验,但可以理解的是,有些人正在等待稳定的发行版图。稳定还意味着需要更多的学习资源,书籍,课程等。所有这些都会带来更多的增长。

Phoenix LiveView还将引导生态系统使用更多可视化工具。我们已经讨论过Phoenix LiveDashboard,但我希望很快在该领域看到更多工具,例如Surface,Oban Pro以及即将由我们自己的Marlus Saraiva在ElixirConf展示的即将发布的百老汇仪表板。

膜团队正在研究的主要功能之一是WebRTC支持。到目前为止,该框架能够处理通过多种协议(而不是通过Web浏览器)传递给它的流。 Membrane和Phoenix的结合可以成为生态系统的强大补充,使开发人员可以直接从Elixir将多媒体组件添加到其实时应用程序中。

Dashbit团队还希望今年发布百老汇v1.0。我们正在研究的最大功能是对基于网络的生产者的支持,允许开发者创建HTTP端点或实现自定义的TCP / UDP协议,例如Fluentd或Logstash格式,这些协议直接输入到其Broadway管道中。

如果您想参与,那么您绝对应该考虑参与社区中发生的许多项目和工作。请注意,以上列表并不全面,并且在不同领域中还有更多激动人心的工作正在进行。

如果您只是学习或想学习Elixir,则该网站是一个不错的起点,请查阅快速入门指南或我们的学习资源页面,其中包含许多适合您不同学习水平的资源。

最后,我们在Dashbit的公司继续探索将Elixir引入新领域和领域。 上个月,我们宣布了由达什比特(Dashbit)赞助的巴西米纳斯吉拉斯州联邦大学编译器实验室资助的eBPF研究硕士项目。 在过去的两个月左右的时间里,我们也一直在努力工作,这是一个名为Nx的项目,还有一套辅助工具,它们有可能将Elixir带入一个全新的领域,并向未曾探索过的领域开放该语言。 深度之前! 我已经分享了一些早期的基准测试,我将在2021年的Lambda Days今年2月正式介绍这些项目。欢迎加入我们,敬请期待!