为什么使用 Elixir?多位工程师讲述背后的故事

avatar

“为什么选择使用 Elixir?使用 Elixir 之后有什么好处?”这个问题在 Elixir Meetup 中被频繁提及。这很明显地表明了大家对 Elixir 编程语言本身的兴趣,同时也体现了大家对「基于业务需求做出合适的技术选型」非常有兴趣。

这也正是 Elixir Meetup 的珍贵之处 —— 除了通过个人实践来获取经验,大家也可以通过了解其他人的决策过程、架构设计和生产实践来增长相关经验。

本周六下午两点,Tubi 北京办公室举行第八期 Elixir Meetup,欢迎现场参与

除了听取来自 Elixir 开发者带来的三场精彩分享,还可以领取 Tubi 周边礼品 —— Tubi Value 定制徽章、Tubi 定制书签。来到 Tubi 北京办公室,现场参与的观众更有机会抽取 Elixir 护肤品旅行套装。

图片

图片

图片

Tubi 和 Elixir 的故事

Tubi 为什么选择使用 Elixir?从何时开始迁移到 Elixir 上?当被同事问起,Tubi VP of Engineering 陈天分享说:

“最初,Tubi 后端使用的技术栈是 PHP。随后,Haofei 加入团队(如果你好奇 Tubi 中国团队的故事,请持续关注 Tubi 故事专栏),在当时还有另外两三位后端工程师,他们普遍认为 PHP 不方便维护,于是决定将后端用 NodeJS 进行改写。

在我加入 Tubi 之后的前两年(2015 - 2016 年左右),我用 NodeJS 重新梳理了整个后端技术架构,我们 Content and Client Services Team(简称 CCS 团队)目前在使用的 Unified API 便是我当时写的框架。

当时,CCS 团队面临的主要问题是如何快速地判断一个视频内容是否可以在这个地域、这个时间和这个平台展示给这个用户,也就是 Policy Engine。

最早版本的 Policy Engine 是我使用 NodeJS 开发的 Rule Parser,取代了通过查询数据库那种较为缓慢的方式。使用这一版 Rule Parser 后,页面打开时间从 10 秒左右提升到 1-2 秒。

然而,由于 Tubi 所提供的视频内容越来越多,使用 NodeJS 实现的这一版 Policy Engine 的效率已经完全不能满足需求了。那时,我在业余时间使用 Elixir 写一些项目,某一天我在火车上突然想到——我们能否使用 Elixir 编译的方式,将大部分 Policy String 的描述在编译时转换成 Elixir 表达式,生成上万个甚至数十万个函数,每个函数针对一个 Policy 进行运算和评估。可以理解为,我们将 Policy 的处理在编译时完成,只要收到一个视频内容 id,在数十万个函数中找到这个 id, 就可以直接返回 Poliy Evaluate 结果了。

有了这个构想,我很快完成了一个 POC,证实了效率可以提升一百倍。

Elixir 便从这时开始,逐渐进入了 Tubi 后端。一开始,我们只是使用 Elixir 重构了 Policy Engine;后来,当我们需要重构其他服务时,也都使用了 Elixir。”

👉 目前 Tubi CCS 团队正在招聘高级后端工程师 - Elixir 方向,欢迎加入

如你所了解的,Tubi 和 Elixir 的故事后续是这样的:

· 使用 Elixir / OTP 构建多媒体 E2E 处理平台

· 一个潜藏在 Elixir 代码库里 7 年的性能问题

· Ruby 思想在 Elixir 项目中的应用

我和 Elixir 的故事

除了 Tubi 和 Elixir 的故事,我们在组织 Elixir Meetup 的过程中,也认识了很多炼金术士,听到了大家和 Elixir 相关的故事:从什么时候开始使用 Elixir?选择使用小众语言 Elixir,会担心影响职业发展么?

Tubi 中国团队第一位全职 Elixir 工程师分享说:

“在加入 Tubi 之前,我是一名 Erlang 工程师。加入 Tubi 后,我开始使用 Elixir。相比 Erlang,Elixir 在语法上更加简单;同时,我在 OTP 方面的经验可以无缝转化到 Elixir 的使用和开发上。

我一直都使用较为小众的技术语言,早年也会担心这会不会影响我的职业发展。但是,随着工作经验的增加,尤其是在基础知识、系统知识、架构设计和解决问题方面的积累,我认为使用哪种技术语言并不会成为职业发展的阻碍。相对于使用何种技术语言,更关键的是解决问题的能力。真的不需要将语言看的太重,工具趁手就足够。

2017 年我刚加入 Tubi 时,使用 Elixir 开发了 Tubi content materialization service,这是视频详情页的实现方案。这一技术方案在经历了一次缓存架构的升级后,沿用至今。

2018 年,我们上线了一个视频处理平台,Elixir 帮助实现了调度,具体细节可以查看这篇文章,这也是我所负责的 TMPP 团队在做的工作之一。”

👉 目前 Tubi TMPP 团队正在招聘高级后端工程师 - Elixir 方向,欢迎加入

使用 Elixir 等小众语言,会担心么?

“在加入 Tubi 之前,我曾在游戏和即时通信行业中使用 Erlang。加入 Tubi 后,Elixir 成为了我的主要开发语言。虽然语言发生了切换,但我并没有太多的担心。毕竟,Erlang 和 Elixir 都属于小众语言。重要的是使用合适的语言来解决问题。”

“我加入 Tubi 之前,曾使用过 Golang / Python / C++ / JavaScript / Scala / Haskell / PHP,唯独没用过 Elixir。由于 Tubi 工作需要,我开始了解和使用 Elixir。一开始我也有一些短暂的顾虑,比如“ Elixir 是小众语言”这个问题;但我很快就放下了顾虑,不再担心这会对自己的职业发展有什么不好的影响。

使用了 Elixir 一段时间后,我感受到了它浓郁的函数式编程风格和 immutable 变量的好处,可以避免很多不必要的麻烦。同时,Elixir 生态系统中有许多共享的库和 convention。例如,我目前所见的第三方库都使用集成 Ecto 进行数据库操作,这对于 Elixir 的生态发展非常重要。学习一个新的库,只需要掌握其独特部分,其余部分都是熟悉的。总的来说,除了动态类型可能导致重构代码时有点困难外,使用 Elixir 的体验非常不错。”

“我经常和之前的同事推荐 Tubi,而他们常会问我一个问题:Elixir 是什么?当我介绍完 Elixir 后,他们通常会认为,在一个小众技术语言上投入时间和精力,会对自己的未来发展带来影响。比如,公司会不会只是短期选择 Elixir,之后会转向更成熟的老牌技术语言。在学习和研究函数式编程时,我立刻被它的简单所吸引,感到被电击中一样。之后,我再也没有感到担心,唯一需要面对的就是探索这门新的技术语言的那种新奇,是很有收获的一段经历。”

“我开始使用 Elixir 是因为 Elixir 的高并发能力可以帮助我更好地处理分布式系统。尽管 Elixir 是一门相对小众的语言,但我并不担心,因为语言并不是最重要的,重要的是我们做什么事情,和什么样的人合作,以及我们是不是开心。”

如果你也在寻找和你一样热爱函数式编程、喜欢 Elixir 的同行,欢迎预约本周六 Elixir Meetup 直播!