在Rails中实现通知

Jat*_*tra 18 twitter notifications facebook ruby-on-rails observer-pattern

在我的申请中,我想在评论或帖子中提及他/她时通知用户.
用户句柄@user_name类似于Facebook.
提及的数据库表如下所示:

Mention
  mentioned_by: user_id (foreign key)
  user_mentioned: user_id (foreign key)
  comment_id: (foreign key)
  post_id: (foreign key)
Run Code Online (Sandbox Code Playgroud)

我无法想出实现它的方法.Facebook/Twitter如何做到这一点?

我决定使用的是使用ActiveRecord callbacks/ Observer design pattern,每当新的评论/帖子保存到数据库时,我都可以浏览帖子/评论的内容,并留意任何提及,然后根据需要执行通知.

我觉得有一些缺失的东西,我没有把它弄好.
这是最好的方式吗?

cor*_*ard 27

Facebook和Twitter不是中型Rails应用程序.他们是公司.运行它们的技术是分布式的,主要是定制的,特别是在Facebook的情况下.

您似乎正在抓住的部分是他们如何确定以高性能和可扩展的方式通知的人.这就是狗屎变得真实的地方.你可以找到很多关于它们背后的架构的信息,当然有许多很棒的东西可以帮助你思考这些东西,但最终它们都不会成为你实现的任何应用程序.重建.

http://www.quora.com/What-is-Facebooks-architecture

Facebook架构

http://www.infoq.com/news/2009/06/Twitter-Architecture

http://engineering.twitter.com/2010/10/twitters-new-search-architecture.html

Quora的细节更加丰富多彩.


不幸的是,这一切都无法让您更接近目标.我认为,最现实的事情,你做的,开始了与woud是简单地绑在一个服务像推进器将消息发送给客户,而不必担心它,使用ActiveRecord的观察员,以通知添加到背景队列,其中工人实际发送那些通知Pusher.这是一天或更少的工作,它应该可以很好地扩展到每天至少10k通知.一旦你开始遇到性能问题,抛弃Observer和Pusher就像Goliath这样可以在本地处理这两个工作的东西.

最重要的是,了解大型和经验丰富的系统可以了解的内容,但主要是看看他们遇到了什么问题以及他们如何解决这些问题.这些方法在大家伙中并不相同,并且每种实现方式都会有所不同.

希望这有助于指明你的方向.:)