5

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

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

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

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

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

4

3 回答 3

3

我们为第二大在线时尚社区构建了一个解决方案,并将我们的方法开源: 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-提要.html

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

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

于 2014-05-30T11:57:36.677 回答
1

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

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

于 2013-01-25T16:16:34.067 回答
1

您正在做的事情的名称称为“写时扇出”,这里有一些关于此方法和其他方法的很好的讨论:http ://www.quora.com/Activity-Streams/What-are-the-scaling -在开发社交网络供稿时要牢记的问题

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

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

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

于 2013-09-27T00:56:08.013 回答