实现可扩展聊天服务器的策略

     2023-03-08     198

关键词:

【中文标题】实现可扩展聊天服务器的策略【英文标题】:Strategy to implement a scalable chat server 【发布时间】:2015-01-26 23:00:27 【问题描述】:

我希望实现某种聊天服务器。我希望它扩大规模。这似乎是一个大问题,所以我想我希望答案是方向指针,有点探索性。

最终用户客户端是网络或电话客户端。我认为某种 websocket 实现,例如 Socket.IO 是不错的。

在服务器端,我希望使用 Node.js。我希望架构是可扩展的,这样用户的数量就不会受到限制(好吧,在合理的范围内,预计不会大获成功,如果是的话,让更聪明、有经验的人来工作的机会是合理的而不是目前只有我编码)每个聊天室的用户数量希望不受限制,或者可能是一些固定的大数量。这意味着我需要使用多个用 Node 编写的服务器进行水平扩展。

假设某个负载均衡器(希望将来不会出现单点故障,但我不知道如何实现,或者只是转移到 AWS)正在将 SocketIO 连接从终端客户端分派到聊天室服务器。不同的用户连接到不同的服务器可能在同一个房间,因此需要将消息发送到其他服务器。

我将如何切实可行地实施这样的事情?希望不要太复杂。

问题: (1) 如果所有服务器都需要处理所有消息,因为用户可以通过任何服务器登录,这是否可以扩展? (2) 我是否需要某种消息队列让服务器在它们之间进行通信? Rabbitmq 的 Pub-sub 是否可用于此?或者如果 zeromq,我将如何使用 pub sub 进行扩展? Zeromq 指南解释了如何使用 REQ/REP 类型的应用程序扩展到多个服务器。但不是 Pub Sub。 (3) 还是应该从 XMPP 开始?

我希望让它尽可能简单地工作。

【问题讨论】:

【参考方案1】:

在 Socket.io 网站上有一个很好的解释。来看看

http://socket.io/docs/using-multiple-nodes/

它建议使用 Nginx 作为 HTTP 负载均衡器、Node.js 集群(带有粘性会话)和 Redis 作为消息后端。

我认为你的目标应该是可以实现的,几乎不需要编码,只需要使用给定的模块和配置机制。

【讨论】:

所以,redis在这种情况下就像一个MQ。 你有什么想法,如果我想将聊天消息转储到 MongoDB,我将如何实现?如果我有一台 Node.js 服务器订阅所有内容并将其记录到 MongoDB,它似乎无法扩展。但如果我有两个,我会记录它......两次? 在这种情况下我不是专家,但是 afaik MongoDB 支持节点之间的复制... Redis 速度快如闪电,也许您可​​以将其用作“主存储”并保存到您的 MongoDB 实例中) 异步?

使用(playframework akka 和 websocket)的可扩展聊天室 [关闭]

】使用(playframeworkakka和websocket)的可扩展聊天室[关闭]【英文标题】:Scalablechatroomusing(playframeworkakkaandwebsocket)[closed]【发布时间】:2014-12-0514:39:44【问题描述】:有人要求我使用Play(java)、Akka和websocket构建一个可扩展的聊天室。... 查看详情

云原生服务网格istio第一章

...Istio通过集中配置的流量规则控制服务间的流量和调用,实现负载均衡、熔断、故障注入、重试、重定向等服务治理功能。  ◎安全:Istio提供透明的认证机制、通道加密、服务访问授权等安全能力,可增强服务访问的安全 ... 查看详情

nlp开发python实现聊天机器人(微软azure机器人服务)(代码片段)

1、简介什么是BotFrameworkSDK?MicrosoftBotFramework和Azure机器人服务是库、工具和服务的集合,可用于生成、测试、部署和管理智能机器人。BotFramework包括一个模块化且可扩展的SDK,用于生成机器人并连接到AI服务。借助此框架,开发... 查看详情

实时可扩展聊天应用程序 - 我应该选择哪个数据库?

