只使用redis实现活动流有多安全?

Posted

技术标签:

【中文标题】只使用redis实现活动流有多安全?【英文标题】:How safe is it to use only redis to implement activity streams? 【发布时间】:2013-01-25 15:53:41 【问题描述】:

我正在建立一个网站,允许用户“关注”不同的成员,每当该成员发帖时,它都会按时间倒序将其添加到所有关注者活动流中。这些天很常见的东西。

但我无法确定实现这一点的最具可扩展性/面向未来的方式(无连接)。

我正在使用烧瓶/heroku/sqlalchemy/postgres。我正在考虑使用 Open-redis 插件并做类似 instagram 提到的事情:每个用户都有一个 redis 列表,每当“关注”帖子时,它会将帖子添加到每个关注者列表的开头并修剪其总大小。

我对 redis 的了解还不够,无法知道在每个用户流中单独依赖它是否安全。对于 open-redis,他们没有提到任何关于持久性的内容,所以我不知道这是否只是现在假设的一个足够普遍的事情。

如果 redis 不是 100% 可靠/安全,任何关于我如何使用 postgres/Hstore 做到这一点的想法(请不要加入)。

【问题讨论】:

看看这篇关于redis持久化的文章就好了oldblog.antirez.com/post/redis-persistence-demystified.html 【参考方案1】:

我们为第二大在线时尚社区构建了一个解决方案,并开源了我们的方法: https://github.com/tschellenbach/Feedly 它是目前最大的旨在解决这个问题的开源库。 您可以同时使用 Redis 和 Cassandra 作为存储后端。

我们已经在 Redis 上运行了一年多,没有遇到任何问题。如果设置正确,它运行非常稳定,不太可能丢失数据。

构建 Feedly 的同一团队还提供了一个托管 API,它可以为您处理复杂性。看看getstream.io 有 Python、php、Node 和 Ruby 的客户端库。

此外,请查看这篇高可扩展性帖子,我们解释了其中涉及的一些设计决策: http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html

This tutorial 将帮助您使用 Redis 设置像 Pinterest 的提要这样的系统。这很容易上手。

要了解有关 Feed 设计的更多信息,我强烈建议您阅读一些我们基于 Feedly 的文章:

Yahoo Research Paper Twitter 2013 Redis based,带后备 Cassandra at Instagram Etsy feed scaling Facebook history Django project,具有良好的命名约定。 (但仅限数据库) http://activitystrea.ms/specs/atom/1.0/(演员、动词、宾语、目标) Quora post on best practises Quora scaling a social network feed Redis ruby example FriendFeed approach Thoonk setup Twitter's Approach

【讨论】:

【参考方案2】:

我认为它足够安全。 Redis 支持两种形式的persistence。您可以配置 AOF 持久性,以便在发生崩溃时可能不会丢失任何数据。

Redis 是比较简单的软件,不容易崩溃。我的轶事证据是一个应用程序,其中 所有内容 都存储在 Redis 中。它目前在 Redis 中为大约 22 万用户和相关信息存储了大约 34 万个密钥。 Redis 从未崩溃或出现过任何问题。该应用程序已经运行了将近 6 个月,我只是在重新启动服务器几次时重新启动了 Redis。

【讨论】:

【参考方案3】:

您正在做的事情的名称称为“写入时扇出”,这里有一些关于此方法和其他方法的很好的讨论:http://www.quora.com/Activity-Streams/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed。

这里实际上有一篇专门针对 Redis 执行此操作的帖子:http://nosql.mypopescu.com/post/4588381681/activity-feeds-with-redis。

我提醒人们注意的一件事是过早扩展 - 在您需要进一步扩展之前,尽量使用可行的方法。在相当大的规模之前,您对 Redis 的使用应该是相当安全的。

这是一篇旧帖子,因此您可能已经完成了该项目,但对于正在尝试这条道路的其他人来说,使用将为您处理活动流的服务可能是有意义的。全面披露:我公司的服务 Collabinate (http://www.collabinate.com) 明确旨在使构建活动流变得非常简单、高性能和可扩展。

【讨论】:

以上是关于只使用redis实现活动流有多安全?的主要内容,如果未能解决你的问题,请参考以下文章

Redis简单案例 连续登陆活动的简单实现

使用redis zset实现抽奖,奖池商品按时间随机分布

使用 Redis 存储会话有多安全?

隐含意图有多安全?

使用Redis解决秒杀业务问题分析与解决方案

AD活动目录概述--运维笔记