【问题标题】:Tomcat PersistanceManagerTomcat 持久性管理器
【发布时间】:2016-08-14 21:55:42
【问题描述】:

我有 2 个 Tomcat 在使用 sticky_sessions=false 进行负载平衡。 所以我需要跨Tomcats的“会话持久性”。 Tomcat 文档说有 3 种方法:

  1. Tomcat 集群
  2. 持久性管理器 + 共享目录
  3. 持久化管理器 + SQL 存储

集群不适合我,因为在它编写的文档中,配置它的 sticky_sessions 应该是 true。

我尝试了 Persistance Manager,但它似乎也不起作用,因为它仅在超时后才会保留会话,因此使用 sticky_session=false 它不起作用。

Persistance Manager 可以立即持久化会话吗?

我阅读了有关 memcached-session-manager 的信息,但它看起来像是 3d 派对解决方案,所以我不敢使用它。它是唯一的解决方案吗?

【问题讨论】:

  • 使用粘性会话有什么问题?
  • 因为如果我们已经实现了一切来支持真正的负载平衡,为什么我们应该使用sticky_sessions 并且总是针对同一个会话访问 1 个服务器?
  • 此外,使用 sticky_session=true 我们不需要任何集群或 session_replications,因为它只会在 Tomcat 停止或 Tomcat 失败时提供一些优势。

标签: tomcat load-balancing sticky-session


【解决方案1】:

您不需要会话持久性;你也可以通过集群来做到这一点。粘性会话通常是一个好主意,因为它们修复了许多潜在的竞争条件(或者,性能问题)。

您可以启用没有粘性会话的集群。但是您可能希望将坚持会话与集群一起使用,除非有一些令人信服的理由来禁用它。 (请记住,启用粘性会话时仍会发生故障转移。)

PersistentManager 的问题是你不能保证会话会在商店中及时更新。查看PersistentManager 的maxIdleBackup 配置属性。它可能会为您提供一些关于如何调整持久性的线索。

PersistentManager 真正存在是为了解决一个不同的问题:处理大量内存有限的长期会话。考虑使用 Amazon.com 之类的东西,他们会记住您在“购物车”中的商品数周和数周。您可以通过将存储在会话中的“购物车”持久化到数据库或文件来以一种懒惰的方式做到这一点。

如果您真的想在多台服务器之间共享会话,集群是您的最佳选择。 Tomcat 网站上有一些 great presentations 可用,涵盖集群。

【讨论】:

  • 问题 1) Tomcat 文档说“确保您的负载均衡器配置为粘性会话模式。”,并没有说明如何使用同步集群配置“sticky_session=false”。所以看起来它不受官方支持。 2) 使用sticky_session=true,我们不需要所有这些复杂性,如果在我们的用例中其中一台服务器发生故障,可以松开会话。
  • 如果在其中一台服务器出现故障时丢失会话是可以的,那么您根本不需要集群。我不清楚您的用户是否可以失去他们的会话。正如我所说,粘性会话减少了在整个集群中更新会话信息之前用户向任意服务器发出请求的竞争条件的可能性。
  • 对于我的应用程序的用户来说,每个请求都不能松散会话,但它可以容忍一些失败(硬件失败,tomcat 失败)。竞争条件只发生在异步会话复制上,因为我需要同步会话复制(或集群)。问题Tomcat文档没有说明如何同步配置。
  • 如果在极端情况下会话丢失是可以接受的(即失败),那么忘记集群并只启用固定会话。这样,您的应用程序运行得更快,出错的机会也会更少。
猜你喜欢
  • 2011-07-17
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多