如何使用Shared Nothing体系结构实现Web-Shop

时间:2011-01-25 12:52:44

标签: web-applications architecture shared-nothing

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

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

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

4 个答案:

答案 0 :(得分:2)

虽然我从未明确地建立基于Shared Nothing(SN)的系统,但我建议任何说使用“纯”SN构建WebApps的人都是:

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

如果你有一个Web服务器集群,并且负载均衡流量的方式意味着你不能保证同一个web服务器将处理给定会话的每个调用 - 那么是的,的原则是SN适用:你不能引入服务器亲和力。

但要为“每个”网络应用程序延伸这一点简直荒谬。

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

答案 1 :(得分:1)

至于我在网上商店的经验,无共享架构优于基于会话的架构。因为会议到期而我的购物卡消失了,所以我曾经多次极度烦恼!是否AJAX,webapp至少应该将用户的选择存储在cookie中,或者,如果可用的话,还应该存储HTML5存储和其他精彩机制。

然而,基于HTTP会话的应用程序也有它们的优势,特别是在服务器端缓存用户资源时,这些成本很高 - 这对于重负载的重业务逻辑事务系统来说是典型的。在许多情况下,混合解决方案将是最佳选择。

所以我的答案是 - 这取决于。您应该编写需求并选择最佳选择,而不是确定您正在应用的模式或体系结构的名称:)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

如果负载达到一个阶段,即使使用只读副本也不起作用,那么最后一个选择是对您的数据库进行分片,这样您的业务就会非常好,并且在分片的时候您将有资源来解决它.