如何确定分布式架构?

Posted

技术标签:

【中文标题】如何确定分布式架构?【英文标题】:How to determine distributed architecture? 【发布时间】:2011-08-15 11:56:02 【问题描述】:

在设计大型应用程序时,我正在努力思考这个过程。

假设我有一个客户需要一个新的客户网站,他估计每天有 40,000 个订单,并且已经拥有 25,000 个用户群。在设计应用程序时,您如何确定是否需要分布式架构?我应该使用网络农场吗?等等

我过去主要构建 2 层(物理)应用程序,我真的很想提高自己的理解力。

任何见解都会很棒!

【问题讨论】:

最佳提示:找一个在该领域有丰富经验的人加入。否则,不要做出任何愚蠢的设计决策并根据需要进行扩展。但是如果没有经验,就很难从理智中分辨出愚蠢 +1 @sehe 的评论 - 你需要从知道自己在做什么的人那里获得帮助 虽然我同意你们(sehe 和 BrandonZeider)的观点,但并不是每个人都有机会按照您的建议去做。 如果需要对此有更多了解,您可以考虑转至serverfault.com。 【参考方案1】:

这将取决于许多其他因素,而不仅仅是每天的订单数量。它将在哪里托管?那个物理架构是什么样的?除了电子商务,该应用程序还能做什么?它是否需要与其他应用程序集成(当然除了支付网关)?等等。

在正确的云托管环境(例如 VMware)中可以动态扩展的简单两层应用程序对于电子商务网站来说非常适用。在正确的本地托管环境(负载平衡的网络农场)中的简单两层应用程序也应该适用于电子商务网站。这是向上扩展(可能隐藏在虚拟化中,最终会出现各种扩展)和向外扩展(添加更多服务器)之间的区别。

分布式架构允许您将系统负载(例如订单处理)分配到位于(可能)位于负载平衡器后面的 1:M 服务器。这是一种非常常见的方法,也适用于电子商务网站。

在我看来,没有一种架构或系统设计适合所有模式。最适合每个模式的架构(我再次认为)是面向服务的架构。如果所有业务流程和逻辑都是服务(并且设计正确),那么无论您的需求如何变化,无论您的托管环境如何变化,无论您有什么集成需求,您的系统都可以轻松应对或没有变化。

【讨论】:

【参考方案2】:

从一开始就对您的新应用程序进行负载测试。

由于预先进行大型设计永远不会给您带来预期的结果(15 年以上的经验),因此最好的做法是针对变化进行设计,并让正确的架构从您的需求中出现。

根据您的描述,为该项目采用敏捷方法,并使用其实践来指导您的项目取得成功。其中一项重要的实践是对你所做的所有工作都有一个“完成的定义”。很明显,在您的 DoD 中,您将拥有该项目:

需要通过负载测试(40,000 个订单;每天 25,000 个用户)。

当您开始开发时,首先要做的事情之一当然是设置能够运行此类负载测试的环境。如果这永远不会发生,那么您在项目的早期就已经知道您将遇到麻烦。 根据需要多次进行负载测试(至少每个 sprint 一次),您将知道您的架构可以/可以处理规​​模要求。

HtH

【讨论】:

【参考方案3】:

可以通过负载平衡至少部分解决扩展问题。

并发可能是您真正的问题。分布式事务是一个笨重的工具,但它不会在没有额外考虑的情况下解决所有用例。

一些金融公司对直接访问数据库的网络服务器有额外的安全要求。

【讨论】:

【参考方案4】:

因为您正在编写 .Net,所以将应用程序放在 Azure 中(da cLOUD 人,DA CLOUD!;)。

它将帮助您获得所需的处理能力。只要您不犯任何愚蠢的错误,该应用程序就会正常运行。

【讨论】:

以上是关于如何确定分布式架构?的主要内容,如果未能解决你的问题,请参考以下文章

第04章 分布式索引架构

Java大型互联网架构-分布式系统服务框架Zookeeper介绍与原理实现

Java开发经典实战!java架构师技术图谱

一文归纳总结分布式架构的那些事!

一文详解:如何设计出高可用的分布式架构?

一文归纳分布式架构的那些事!