对Elixir的看法:高负载开发人员最流行的工具的优缺点



为什么Elixir / Phoenix在软件开发行业中获得如此高的采用率? 这种语言的最佳用例是什么? 使用时有什么缺点吗? 我们与Spotlight的全职开发人员和Elixir专家Sergiy Kukunin进行了交谈,以找到这些问题和其他问题的答案。

伊凡:为什么长生不老药如此受欢迎?


谢尔盖(Sergey): Elixir具有其他语言很少遇到的原则。 而且,它基于用于构建电信网络的Erlang。 因此,我们为高负荷项目提供了高度可靠的工具,并且该工具已经过一段时间证明。

这是至关重要的,因为近年来硬件技术的进步正在放缓。 CPU的一个核心的性能已达到5 GHz的物理极限。 制造商唯一想提高硬件性能的方法就是使用越来越多的内核。

这种方法的问题在于,您需要能够并行处理多个内核的软件。 经典的编程语言不太适合此类任务。 当谈到C中的多线程时,我们知道存在共享内存和多个线程可能争夺资源。 在这种情况下,由于随机竞争条件和分段错误,很难为高负荷项目创建可靠的代码。

Elixir通过引入新的多线程方法有效地解决了这个问题。

这项技术的核心优势是什么?


语言的第一个基本特征来自其功能性质,即不变性。 一旦创建并加载了数据结构(功能语言中没有对象),就无法更改它,除非再次从头开始重新创建它。

一方面,这种特殊性提高了使用Elixir的入门门槛,因为您无法选择应用程序的一部分,并尝试在其中重复记录某些内容,最终使一切正常运行。 另一方面,这使工程师可以更全面地规划应用程序的体系结构。

Elixir虚拟机实际上是一个微型OS,其中每个进程都有自己的内存空间。 借用它的资源没有其他过程可以进入它。 一个进程所能做的就是将消息发送到另一个进程,而无法控制它将如何处理该消息。 另外,由于它是一种功能语言,因此即使在网络上也没有无法在进程之间传输的数据结构(与面向对象语言中使用的方法不同)。

由于运行时存在多种限制,因此编写Elixir代码更加困难,并且比使用Java编写代码要花更长的时间。 但是,应用程序的整体可靠性非常高。

有什么药剂可以替代吗?


最相似的方法是Go语言中使用的协程。 而且,Ruby中的Python的greenlets和fibre提供了类似的方法,但是没有运行时那样健壮和快速地运行它们。 开发人员应决定如何运行这些协程,而Erlang则自行处理所有这些协程。

任何工具都有其缺点。 他们为长生不老药做什么?


今天的Elixir是可用于生产的工具,但是整个语言生态系统仍然太年轻。 特别是,这意味着您不能像在Ruby上那样仅登录到Stack Overflow并找到任何可能问题的答案。 是的,有书籍,课程和一些博客,但是您将需要不断进行研究和实验以解决许多日常任务。 这是我的主要缺点。

此外,由于单元测试的用处不大,因此测试Elixir应用程序更加困难,您需要更多地关注集成应用程序。 但是,您应该记住,几乎所有Elixir函数都是干净的,这使单元测试更加简单:每个输入只有一个输出。

您能描述使用Elixir提供最大效果的情况吗?


如果您并不需要支持应用程序处理数百万个请求的高负载,那么Elixir就是您不应该使用的工具。 但是,Elixir是真正高负荷项目的理想解决方案。 您甚至可能没有使用它编写所有应用程序,但是将Elixir用于系统中最热的部分总是一个好主意。

在动态互联网时代,用户期望极高的速度和任何网站(尤其是与内容相关的资源)的即时响应。 举例来说,如果您拥有一个在线媒体渠道,其中有成千上万的读者希望立即接收新闻更新,同时存在大量并发连接,那么迁移到Elixir可以使您的生活变得更加轻松。

个人经验:在一个项目中,我们有一个Node.js Web应用程序,该应用程序能够一次维护多达20,000个连接。 转移到Elixir后,这个数字增长到80,000,而业务逻辑或规模没有变化。 仅由于我们使用的语言效率更高,才有可能获得此结果。

Elixir允许制作几年前无法想象的事情,例如创建使用Web套接字在服务器端完全渲染的在线游戏。 甚至有一个用Elixir编写的完全没有JavaScript代码的网络Snake游戏示例。

但是,开发人员应了解没有灵丹妙药。 Elixir不能为您提供超出最初授权的Erlang虚拟机的更多信息。 它只是翻译新语法,以便爱立信在90年代末创建的老式编译器能够理解它。 这是久经考验的技术与新技术相结合可以为开发人员带来新可能性的一个完美示例,但始终存在一些限制。

您开始使用Elixir时有何建议? 一个人应该学习什么技术才能更快地启动和运行?


好吧,Elixir的语法与Ruby有一些共同点。 语言是完全不同的,但是最好能习惯于使用符号和元素。 最简单的方法是使用一些新的兼容Elixir的Web开发框架。 Elixir最受欢迎的Web框架是Phoenix。 您绝对应该尝试一下,特别是如果您习惯于使用Ruby on Rails。 这将简化开发,同时仍使应用程序更快,更可靠。

Source: https://habr.com/ru/post/zh-CN449522/


All Articles