集群系统架构?

Cluster system architecture?

我想为大约 500 个活跃用户(一次会话)开发应用程序。系统不会处理任何大量计算。这将是简单的 read/write 数据库解决方案。但是,每个用户每天会向应用程序上传大约 50mb 的数据。 (当非用户活跃时,它会被其他应用程序每天分析和清理)。事实上,我正在设计这个应用程序,对此我有几个问题。

  1. 我是否应该考虑开发在具有负载平衡的集群中工作的应用程序,或者一台服务器将处理这种使用量?
  2. 如果是,是否有关于开发在集群中工作的应用程序的指南?与开发单服务器应用程序有什么区别吗?
  3. 我应该担心这个应用程序的数据库吗?当 2 个服务器同时 read/write 数据到单个数据库时,我应该期待什么问题?也许它也应该在集群中工作?

如果有任何帮助 and/or 有关设计此中型应用程序的文章,我将很高兴。

为了回答您的第一个问题,我认为使用可让您轻松扩展(向上或向下)您的应用程序的基础架构提供商始终是一个很大的优势,并且可以帮助您节省资金。我对此类提供商的主要体验是使用 Amazon Web Services (AWS)。

我不确切知道您打算使用什么技术,但像 AWS 上那样的一般设置对我来说有意义是:

  • ELB(负载均衡器)后面的一组 EC2 实例(= 虚拟服务器)运行
  • 包含 EC2 实例的自动缩放组。您可以查找它,但是自动缩放组基本上可以让您根据各种因素(服务器负载、磁盘 I/O 等)自动添加和删除实例
  • 为您的数据库使用 RDS。支持MySQL、Oracle等多种DBMS。它还为您提供了不错的功能,例如复制、自动备份和监控。
  • 使用 CodeDeploy 在服务器上部署您的应用程序

(我自愿使用 AWS 名称,以便您有兴趣可以阅读文档。)

如果需要,这基本上可以让您扩展到 500 多个并发用户,并且可以在处理较少用户时为您节省一些钱。请注意,也可以安排自动缩放组。例如:« 我想在一天中至少有 5 个实例(最多 50 个),但您可以在凌晨 1 点到凌晨 4 点之间减少到 2 个(仍然最多 50 个)»

我提到的服务有相当广泛的文档记录,因此如果您需要更具体的细节,可以查阅它。

我不会详细讨论你的另外两个问题,因为我不是这方面的专家,但数据库确实是一个瓶颈,因为它可能涉及很多 I/O。

希望这对您有所帮助:)

  1. 这取决于你的 NFR(非功能性要求)。除了负载平衡,集群还提供更高的可用性。

  2. 您必须使后端无状态,以便来自同一用户的请求可以在用户不注意的情况下最终到达另一个节点。这使得构建缩放软件的成本更高。所以请仔细考虑您的选择。

  3. 从多个服务器访问数据库与从多个线程访问数据库没有什么不同。