我们如何在Matrix上托管FOSDEM 2021

2021-02-17 18:16:23

就在一周前,我们很荣幸能够使用Matrix托管FOSDEM:世界上最大的免费软件交易平台开源软件大会。考虑到我们不得不像往常一样恢复并赶上业务,花了一些时间来写下经验……但总比没有好,这是对运营企业所需要花费的概述。 Matrix上的约30K与会者会议!

首先,为任何新手快速(重新)介绍Matrix:Matrix是一个开源项目,它定义了用于分散通信的开放标准协议。全球Matrix网络至少分布在大约60K服务器上,具有至少28M Matrix ID。对于FOSDEM,我们设置了fosdem.org服务器来托管由Element Matrix Services(EMS)提供的新用户-Element是由Matrix核心团队组成的初创公司,旨在帮助Matrix开发。

关于Matrix的最独特的事情是,对话在用户中存在对话的所有服务器之间复制,因此对话永远不会有一个控制点或失败(就像git存储库在所有贡献者之间复制一样)。 。因此,将FOSDEM托管在Matrix中意味着除已首次在FOSDEM服务器上注册的用户之外,所有在Matrix上的人(包括从IRC,XMPP,Slack,Discord等桥接到Matrix的用户)都可以直接参加。因此,FOSDEM 2021周围的聊天现在在所有参与其用户的Matrix服务器上都存在,以供后代使用。并且我们希望fosdem.org服务器能够在所有可预见的新用户中受益,并且在可预见的情况下避免丢失帐户!

我们在FOSDEM服务器上看到了近3万本地用户,在Matrix的其他地方看到了4K远程用户。

...其中3,827个在FOSDEM服务器上注册。 (这让您大开眼界:FOSDEM积极参与的参与者中有50%以上已经在Matrix上了!)

这些数字不会计算直接观看直播的用户,而是仅统计通过Matrix参加的用户。

鉴于去年的FOSDEM布鲁塞尔自由大学大约有8500人参加,这感觉是一个不错的成绩:)

用于视频会议的Jitsi集群,用于主持所有Q& A会议,走廊会议,看台和其他临时视频会议

弹性可伸缩的Jibri集群,用于将Jitsi会议直播到官方FOSDEM直播,并在Matrix上提供会议的本地预览(以避免Jitsis挤满了只想观看的人)

Conference-bot-Matrix机器人,用于组织Matrix上的整个会议,由TravisR从零开始为FOSDEM编写,使用FOSDEM的日程安排,并使用正确的权限,小部件,邀请等维护所有必要的会议室。

在客户端,我们大量使用了小部件:能够将任意Web内容作为iframe嵌入到Matrix聊天室中。 (当前,小部件是针对Matrix规范的一组建议而存在的,这些建议已在Element中抢先实现。)

例如,会议机器人为所有FOSDEM开发室创建了矩阵室,并使用预定义的小部件来查看该室的官方FOSDEM实时流,并指向stream.fosdem.org上合适的HLS流-看起来像这样:

每个开发室的右侧都有一个时间表小部件,可以直观地看到该房间的时间表-非常感谢Hato和Steffen以及Nordeck的人员在最后一刻将它们整合在一起;它极大地帮助了开发室的导航(甚至还进行了实时倒计时,以帮助您跟踪时间表中的位置!)

