我正在用Python构建一个集中式消息传递程序,类似于旧的msn messenger或whatsapp。 假设现在,我的服务器可以处理大约50000名在线用户,其工作原理如下:
user1希望向user2发送消息,因此user1将消息发送到服务器,服务器在内存中维护一个庞大的列表,映射用户及其ip地址,因此,如果user2在线,服务器将消息转发给user2,如果user2不在线,消息将保存在服务器中,直到user2再次在线并请求新的msg
现在我的问题是:假设程序的用户数量在增长,现在我必须处理20万用户,所以我需要4台服务器。处理“查找”user2连接到哪个服务器的过程的最简单方法是什么,以便将消息转发给他? 可能是一个“路由器服务器”,它将所有服务器中的所有用户映射为在线,以便连接user1的服务器将消息转发到连接user2的serverX?如果这是最好的方法,那么当用户离线、返回在线并向随机服务器“询问”新消息时,我该怎么办?如何检索其所有新MSG
另一种可能的方式是,当user1连接时,服务器向其余服务器广播搜索,询问user2是否连接到它们
提前谢谢各位
我将分开关注点(以及各自的技术/协议):
并单独解决它们(但当然知道它们要插在一起,所以它们之间的性能特征和协议不应该相差很远)
对于#1,#3,您应该能够与
asyncio
、zeromq
等一起快速破解某些东西对于#2,我将尝试找到一些能够作为集群扩展的现有中间件(
Kafka
,Ignite
,等等)这种方法的美妙之处在于,在第一个原型中,您可以用一个集中式数据库模拟#2,因此整个过程将立即启动并运行,同时您将学习如何启动、调优、监视分布式持久性等
LinkedIn engineering的一篇很棒的文章,应该会让你进入正确的思维方式来解决手头的问题-The Log: What every software engineer should know about real-time data's unifying abstraction
相关问题 更多 >
编程相关推荐