我试图想出在AWS中扩展聊天服务的最佳解决方案。我想出了几个可能的解决方案:在AWS中扩展聊天的想法?
的Redis的Pub/Sub - 当用户建立至该服务器预订该用户的ID服务器的连接。当有人向该用户发送消息时,服务器将使用该用户的ID执行发布到该频道。用户所连接的服务器将收到该消息并将其推送到适当的客户端。
SQS - 我想为每个用户创建一个队列。用户连接的服务器将轮询(或使用SQS长轮询)该队列。当发现新消息时,它将从服务器推送给用户。
SNS - 我真的很喜欢这个解决方案,直到我发现了100个主题的限制。我需要为每个用户创建一个主题,该主题仅支持100个用户。
是否有任何其他方式可以使用AWS扩展聊天? SQS方法是否可行? AWS需要多长时间才能将消息添加到队列中?
感谢这个答案,很多很棒的信息!聊天服务将通过网络建立。目前的想法是使用简单的长轮询解决方案将消息推送到浏览器。就用户数而言,它是一款新产品,所以我们没有一个好的评估。我们希望能够支持注册的许多用户。你对SQS的想法很有趣,我对SQS的主要关注点是消息之间的延迟。如果一个用户向队列中添加消息,接收该消息需要多长时间?可能是我需要做一个原型的东西。 – 2013-05-09 14:37:18
公平点,但该设置(关系数据库,硬件绑定的缩放,以及用于控制的Java/C#)看起来像是一种“老派”的聊天方式。现在,我会研究平面文件的长期存储(可能会将最新消息每分钟转储到S3一次?),Pub/Sub的SNS(每个“房间”有一个主题),一组高性能非像Twisted(Python)或Node.js(JavaScript)这样的线程化事件服务器,最后是Web Sockets和/或Server Sent Events,以在服务器上实现尽可能轻的负载,同时保持消息流对每个客户端都有效。或者我错过了什么? – 2014-01-22 20:02:27
@Roland。我同意你的看法,背后的大型关系数据库和一大堆前端服务器就是这样做的老派方式。如果我今天建立了一项服务,我可能会使用RDS和DynamoDB的组合。使用网络套接字或长轮询的前端将取决于我们所针对的客户端类型。有很多方法可以对这只猫进行剥皮,并且在不知道相关要求的情况下(在私有局域网上运行?在云中?扩展?成本问题?增长率?客户类型?数据生命周期等),很难说更多... – 2014-01-23 21:29:23