首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用内存对象时的系统架构?

使用内存对象时的系统架构?
EN

Stack Overflow用户
提问于 2021-04-11 03:45:56
回答 2查看 90关注 0票数 0

我使用.net内核、jquery和signalR创建了一个陌生人聊天web应用程序。目前,我正在使用字典为用户存储连接I和消息。我使用内存中的对象字典,而不使用任何database.For测试透视图,我已经将它部署在azure上,它对3-4个用户很好。我的问题是

1.假设我的应用程序一次有3000名用户聊天,什么是最好的托管应用程序的解决方案?我的思想过程是,我可以采取多个系统和使用负载均衡器,我可以重定向到不同的系统。例如,假设有1500个用户,那么每个服务器可以在内存对象中拥有500个用户,而这500个用户可以彼此聊天。我可以看到一个限制,即每个用户只能与这500个用户聊天,而不是1500个用户。这个解决方案可行吗?

2.我需要多少Ram/CPU核心/存储同时处理3000名用户?

3.是否需要使用弹性搜索数据库而不是在内存对象中存储消息?我不需要存储消息,但是弹性搜索数据库对分布式系统有帮助吗?

4.使用负载均衡器的最佳方法是什么?在我的情况下,我还需要多少个分布式系统?

我的应用程序支持与陌生人聊天,上传图片,视频。

我知道这可以改变,我们不能准确地告诉它,但我想知道我的web应用程序的最好的系统架构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-13 12:47:03

为了扩大这个范围,我会查找PubSub/Realtime数据库。例子有: Firebase实时数据库,Kafka Streams,Redis.

这样,您可能根本不需要任何自定义后端。

如果您选择自己的服务器作为公共服务的中间件,那么一切都变得更加复杂。您必须找到一种方法来管理您的基础设施(例如,使用Kubernetes),并设置一个负载均衡器(例如HAProxy),它在服务器之间分发请求。

有些提供程序(如codesphere.com或heroku.com )使此过程更容易进行。

除此之外,您还可以通过cdn (如cloudflare.com、netlify或vercel )以一种可伸缩和简单的方式为您的前端服务。

票数 1
EN

Stack Overflow用户

发布于 2021-04-16 07:28:17

据我所知,当前的解决方案是使用SignalR前端与后端对话,然后后端为其他用户与前端对话?

目前主要关注的是存储,因此您需要将其提取到一个单独的位置。因为它是一种用来存储连接细节的缓存,所以Redis或另一种缓存机制将是最好的选择。然后,当需要一些信息时,后端就会与Redis进行通信。

第二个问题是连接计数,因为您会有更多的用户。您需要扩展后端以支持这一点。我不知道Azure是如何工作的,但我确信它确实支持它,我假设有某种设置来扩展服务,并使用某种负载平衡策略,比如循环。因为我们不需要记住用户连接到哪个服务,所以应该可以工作。

关于消息历史,您提到您没有存储它,用户在重新加载应用程序时会丢失它。如果您需要某种类型的轻量级消息存储,您可以考虑web浏览器上的本地存储。消息可以在本地存储,您不需要在后端担心这一点。否则,如果您需要存储消息,那么我认为nosql对此很有好处,因为您只需要使用用户id和消息id来存储blobs。就像你说的那样,弹性很适合这样做。

回答你的问题:

通过将存储提取到cache.

  • Difficult来解决
  1. 问题,也就是说,您只需要监视Azure服务。然而,由于可以使应用程序具有可伸缩性,所以一旦达到极限,就应该能够对其进行操作。正如前面提到的,
  2. 取决于应用程序的行为方式,但如果您需要某种存储,客户端的本地存储或某种nosql数据库都可以满足此目的。
  3. 负载平衡应该在Azure中可用,您只需要选择某种策略来平衡负载。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67041271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档