集群系统架构?

时间:2016-04-04 06:12:50

标签: java architecture cluster-computing

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

  1. 我是否应该考虑在具有负载平衡的某个群集中开发应用程序,或者一台服务器是否会处理这种用量?
  2. 如果是,是否有关于开发应用程序以在群集中工作的指南?与开发单一服务器应用程序有什么区别吗?
  3. 我应该担心这个应用程序的数据库吗?当2台服务器同时向单个数据库读/写数据时,我应该遇到什么问题?也许它也应该在集群中工作?
  4. 我很高兴有关设计此中型应用程序的任何帮助和/或文章。

2 个答案:

答案 0 :(得分:2)

  1. 这取决于您的NFR(非功能要求)。在负载平衡旁边,集群提供更高的可用性。

  2. 您必须使您的后端无状态,以便来自同一用户的请求可以在另一个节点上结束而用户不会注意到。这使得构建缩放软件成本更高。因此,请仔细考虑您的选择。

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

答案 1 :(得分:0)

要回答您的第一个问题,我认为使用基础设施提供商可以轻松扩展(上调或下调)您的应用程序,这一直是一个很大的优势,可以帮助您节省资金。我对这类提供商的主要体验是亚马逊网络服务(AWS)。

我不确切地知道您打算使用哪种技术,但像AWS这样的常规设置对我来说是有道理的:

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

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

如果需要,这基本上可以让你扩展到超过500个并发用户,并且当你处理较少的用户时可以节省一些钱。请注意,也可以安排自动缩放组。例如:«我希望白天至少有5个实例(最多50个),但是你可以在凌晨1点到凌晨4点之间下降到2个(最多50个)»

我提到的服务有很多文档记录,所以如果您想了解更具体的细节,可以查阅。

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

希望这会有所帮助:)