】实时可扩展聊天应用程序-我应该选择哪个数据库?【英文标题】:RealtimeScalableChatApp-whichdatabaseshouldIchoose?【发布时间】:2021-06-3021:42:24【问题描述】:我正在寻找构建一个可扩展的实时聊天应用程序(我这样做只是为了好玩... 查看详情

用ssh框架ajax和jms实现网页的点对点聊天通信。这个策略可以不?

...消息如果直接放到内存是不是,会更好。。追问放内存?服务器的负荷呢?用户的访问速度呢?训导路径呢?问询方式呢?请具体说一下放内存是什么意思?也就是放内存怎么做呢。追答举例memcached的使用 查看详情

高效的可扩展序列生成器实现

...:我需要实现多个共享序列生成器,它们将被50-100个Tomcat服务器使用。每个序列生成器应从1开始,并在每次请求后递增1。序列生成器实现应该有原子增量命令。Java客户端应该可用。规模:多达50000个正在使用的序列生成器,对... 查看详情

简明入门讲义——如何实现可扩展的web服务

概览一.服务器二.数据库三.缓存四.异步参考文献一.服务器可扩展的应用服务器(ApplicationServer)集群藏身于负载均衡器(Loadbalance,LB)背后,LB将负载(即用户请求)平均地分配到各个组或集群的... 查看详情

系统设计与开发策略

1、系统实现过程业务逻辑的抽象、技术架构的细化、业务服务的实现、业务功能的验证、系统的整合、系统的扩展、系统的部署业务逻辑的抽象:沟通、建模与评审、工具(UML、便捷方法)【一般由产品经理、技术经理负责,... 查看详情

基于electron实现的pc桌面聊天软件

参考技术AOIM-E是基于Electron实现的PC桌面聊天软件,可支持Windows、Linux、Mac等主流平台。主要采用了Vue、iView、TypeScript等技术实现,通讯协议主要是websocket。服务端支持私有部署,可用于企业内部管理通讯等功能。https://gitee.com/oi... 查看详情

我应该或不应该如何一起使用 Cassandra 和 Redis 来构建可扩展的一对一聊天应用程序?

】我应该或不应该如何一起使用Cassandra和Redis来构建可扩展的一对一聊天应用程序?【英文标题】:HowshouldIorshouldnotuseCassandraandRedistogethertobuildascalableoneononechatapplication?【发布时间】:2017-11-1402:03:00【问题描述】:到目前为止,... 查看详情

apachethrift-使用,内部实现及构建一个可扩展的rpc框架

...ApacheThrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thrift的可扩展的分布式RPC调用框架,在中小型项目中是一个常见的SOA实践。Thrift介绍... 查看详情

ejabberd 和推送通知

...用XMPP在我的iOS和Android应用程序中集成了聊天系统。我在服务器端使用了ejabberd2。聊天系统工作正常。我想使用APNS和GCM在我的聊天中集成推送通知。如何在每条聊天消息中发送推送通知?ejabberd2有任何API或扩展可用于实现此功能... 查看详情

扩展 gRPC 双向流式聊天服务

...服务时,用户的StreamObserver将存储在聊天室存储库中,即服务器中保存userId-StreamObserver的简单HashMap。一段时间后,当用户发送 查看详情

是否可以实现可扩展的表头视图?

】是否可以实现可扩展的表头视图?【英文标题】:Isitpossibletoachieveexpandabletableheaderview?【发布时间】:2020-05-1812:17:11【问题描述】:我已经实现了带有可扩展部分的表格视图,即用户选择的部分将具有该特定类别的项目数。对... 查看详情

activemqmqtt点对点聊天实现(转载)

我这想到一个点对点聊天的方法,不用没割人都建立一个topic了,思路还是自定义一个分发策略,具体如下:1、 建立一个topic,所有人都用匹配订阅的方式订阅以该topic为头的topic,例如:所有人都订阅PTP/#。2、 例如A向B... 查看详情

在 AWS 中扩展聊天的想法?

...案。我想出了几个潜在的解决方案:RedisPub/Sub-当用户与服务器建立连接时,该服务器订阅该用户的ID。当有人向该用户发送消息时,服务器将使用该用户的id向频道执行发布。用户连接的服务器将接收消息并将其推送到适当的客... 查看详情

最佳 Spring 批量扩展策略

】最佳Spring批量扩展策略【英文标题】:BestSpringbatchscalingstrategy【发布时间】:2015-05-2009:13:24【问题描述】:我们有运行良好的简单批处理。最近我们有新的要求来实施新的批处理来生成报告。我们有不同的数据源可供阅读以准... 查看详情

redis八种淘汰策略是啥?

...使用很方便。  Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实... 查看详情