非常感谢您的有用回复!
有可能其中一个应用程序服务器仍在尝试处理客户端变量的更新,而下一个应用程序服务器已经接收到“下一个”请求,然后使用缓存值而不是更新值。这表明我们的应用服务器存在负载问题。150 个客户端变量的序列化和反序列化可能是一个因素。但是,正如您所指出的,在应用程序服务器正常运行时,在某些条件下,数据库的提交时间可能比预期的要晚得多(或响应速度要慢得多)。客户端变量存储在它自己的数据库中,但与我们的主数据库位于同一数据库服务器上。
有趣的是,您提到所有更改的客户端变量在请求结束时都“刷新”到数据库中。但只是为了澄清一下,它们是否同时从内存(和数据库)和所有应用程序服务器上“刷新”出来?从而删除其他服务器上任何过时的缓存值,因此需要服务器从数据库中检索更新的值。或者,一旦数据库提交,ColdFusion 才会更新其余应用程序服务器上的客户端变量,无论内存中是否已经存在缓存值?
出于性能原因,我们在所有 6 个 (CF9) 生产服务器上都禁用了全局变量更新。我们在拥有 3 台 (CF9) 服务器的测试站点上启用了此功能,但间歇性事件仍在发生,甚至发生率更高。
此外 ....
CFApplication 标签中的 setDomainCookies 属性为“否”。自从 10 多年前编写遗留应用程序以来,此设置一直是相同的。但是,Adobe 的文档确实表明集群环境需要“是”。我们正在创建一个简单的测试页面,以进一步分析 Cookie.CFID 和 Cookie.CFTOKEN 值如何在应用程序服务器之间共享,并通过使用测试页面进一步研究缓存问题。