我思考的最强实时通信基础设施(讨论版)- 大家一起进行直播的情况下

2020年Happy Elements圣诞降临日历第24天的文章。

简要介绍

我是《Ensemble Stars!! Music》的音乐工程师领队。
我想写一下在多人音乐游戏“一起演唱会”中使用的实时通信基础架构。
这次我要介绍一下我们在技术选型阶段考虑过的内容,并提出了使用Redis Streams的可扩展基础架构的建议。

关于大家一起参加演唱会

image.png

有关实时通信技术的选型

我们公司已经有使用投票进行多人参与战斗,使用Photon协作游戏等方面的经验。
在《MUSIC养成游戏》中,我们预计会有超过一万人同时连接的情况发生,因此我们需要一个能够处理如此规模的实时通信基础设施。
由于我们成立了基础设施组,我们也有机会重新考虑实时通信技术,同时搭建一个新的基础设施。

Unity公式推荐选择实时通信技术。

image.png

可扩展的WebSocket服务器

初期の段階では、AWSのAPI GatewayでWebSocketを使おうと考えていました。
みんなでライブリリースまで3ヶ月程度しかなかったので、より簡単な方法で実現したいと考えたからです。
これについてインフラグループに相談に乗ってもらったのですが、Lambdaの管理を考えなければならず逆に手間がかかってしまうということで断念しました。

image.png

Redis 发布/订阅不具有可扩展性。

再度、インフラグループに相談したところ、Redis Pub/SubをCluster構成で使うと規模の増大によってネットワーク負荷が上がりスケールしないことがわかりました(Redis Cluster PubSub – Scalability Issues)。
簡単にスケールして、ラフに接続できる完璧なリアルタイム通信基盤の夢はもろくも崩れ去ったのです。

Redisを使わない案や、Redis1台でさばける単位で分ける案などあったのですが、どれも3ヶ月で検証が終わってリリースできるような構成に感じられませんでした。
(検証に使えるのは3ヶ月よりずっと短い期間です)
みんなでライブの実現は崖っぷちに立たされたのでした。

突然出现的拯救者 Redis Streams.

image.png

如果是 Redis Streams,它可以像 Pub/Sub 一样可扩展!
如果这是真的,只需要将之前的 Redis Pub/Sub 部分更改为 Redis Streams,应该能够很好地工作。
我们对 Redis Streams 一无所知,但为了实现直播,我们决定尝试一下这个功能。

使用Redis Stream实现实时通信基础设施。

最初に検証したのは、そもそもNode.jsでRedis Streamsが使えるのかどうかということでした。
試行錯誤はありましたが、ioredisを使うことでRedis Streamsを使えそうということがわかりました。

次に検証したのは、ioredisを使ってどのようにPub/Subを実現するかということでした。
こちらもioredisの作者がissueで実現方法を提案してくれていて、そちらを参考に実装することができました!
ついに「僕の考えた最強のリアルタイム通信基盤」が完成したのです。

image.png

总结

这样一来,我们能够在所有人一起的现场直播中选择实时通信基础设施的技术。
这是一个可扩展的、构建非常简单的实时通信基础设施,我个人认为它是最强大的配置。
明天我们将以实践为基础,尝试使用Redis Streams创建实时通信基础设施。

招募成员

在Happy Elements株式会社的卡卡瑞亚工作室,我们正在大力招募能够与我们一起创建备受热爱的内容的团队成员!

如果您对我们公司感兴趣的话,请务必前往以下的招聘网站进行查看。
Happy Elements株式会社 招聘专用网站

广告
将在 10 秒后关闭
bannerAds