【问题标题】:Building scalable applications VS just Cloud ready applications构建可扩展的应用程序 VS 仅云就绪的应用程序
【发布时间】:2013-04-26 07:23:19
【问题描述】:

最近,我与一位以经验丰富的建筑师而闻名的建筑师进行了讨论。讨论围绕在 Web Farm 中运行的多租户基于 Web 的应用程序的理想架构和设计。该应用程序的唯一工作是允许用户上传系统正在处理的“n 个”Excel 文件以生成非常复杂的报告。处理这些文件需要很长时间(每个一个小时,让我们把它作为一个约束)。因此,上传后的用户等待系统通知下载生成的报告。

乍一看,要求看起来很简单,但期望应用程序必须是 100% 可扩展的。 我们与架构一起讨论了各种解决方案,但我们发现它并不令人满意。我需要这个社区的成员与技术一起提出设计解决方案。这不是我的专业任务,而只是一项调查,以了解架构师对构建可扩展应用程序的看法 VS 仅云就绪应用程序,其中易于扩展基础架构而不是专注于应用程序可扩展性。

【问题讨论】:

  • 所有的excel处理都是相互独立的吗?如果没有依赖关系,只要您像在云中一样继续扩展硬件,这看起来是一个相当简单的问题。
  • 是的,所有处理都是独立的,但挑战在于使应用程序具有可扩展性,而不仅仅是注入更多的硬件。我们应该考虑将横向扩展作为最后的选择,直到达到应用程序无法进一步纵向扩展的阈值。
  • 那么你的问题应该改为关于效率而不是可扩展性,因为你已经有了它。如果您将问题更改为有效地针对 excel 文档转换的具体问题,您将获得更好的答案。

标签: performance architecture cloud scalability extensibility


【解决方案1】:

用户可以通过网站上传excel文件。他们的凭据也通过了。后端在数据库中注册这个请求,并返回请求 id(一个 Guid 或其他东西)。该过程结束。

Windows 服务正在运行并轮询数据库,寻找要处理的新请求。您可以使用 Quartz.NET 来安排一些将处理请求的并行作业。这种请求处理(处理 excel 文件和生成报告)被委托给负载平衡的 WCF 服务,因此您拥有的 WCF 服务越多,可以调度的并行 Quartz 作业就越多。如果请求已处理,则可以安排另一种类型的 Quartz 作业发送邮件。

站点定期轮询以查看请求(或特定请求)的状态和进度;并管理它们。对于已完成的请求,可以下载报告。

我认为这是一个非常可扩展的解决方案,也是松耦合的。

【讨论】:

  • 亲爱的 L-Three 感谢您的建议。看起来可行且下降的解决方案,我们如何确保 DB Operations 的可扩展性?喜欢大规模的选择、插入、更新?所有这些服务是否同时访问数据库?它不会对数据库征税过多吗?同样,我们如何确保有效处理来自客户端的如此多请求,例如解析数据库?
  • 我认为数据库很少是瓶颈,但这当然取决于您要做什么。例如,处理并发读/写,使用正确的锁定机制(如ludwigstuyck.wordpress.com/2013/02/28/…),对于批量插入,使用适当的技术(如ludwigstuyck.wordpress.com/2013/02/27/…)等。所以首先尝试提出具体的非功能性需求,然后进行技术设计。
  • 谢谢,我把它留给更多的 cmets。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2010-10-29
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多