如何在Django + Pusher中存储聊天记录?龙卷风或芹菜需要吗?

 帅哥不潮_460 发布于 2023-01-19 19:56

我们是一家建立聊天服务的小型创业公司,我们在弄清楚如何存储聊天记录方面遇到了大麻烦.我们也不确定龙卷风是如何在我们的场景中.

我们有一个在Heroku上运行的Django应用程序,我们还不确定是否应该实现一个单独的Tornado应用程序将消息转发给Pusher,所以现在是Django应用程序从客户端接收消息并将它们转发到Pusher通道.

我们的初始架构现在如下图所示:

chattyhive初始架构

我们使用PostgreSQL存储用户配置文件,聊天室信息等.我们不知道什么是存储聊天消息的最佳方法.我们也可以使用PostgreSQL吗?是否可以使用Redis持久化来存储整个聊天历史记录(即使应用程序在用户数量上增长很多),或者最好将Redis用于最新消息,并将PostgreSQL用于整个历史记录.我们也很好奇其他NoSQL解决方案,比如couchDB,HBase等,这些解决方案似乎是在hipchat或line这样的大型应用程序的架构中,但似乎很少有项目在一开始就使用它们并且在Heroku中支持它们不一样.如果我们计划有一个大的增长,我们应该看看它们吗?

这是我们头痛的第一部分,另一部分是如果我们已经在使用Pusher,将Tornado用于我们应用程序的消息传递部分是多么重要.如果我们这样做,那么将两种应用程序结合起来可能是一种可行的方法.如果Tornado应用程序接收并存储消息:我们如何从Django模型层访问此消息以执行搜索等等?Tornado应用程序可以将消息存储在与Django应用程序共享的数据库中吗?

相关问题:
对于Django应用程序,使用Pusher龙卷风的优势(或需求)是什么?
/sf/ask/17360801/

最后:芹菜怎么帮忙?我们可以坚持使用Django并使用Celery对消息进行排队,以便将它们异步传递给Pusher吗?

如果你能对此有所了解,我们将非常感激.本周我们已经进行了很多研究,但仍然没有真正清楚!很高兴知道我们是否可以从最简单的开始并进行某种进展:在我们的PostgreSQL中使用Django存储聊天记录,然后转移到Redis以获取最新消息的缓存,然后可能整合Celery和等等.或者,如果我们应该继续并实施一个龙卷风应用程序来处理从现在起与消息传递相关的所有内容!

1 个回答
  • 我们应该使用龙卷风吗?

    基本问题是:您是否会受益于Tornado对来自客户的请求的异步功能?您是否必须等待异步结果(如请求推送器的结果)才能生成http响应?

    如果你这样做(可能是你想发送给发送消息的客户端的反馈),那么龙卷风web服务器将允许你在等待异步获取所需资源的同时处理另一个请求.

    我重复异步很多次,因为它真的是你可以从龙卷风中获得的核心好处,如果你没有或不需要非阻塞的异步资源来产生响应,龙卷风就会像任何其他阻塞网络服务器一样.

    我们可以和django一起使用龙卷风吗?

    当然,您可以使用龙卷风应用程序使用django的orm,表单,模板和堆栈的其他部分.它将脱离django的文档,但你可以在网上找到一些关于龙卷风+ django堆栈的文章

    龙卷风和推土机

    推进器中使用的龙卷风通道是龙卷风异步http 客户端.

    这是您可以使用的非阻塞异步资源的一个示例.

    芹菜有帮助吗?

    Celery将使您能够异步地排队/安排作业,例如将消息推送到推送器或持久性后端,进行长时间运行的搜索,安排某些统计信息的推送.

    它也可以用作龙卷风的非阻塞异步资源.见龙卷风芹菜

    您可以尝试的例子是多路复用作业,以尽可能减少网络上的往返,但这是不成熟的优化:D

    坚持 - Postgres,Redis.

    您可能需要担心的是可伸缩性的分区复制,以及在持久性后端的多个实例上分配负载.

    Redis通常被认为是非常可扩展的,我会尝试它,但它是个人观点和渴望,而不是经验和基准测试.

    希望有帮助:)

    2023-01-19 20:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有