dot Redis 8 来了——而且是开源的

了解更多

使用 Redis Enterprise 加速头像

首先简单介绍一下我们:Silkke 创建于 2011 年,Silkke 致力于创造具有卓越品质的动画 3D 头像,这些头像可在各种应用程序、虚拟宇宙和兼容的互联网网站中使用。我们的使命是在数字平台中创造人文元素,与各种品牌集成,通过为客户提供独特的个性化体验,使他们更贴近客户。

管理我们的 RabbitMQ 队列内容

创建头像需要多个任务,从对人物的初始扫描到 3D 逼真的克隆。扫描过程涉及四个独立的步骤,即使看起来不多,但这也会给执行扫描的单个展位的总容量带来很大压力。每个展位每分钟最多可以扫描一个人!现在将此乘以世界各地展位的数量。

这是大量的工作。

由于这个过程的发生,可扩展性是必不可少的,因为我们不知道有多少头像需要处理。因此,我们使用 RabbitMQ 创建队列,将工作分配给渲染头像每个部分的过程。这样做可以让我们随着队列的填充而扩展处理能力。

这提出了另一个挑战:如何最好地组织队列中的内容?

当队列填满时,我们无法知道队列中一组指令的顺序。如果我们需要随时修改指令怎么办?我们无法在不删除所有初始元素然后重新排队它们的情况下编辑某些内容,从而改变全局顺序并可能导致生产速度减慢。

首先,我们需要一个能够处理大量数据且速度很快的系统!因此我们使用了 RabbitMQ。但我们还需要一个简单的系统,该系统支持在软件端进行设计和查询(查询所有然后解析并显示),并且能够原生支持 FIFO。与其从头开始开发一种新的排队解决方案,这种解决方案可以满足我们所有的需求,为什么不采取实际的方法并集成一种与 RabbitMQ 配合良好的现有技术呢?这就是我们选择 Redis 的原因!

我们引入了一个新的流程,复制所有指令:一个在 RabbitMQ 中用于处理,一个在 Redis 中用于监控/编辑

当一条消息进入 RabbitMQ 时,相同的消息将以 Redis Set FIFO 样式放入 Redis 中。当工作进程处理队列时,它们也会删除/将消息放入 Redis 中,使我们的 Set 与 RabbitMQ 保持同步。

接下来,我们开发了一个 Web 界面来控制和显示 Redis 中的内容。它还可以将队列的状态控制为具有到期时间的 Redis 值,该值告诉工作进程是否应该消费该队列(我们可以暂时停止消费队列,而无需停止工作进程)。

为了记录,一个全球性活动每秒最多可以有 10-20 条消息(对于 1 个展位),并且我们在世界各地都有展位 – 但多亏了 Redis Enterprise Cloud 的强大功能,它可以扩展!

构建多人房间的架构

与某些仅 显示 人物头像的应用程序不同,Silkke 面临着展示动态角色移动的挑战。例如,头像需要漫游并通过聊天和发送消息进行互动。虽然市场上已经有一些对多人游戏支持的解决方案,但没有一个能够满足我们的需求,尤其是在服务器端。我们面临的主要问题是如何将游戏中一个头像的显示与其他头像同步。

答案:房间。

就像用于文本的聊天室一样,我们需要一种解决方案来记录当前有哪些头像。对于之前的问题,我们可能同时有三个头像到数千个头像,但只有随机的连接高峰。

幸运的是,Redis 再次拯救了我们!我们可以创建房间,在其中存储连接到应用程序的每个人的头像 ID。该架构很简单:每个人一个集合。但是通过对其进行基准测试,我们想到了一种实现 Redis 的新方法。如何使用它来构建聊天系统,使用 pub sub 系统和套接字系统呢?然后事情变得非常好了。我们可以在一个房间里处理 5,000 人。而且它不仅用于文本消息,还兼作命令的中继。

假设你想让你的头像去酒吧喝一杯。在你的手机上,你点击“喝一杯”,就完成了。但在幕后,Redis 展示了它的力量。在一秒钟内,它会检查你的 Auth 密钥,检查你的头像是否在场景中并已连接,发送去酒吧的指令,检查指令是否正确启动并通知你。全部使用 pub-sub、过期和哈希映射。然后我们可以将其扩展到你在图片中看到的每个头像。Redis 再次完美地满足了我们的需求。

目前还有几个项目正在筹划中,Redis 对于解决速度、可靠性和可扩展性问题至关重要。

要快速开始使用 Redis,您可以在以下位置免费注册 Redis Cloud:/redis-enterprise-cloud-free-30-mb-plan