每个开发室还可以通过Freenode上的IRC,专用桥(#fosdem -...)和XMPP获得。

该机器人还为FOSDEM的每个演讲(共666个)创建了房间,作为发言人和主持人可以提前闲逛的空间;一起观看谈话,然后播放问答环节。在对话时段结束时,漫游器将对话室转换为“走廊”。进行演讲,并在开发室中将其广告宣传给听众,这样人们就可以向演讲者提出后续问题,就像在FOSDEM上的现实生活中经常发生的那样。演讲者的演讲室视图如下所示:

在右侧,您可以看到" scoreboard" -一个简单的窗口小部件,该窗口小部件跟踪开发室中最受好评的消息,以帮助选择问答环节。在左侧,您可以看到混合的Jitsi / livestream小部件,用于在扬声器和扬声器之间进行协调。主持人。默认情况下,该小部件会显示视频通话的本地直播-如果您点击“加入会议”,您将加入Jitsi本身。一旦房间成为公共场所,这将阻止仅供查看的用户超载Jitsi。

小部件本身由机器人托管(您可以在https://github.com/matrix-org/conference-bot/tree/main/web上看到它们)。与此同时,chat.fosdem.org网络客户端本身最终与Mainline Element Web 1.7.19完全相同,只是FOSDEM品牌不同,并且已配置为挂接“视频通话”。按钮,直到混合Jitsi / livestream小部件,而不是普通的Jitsi。

同时,对于会议,我们托管了一个规模约为100个并发会议的现成Jitsi集群,对于Jibri实时流媒体,我们使用AWS Auto Scaling Groups建立了一个可伸缩的弹性集群。 Jibri本质上是一个Chromium,可查看Jitsi Web应用程序,该应用程序运行在无头X服务器中,该服务器的帧缓冲区和ALSA音频连接到ffmpeg进程,该进程将流实时传输到适当的目的地-因此我们选择为每个并发实时流运行一个单独的VM,以保持他们彼此隔离。 Jibri ffmpegs将直播压缩为RTMP并将其中继到我们的nginx,后者又将其中继到FOSDEM的实时流基础结构以供官方流使用,并将其中继回到Matrix实时流中的本地视频预览/视频小部件。

这是会议第一天的Jitsi / Jibri Grafana仪表板的屏幕截图,显示了46个正在同时进行的会议,在伸缩组中还有25个备用jibris准备在需要时采取行动:)

为了使事情尽可能顺利进行,Element本身也发生了许多更改。可能最重要的一个方法是实施“社交登录”-为愿意for带现有身份提供者(GitHub,GitLab,Google,Apple和Facebook)的参与者进行单击注册,而不是在Matrix中本地注册:

这是一次真正的史诗般的聚会(也是在Gitter和Element之间实现均等的重要组成部分)-似乎对于FOSDEM而言是令人惊讶的成功。在FOSDEM服务器上注册的用户中,几乎有50%是通过社交登录这样做的!我们还应该在本周为matrix.org服务器打开它。

最后,在Matrix服务器端,我们运行了一组突触工作进程(1个联合入站,读取器和发送方,1个推送程序,1个初始同步工作程序,10个同步加速器,1个事件持久性,1个事件创建者,4个通用客户端读取器,在EMS上的Kubernetes中有1个打字工人和1个用户目录。这些被连接到水平可伸缩性,如下所示:

总体而言,人们似乎过得很愉快。有些人甚至友好地将其称为他们去过的最好的在线活动:)这很可能反映了FOSDEM不管如何都会摇摇欲坠的事实-Matrix是一种固有的社交媒体,由开放源码构建并为开放源码构建社区(毕竟,整个Matrix生态系统都是通过Matrix开发的!)。此外,Matrix是一个开放的网络,这意味着人们可以从各个地方加入,因此Matrix中已经存在的社会动态扩散到了FOSDEM中-我们甚至看到一群人旋转自己的服务器来参与其中。完全由他们自己承担托管责任。最后,提供关键的基础设施室,例如#beerevent:fosdem.org,#cafe:fosdem.org和#food-trucks:fosdem.org也可能有所帮助。

就是说,我们确实发生了一些影响事件的生产事件。最严重的一个发生在周六早上,这表明主Synapse进程上托管的某些端点占用的CPU数量超出了我们的预期-最重要的是/ group端点处理与社区相关的流量(在Matrix中定义房间组的传统方式)。我们为周五晚上的会议做准备的最后一件事是创建一个+ fosdem:fosdem.org社区,该社区跨越了会议中的所有1000个公共会议室,并添加了+ staff:fosdem。 org社区访问所有这些房间-不幸的是,我们没有预料到它们的流行程度。结果,我们不得不对端点进行一些紧急的重新平衡,分解新的工作人员并重新配置负载均衡器以减轻主要过程的负载。

具有讽刺意味的是,由于事件发送不再通过主流程,因此Matrix服务器在此时间段内基本上可以正常工作-但最严重的影响是会议机器人由于启动时碰到了各种各样的端点而无法启动。与会议同步,其中一些正在超时。这反过来又影响了为方便起见而由机器人托管的窗口小部件,这意味着无法进行Jitsi的看台会议和Q& A对话(即使Jitsi / Jibri集群很好)。星期六的午餐时间解决了这个问题:对于那些因Q& As或会议而陷入困境的人们,我们深表歉意。从好的方面来说,我们发现许多受影响的房间只是为自己的Jitsis或BBB添加了自己的小部件,以最小的干扰继续进行-有效地手动从机器人手中接管了。

另一个主要事件是在周日早上短暂发生的第一件事,两个Jibri直播最终试图将视频广播到相同的RTMP URL(可能是由于在为其中一个看台快速移除并重新添加jitsi / livestream小部件而发生的比赛)。这导致级联故障,短暂影响了所有RTMP流,但在大约30分钟内解决了。我们还遇到了一个较小的问题,即周日在Jitsi进行的主动说话者识别功能出现故障(显然在使用SCTP而不是Websockets作为Jitsi内的交通工具时存在风险)-在午餐时间解决了这一问题。同样,如果您受到此影响,我们深表歉意。我们从经验中学到了很多,如果我们再次这样做,我们将确保不会重复这些失败模式!

通过通话室中的小部件提供倒数第二秒的时间,以便扬声器和扬声器主持人可以准确地看到他们何时进行直播。在开发室中(并且恰好在接下来的演讲中他们会被削减)

在演讲室中提供某种便签本,以便主持人和演讲者可以跟踪他们想回答哪些问题,以及他们已经回答了哪些问题

问答结束后,请演讲者/主持人对问题记分板和便笺簿保持可见,以便他们可以继续在每个对话室中回答问题,并更有效地宣传每个对话室。

使用空间而非社区将房间分组在一起,并自动提供结构化的房间目录! ( 像这样!)

使用线程(一旦它们降落!)来帮助在devroom中组织对话(也许这些甚至可以代替走廊房间吗?)

使计划小部件更易于查找,并在该地点周围放置更多

所以你有它。我们希望这表明可以使用完全开放的源代码堆栈在Matrix上成功举办大型会议,并且希望可以激发其他活动通过Matrix联机!我们应该大声疾呼HOPE,HOPE去年在Matrix上独立举办了跑步会议,并启发了我们使FOSDEM发挥作用。

如果您想了解更多信息,我们还将在本月的开放技术将拯救我们的聚会中进行有关FOSDEM-on-Matrix的讨论,FOSDEM上的在矩阵上构建大规模虚拟社区的讨论也更加详细。我们通过Matrix博客在线获取历史悠久的Take FOSDEM的事件在某种程度上已经超越了事件,但是仍然提供了更多的背景信息。

最后,非常感谢FOSDEM,让Matrix主持会议的社交方面。这是一个很大的赌注,从九月份我们提供帮助开始就从零开始,我们希望它能有所回报。另外,还要感谢Element的所有成员,他们用心肠将其拉在一起-以及与FOSDEM的组织者一起工作非常愉快。

我们希望FOSDEM 2022能够亲自回到ULB-但是无论发生什么情况,如果将来需要的话,我们今年建造的基础设施将可用。