我正在建立一个网站,允许用户“关注”不同的成员,并且每当该成员发布时,它会以反向时间顺序将其添加到所有关注者活动流中。这些天很常见的东西。
但我无法确定最具可扩展性/面向未来的实现方法(没有连接)。
我正在使用flask / heroku / sqlalchemy / postgres。我正在考虑使用Open-redis插件并执行类似Instagram的提示:每个用户都有一个redis列表,每当有“关注”帖子时,它会将帖子添加到每个关注者列表的开头并修剪其总大小。
我对redis知之甚少,不知道为每个用户流依赖soley是否安全。使用open-redis时,他们没有提到任何有关持久性的内容,所以我不知道这些日子是否仅仅是一个普遍的事情,只是假设它。
如果redis不是100%可靠/安全,那么我对如何使用postgres / Hstore进行任何想法(请不要加入)。
答案 0 :(得分: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-feeds.html
This tutorial可帮助您使用Redis设置类似Pinterest的Feed。它很容易上手。
要了解有关饲料设计的更多信息,我强烈建议您阅读我们基于Feedly的一些文章:
答案 1 :(得分:1)
我觉得它足够安全。 Redis支持两种形式的persistence。您可以配置AOF持久性,以便在发生崩溃时不会丢失任何数据。
Redis是相对简单的软件,不会轻易崩溃。我的轶事证据是一个应用程序,其中所有存储在Redis中。它目前在Redis中存储大约340k密钥,用于大约220k用户和相关信息。 Redis从未坠毁或有过任何问题。该应用程序已运行了近6个月,我只重启了服务器几次重启Redis。
答案 2 :(得分:1)
你正在做的事情的名称被称为“写作中的扇出”,这里有关于这个和其他方法的一些很好的讨论: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)明确设计用于使构建活动流非常简单,高效和可扩展。