我使用.net内核、jquery和signalR创建了一个陌生人聊天web应用程序。目前,我正在使用字典为用户存储连接I和消息。我使用内存中的对象字典,而不使用任何database.For测试透视图,我已经将它部署在azure上,它对3-4个用户很好。我的问题是
1.假设我的应用程序一次有3000名用户聊天,什么是最好的托管应用程序的解决方案?我的思想过程是,我可以采取多个系统和使用负载均衡器,我可以重定向到不同的系统。例如,假设有1500个用户,那么每个服务器可以在内存对象中拥有500个用户,而这500个用户可以彼此聊天。我可以看到一个限制,即每个用户只能与这500个用户聊天,而不是1500个用户。这个解决方案可行吗?
2.我需要多少Ram/CPU核心/存储同时处理3000名用户?
3.是否需要使用弹性搜索数据库而不是在内存对象中存储消息?我不需要存储消息,但是弹性搜索数据库对分布式系统有帮助吗?
4.使用负载均衡器的最佳方法是什么?在我的情况下,我还需要多少个分布式系统?
我的应用程序支持与陌生人聊天,上传图片,视频。
我知道这可以改变,我们不能准确地告诉它,但我想知道我的web应用程序的最好的系统架构。
发布于 2021-04-13 12:47:03
为了扩大这个范围,我会查找PubSub/Realtime数据库。例子有: Firebase实时数据库,Kafka Streams,Redis.
这样,您可能根本不需要任何自定义后端。
如果您选择自己的服务器作为公共服务的中间件,那么一切都变得更加复杂。您必须找到一种方法来管理您的基础设施(例如,使用Kubernetes),并设置一个负载均衡器(例如HAProxy),它在服务器之间分发请求。
有些提供程序(如codesphere.com或heroku.com )使此过程更容易进行。
除此之外,您还可以通过cdn (如cloudflare.com、netlify或vercel )以一种可伸缩和简单的方式为您的前端服务。
发布于 2021-04-16 07:28:17
据我所知,当前的解决方案是使用SignalR前端与后端对话,然后后端为其他用户与前端对话?
目前主要关注的是存储,因此您需要将其提取到一个单独的位置。因为它是一种用来存储连接细节的缓存,所以Redis或另一种缓存机制将是最好的选择。然后,当需要一些信息时,后端就会与Redis进行通信。
第二个问题是连接计数,因为您会有更多的用户。您需要扩展后端以支持这一点。我不知道Azure是如何工作的,但我确信它确实支持它,我假设有某种设置来扩展服务,并使用某种负载平衡策略,比如循环。因为我们不需要记住用户连接到哪个服务,所以应该可以工作。
关于消息历史,您提到您没有存储它,用户在重新加载应用程序时会丢失它。如果您需要某种类型的轻量级消息存储,您可以考虑web浏览器上的本地存储。消息可以在本地存储,您不需要在后端担心这一点。否则,如果您需要存储消息,那么我认为nosql对此很有好处,因为您只需要使用用户id和消息id来存储blobs。就像你说的那样,弹性很适合这样做。
回答你的问题:
通过将存储提取到cache.
https://stackoverflow.com/questions/67041271
复制相似问题