【问题标题】:How to implement a Web-Shop with a Shared Nothing architecture如何使用 Shared Nothing 架构实现 Web-Shop
【发布时间】:2011-06-15 04:34:11
【问题描述】:

有些人认为,使用 Shared Nothing 架构实现每个 web 应用程序是可能的,甚至是必要的。如何使用这种架构风格实现带有购物车的网上商店?

通常可以使用会话来实现网上商店。在这种情况下,我必须以另一种方式实现它,以便没有关于购物车的信息存储在服务器上。但是随后有必要将购物车内容包含到隐藏字段中,以便它们随着每个请求传递到服务器。这是使用 Shared Nothing 架构的网上商店的解决方案吗?

您对如何实现 web 应用的无共享架构有任何想法吗?

【问题讨论】:

  • “不共享”并不意味着“没有会话”
  • 这是否意味着存储在数据库中的会话不会违反“无共享”原则?

标签: web-applications architecture shared-nothing


【解决方案1】:

虽然我从未明确提出构建基于无共享 (SN) 的系统,但我建议任何认为有必要使用“纯”SN 构建 WebApps 的人是:

  • 拥有如此庞大的预算,他们可以为每一层使用一百万个集群。
  • 是从未真正实施过任何东西的学者。

如果您有一个网络服务器集群,并且以某种方式对流量进行负载平衡,这意味着您不能保证同一个网络服务器将处理给定会话的每个调用 - 那么是的,原则SN 申请:你不能引入服务器亲和性。

但是为“每个”网络应用扩展这一点简直是荒谬的。

SN 和所有其他架构一样,就像工具——它们是问题的解决方案;问题决定了解决方案——而不是相反。

【讨论】:

    【解决方案2】:

    就我在网上商店的经验而言,无共享架构比基于会话的架构更好。由于会话过期,我的购物卡消失了很多次,我非常恼火! AJAX 与否,webapp 至少应该将用户的选择存储在 cookie 中,或者,如果可用,HTML5 存储和其他奇妙的机制。

    但是,基于 HTTP 会话的应用程序也有其优点,尤其是在服务器端为用户缓存资源时,这种获取成本很高 - 典型的负载繁重的业务逻辑事务系统。在许多情况下,混合解决方案将是最佳选择。

    所以我的答案是 - 这取决于。您应该编写需求并选择最好的,而不是关心您正在应用的模式或架构的名称是什么:)

    【讨论】:

      【解决方案3】:

      您可以使用分布式缓存(例如 memcached)在服务器端存储会话数据。

      【讨论】:

        【解决方案4】:

        领先的云提供商提供的服务可能会让您了解如何在树层应用程序中实现 SN。使用具有不同策略的负载均衡器可帮助您将共享资源移动到它们自己的服务器上,从而使您的应用程序服务器可用于网络。但是RDBMS一直是SN的瓶颈。

        为了从数据库中卸载会话处理负载,内存缓存可以提供帮助,因为数据在 RAM 中,并且由 Redis 管理的弹性(例如)会话数据访问变得更快。应用程序和数据库服务器的文件存储由 NAS 解决,服务器可以安装到 NAS,它有助于减轻 HDD、SSD 故障并提供更快/弹性的 IO。搜索活动也是 RDBMS 的负担。 ElasticSearch 可以从您的数据库中卸载搜索负载。可以进行的另一项改进是在数据库前面使用内存缓存进行查询。如果自上次提取后记录未更改,您可以简单地从缓存中提取它,而不是从数据库中提取。

        大多数时候读取查询不仅仅是更新/插入。在这种情况下,如果一个 DB 无法处理读取负载,那么您可以创建 DB 的多个只读副本。

        如果负载达到即使使用只读副本也无法正常工作的阶段,那么最后一个选择是对您的数据库进行分片,因此您的业务进展顺利,并且在分片时机成熟时您将有资源来解决它.

        【讨论】:

          猜你喜欢
          • 2013-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-28
          • 2015-07-05
          • 2019-10-20
          • 1970-01-01
          相关资源
          最近更新 更多