欢迎来到我们关于公司在生产中使用Elixir的系列案例研究。请看我们迄今为止发布的所有案例。
Hubs是Mozilla对虚拟社交体验的看法。你建立自己的私人空间,并与你的朋友、同事和社区分享。这个空间中的头像可以在三维社交环境中自由移动,并观看视频,交换信息,与附近的其他人交谈。你所需要的只是一个浏览器和一个麦克风!
Hubs是完全 开源的,你可以通过Hubs云在你的基础设施上托管它。社区经理、教育工作者和活动组织者一直在使用Hubs云来运行虚拟活动和根据他们的具体品牌和需求定制的在线活动。运行你自己版本的Hubs只需点击一下就可以了--这也许使Hubs成为有史以来部署最多的Phoenix应用!
从VR到Elixir
3年半前,Hubs团队作为混合现实团队开始在Mozilla工作。他们的主要目标是探索通过化身和混合现实进行在线社交的方法。
他们很快就专注于建立他们的第一个概念验证,其中化身可以沟通,移动,并加入不同的房间,一切都直接在浏览器中运行。这与各地的虚拟现实技术水平有很大的不同,因为在这之前的入门体验是很麻烦的,往往需要以VR头盔的形式进行巨大的投资。
最初的原型是成功的,它推动了团队建立一个产品。然而,概念验证中的所有通信都是点对点的,这限制了他们可以提供的功能和体验。因此,Hubs团队知道他们需要一个有能力的后端技术来提供扇形通信,并协调所有不同的化身在虚拟空间中的互动。Mozilla的软件工程师John Shaughnessy评论说。"当你在同一个空间里有很多人的时候,不管是虚拟的还是现实世界的,从来都是只有一个对话在进行。一旦你有十个或二十个不同的人在一个房间里,电话会议就不能顺利进行。在Hubs中,人们只需四处走动就能在多个同时进行的对话之间进行转换"。
有了这个大胆的设想,他们评估了他们的整个堆栈。他们决定在前端使用Three.js的JavaScript,在后端选择Phoenix网络框架。当时在Mozilla担任工程经理的Greg Fodor解释了这一选择:"我们首先列出了我们必须实现的所有功能,从REST端点等琐碎的东西,到更复杂的用例,如聊天信息传递和跟踪虚拟世界中的化身位置。当我开始学习Phoenix时,我发现所有这些功能都已经存在了!我们正在构建的应用程序必须管理好这些功能。我们正在构建的应用程序必须以实时低延迟的方式管理大量的连接,我们知道Erlang虚拟机是非常合适的"。
在生产中
Hubs于2018年1月正式上线。Hubs中几乎所有的东西都要通过Phoenix。唯一的例外是WebRTC语音通道,它由指定的语音服务器处理,最初由Janus实现,后来被移植到MediaSoup。然而,Phoenix应用程序仍然管理着语音服务器以及如何将连接分配给它们。
部署是由Habitat协调的,并在亚马逊EC2上运行。Habitat提供包装和协调。当一个语音服务器加入Habitat环时,Phoenix服务会收到一个消息,并开始将语音分配给语音服务器。总的来说,他们在4个Phoenix和4个语音服务器上运行。
Elixir在生产中的体验相当顺利。Mozilla的工作人员软件工程师Dominick D'Aniello指出了他们讨论的一些改进领域。"Phoenix应用程序主要作为代理工作,因此我们避免对数据进行解码和重新编码,除非我们真的需要。但有时我们必须偷看有效载荷,而JSON并不是最有效的格式"。他们也曾考虑过更多地依靠Elixir进程和Erlang分布。多米尼克继续说。"当一个新的客户加入时,它需要询问所有其他客户,他们在这个世界上的状态是什么,他们拥有什么,以及他们关心什么。一种选择是在一个集群中使用Elixir进程来保持虚拟世界中不同实体和对象的状态"。
超越枢纽
随着许多大公司对在线交流的投资,Mozilla团队看到了虚拟空间成为现有社交平台内的围墙花园的可能性。这促使Hubs团队着手开发Hubs云,其使命是使虚拟空间商品化,允许任何人只需点击一下就可以运行自己的Hubs版本。
Hubs云在2020年2月推出,它已经成为一个热门。纽约大学在Hubs Cloud实例上举行了毕业典礼。IEEE虚拟现实会议接受了Hubs,使其成为一个更容易获得和可持续发展的活动,会谈和海报会议都在虚拟房间里进行,而明尼苏达双子星棒球队在该平台之上推出了一个虚拟名人堂。
他们的云版本使用亚马逊的CloudFormation来在用户的账户内实例化Hubs。这种方法给Hubs团队带来了不同的挑战。"我们希望Hubs云尽可能的经济实惠和简单明了。在这方面,Phoenix应用程序已经起到了巨大的帮助。我们还将一些功能转移到亚马逊Lambda,并使其成为可有可无的功能,如图像大小调整和视频转换"--约翰详细介绍。
由于Hubs也是开源的,开发者可以在他们选择的任何平台上运行他们自己的Hubs实例,或者随意改变它。这就是Greg Fodor最近宣布Jel时走的路。"Jel是工作的视频游戏。它是Minecraft和Discord的混搭,所有东西都是3D的。我的目标是激发新的方向和想法,让人们对VR感到兴奋"。
总结
今天,Hubs团队有10个贡献者,其中一半是开发者。他们的工程团队相当普遍,学习Elixir是有机地发生的。"你被你正在做的功能所激励。如果需要改变后端,你就在团队的帮助下学习Elixir,然后做出你的贡献"。
总的来说,对Phoenix的押注是成功的。Greg Fodor强调说。"Phoenix最显著的好处是在使用一个擅长解决大量问题的堆栈。一旦上了Phoenix,我们的工程师可以接触到一个巨大的表面区域。他们想出的任何功能,都可以用它来运行。由于Hubs是开源的,我们的贡献者也会有同样的体验。总的来说,Elixir和Phoenix减少了在我们整个产品中造成尽可能大的影响所需的努力"。
最近,他们甚至进一步向生态系统倾斜,因为他们已经开始在Absinthe的帮助下通过GraphQL暴露Hubs的API。他们还迁移到了Phoenix v1.5,并使用Phoenix LiveDashboard为Hubs云用户提供指标和仪表。