有些人认为,使用 Shared Nothing 架构实现每个 webapp 是可能的,甚至是必要的。如何使用这种架构风格实现带有购物车的网上商店?
通常可以使用会话来实现网上商店。在这种情况下,我必须以另一种方式实现它,以便没有关于购物车的信息存储在服务器上。但是随后有必要将购物车内容包含到隐藏字段中,以便它们随着每个请求传递到服务器。这是使用 Shared Nothing 架构的网上商店的解决方案吗?
您对如何实现 webapps 的无共享架构有任何想法吗?
有些人认为,使用 Shared Nothing 架构实现每个 webapp 是可能的,甚至是必要的。如何使用这种架构风格实现带有购物车的网上商店?
通常可以使用会话来实现网上商店。在这种情况下,我必须以另一种方式实现它,以便没有关于购物车的信息存储在服务器上。但是随后有必要将购物车内容包含到隐藏字段中,以便它们随着每个请求传递到服务器。这是使用 Shared Nothing 架构的网上商店的解决方案吗?
您对如何实现 webapps 的无共享架构有任何想法吗?
尽管我从未明确地构建一个基于无共享 (SN) 的系统,但我建议任何说有必要使用“纯”SN 来构建 WebApps 的人是:
如果您有一个 Web 服务器集群,并且正在以某种方式对流量进行负载平衡,这意味着您不能保证同一个 Web 服务器将处理给定会话的每个调用 - 那么是的,SN 的原则适用:你不能引入服务器亲和性。
但是为“每个”网络应用程序扩展这一点简直是荒谬的。
SN 和所有其他架构一样,就像工具——它们是问题的解决方案;问题定义了解决方案——而不是相反。
至于我在网上商店的经验,无共享架构比基于会话的架构更好。由于会话过期,我的购物卡消失了很多次,我非常恼火!AJAX 与否,webapp 至少应该将用户的选择存储在 cookie 中,或者,如果可用,HTML5 存储和其他奇妙的机制。
然而,基于 HTTP Session 的应用程序也有其优点,尤其是在服务器端为用户缓存资源时,这种获取成本很高——典型的重负载业务逻辑事务系统。在许多情况下,混合解决方案将是最佳选择。
所以我的回答是——这取决于。您应该编写需求并选择最好的,而不是关心您正在应用的模式或架构的名称是什么:)
您可以使用分布式缓存(例如 memcached)在服务器端存储会话数据。
领先的云提供商提供的服务可能会让您了解如何在树层应用程序中实现 SN。使用具有不同策略的负载平衡器可帮助您将共享资源移动到它们自己的服务器上,从而使您的应用程序服务器可用于网络。但是RDBMS一直是SN的瓶颈。
为了从数据库中卸载会话处理负载,内存缓存可以提供帮助,因为数据在 RAM 中,并且由 Redis(例如)会话数据访问管理的弹性变得更快。应用程序和数据库服务器的文件存储由 NAS 解决,服务器可以安装到 NAS,它有助于减轻 HDD、SSD 故障并提供更快/弹性的 IO。搜索活动也是 RDBMS 的负担。ElasticSearch 可以从您的数据库中卸载搜索负载。可以进行的另一项改进是在数据库前面使用内存缓存进行查询。如果自上次提取后记录没有更改,您可以简单地从缓存中提取它,而不是从数据库中提取。
大多数时候读取查询不仅仅是更新/插入。在这种情况下,如果一个数据库无法处理读取负载,那么您可以创建数据库的多个只读副本。
如果负载达到即使使用只读副本也无法工作的阶段,那么最后一个选择是对您的数据库进行分片,因此您的业务进展顺利,并且在分片时您将有资源来解决它。