这不是一个真正的答案......但我不能把它放在评论中。
我们面临一个非常相似的问题。
我们有一个已投入生产 2-3 年的 xpage SPA(单页应用程序)应用程序,可变用户负载高达 300-400 个登录 8 小时会话的并发用户,我们有 4 个集群 Domino 服务器,1 个是运行所有预定作业的“主力”和 3 个专用 HTTP 服务器。
我们在 Domino 中使用 SSO,并且有 3 个 HTTP 服务器参与,因此用户只需验证一次即可访问所有 HTTP 服务器。我们使用反向代理,所以所有用户都会访问 www.ourapp.com,但会被重定向到 servera.ourapp.com、serverb.ourapp.com 等,一旦他们被定向到服务器,rev 代理就会向客户端。这为他们被定向到的任何服务器提供了一个“粘性”会话,并且 rev 代理只会在他们所在的服务器不可用时将他们移动到不同的服务器。
我们使用“用户”托管会话 bean 来存储每个用户的配置,因此如果用户移动服务器,如果用户的 bean 不存在,它将被创建。但他们的关键点是:由于会话粘性,只有当我们关闭服务器或服务器发生故障时,用户才会移动。由于我们的应用程序是一个 SPA,很多用户“配置”存储在客户端,所以如果他们被引导到不同的服务器(对用户来说,他们仍然指向 www.ourapp.com),没有什么真正改变。
到目前为止,这对我们来说非常有效。
该应用程序也可以通过“离线”外部应用程序访问,它指向 rev 代理 (www.ourapp.com),但我们最初确实遇到了问题,因为该应用程序没有传回 Rev 代理“粘性”cookie 令牌,所以 1 台设备正在向代理发送请求,该请求被路由到服务器 A,然后 1 秒后到服务器 B,然后是 A..B..C,各种令人头疼的......因为集群可能需要几秒钟的时间同步,如果向同一个文档发送请求...冲突。一旦我们让外部应用程序为每个会话传回 rev 代理令牌,问题就解决了。
我不太明白的一点是:“...XPage 应用程序将成为单个数据库(无副本)和存档数据库(无副本)的门户。”这是否意味着该门户将是集群,但连接的数据库用户不会被集群?
与应用程序位于一台服务器上的情况相比,我们的编码并没有任何不同,因为用户的会话“卡”在一台服务器上。我们确实需要跨所有服务器的持久文档锁定。我们最初使用本地文档锁定,但是 $writers 没有集群,所以我们必须实现我们自己的......我们在 doc 上设置一个字段,以便“锁定”集群(我们还必须实现单锁存储...... .sigh,可以再谈)。由于需求,我们必须在 3 个应用程序数据库中维护近 100 万个文档,我们生成大量审计数据,但我们将其推送到 SQL。
所以我会说这更像是一个管理员的头痛(我也是这个项目的管理员,所以在我们的例子中我可以确认这一点!)而不是设计师的头痛。
我也很想听听其他人对此主题的看法。