Xpages 为集群开发xpage

Xpages 为集群开发xpage,xpages,Xpages,我即将开始一个新的XPage项目,它将在全球范围内使用。我有点担心,因为他们担心性能,因此考虑将此应用程序与负载平衡器或集群中的一起使用。我四处查看,发现范围变量可能存在问题(例如,用户在一台服务器上启动会话,然后发送到另一台服务器,某些范围变量丢失)。我还看到了一些关注性能的方法,但没有真正提到集群环境 只是一点额外的信息:并发用户不应该超过600,但可能会随着时间的推移而增长,总共有大约3000个用户。XPage应用程序将是两个数据源(活动数据库及其存档)的门户 我的问题是:作为一名开发人员

我即将开始一个新的XPage项目,它将在全球范围内使用。我有点担心,因为他们担心性能,因此考虑将此应用程序与负载平衡器或集群中的一起使用。我四处查看,发现范围变量可能存在问题(例如,用户在一台服务器上启动会话,然后发送到另一台服务器,某些范围变量丢失)。我还看到了一些关注性能的方法,但没有真正提到集群环境

只是一点额外的信息:并发用户不应该超过600,但可能会随着时间的推移而增长,总共有大约3000个用户。XPage应用程序将是两个数据源(活动数据库及其存档)的门户

我的问题是:作为一名开发人员,在开发一个可能在负载平衡器后面或集群环境中运行的应用程序时,我必须非常关注什么


谢谢你的时间

这并不是一个真正的答案……但我不能把它放在评论中

我们面临着一个非常类似的问题

我们有一个xpage SPA(单页应用程序)应用程序,已投入生产2-3年,可变用户负载高达300-400个并发用户,他们登录8小时会话,我们有4个群集Domino服务器,1个是运行所有计划作业的“主力”,3个专用HTTP服务器

我们在Domino中使用SSO,3个HTTP服务器参与其中,因此用户只需进行一次身份验证,就可以访问所有HTTP服务器。我们使用反向代理,因此所有用户都会访问www.ourapp.com,但会被重定向到servera.ourapp.com、serverb.ourapp.com等。一旦他们被定向到服务器,rev代理会向客户端发出cookie。这将为它们定向到的任何服务器提供一个“粘性”会话,并且只有当它们所在的服务器不可用时,rev proxy才会将它们移动到另一个服务器

我们使用“用户”管理的会话bean来存储每个用户的配置,所以如果用户移动服务器,如果用户的bean不存在,就会创建它。但他们的关键点是:由于粘性会话,只有当我们关闭服务器或服务器出现故障时,用户才会移动。由于我们的应用程序是SPA,很多用户的“配置”都存储在客户端,因此如果他们被引导到不同的服务器(对于用户来说,他们仍然指向www.ourapp.com),实际上什么都不会改变

到目前为止,这对我们非常有效

该应用程序也可通过“离线”外部应用程序访问,它指向rev proxy(www.ourapp.com),但我们最初确实遇到了问题,因为该应用程序没有传回rev proxy“粘性”cookie令牌,因此1台设备向代理发送请求,该请求被路由到服务器a,然后在1秒钟后发送到服务器B,然后是a..B..C,各种各样的麻烦…因为集群可能会在几秒钟内不同步,如果向同一个文档发送请求…冲突。一旦我们获得了外部应用程序,以便为每个会话传回rev代理令牌,问题就解决了

您的问题中有一点我不太理解:“……XPage应用程序将是单个数据库(无副本)和归档数据库(无副本)的门户。”这是否意味着门户将群集化,但连接到的DB用户将不会群集化

如果应用程序在一台服务器上,我们的编码并没有什么不同,因为用户的会话“卡在”一台服务器上。我们确实需要跨所有服务器进行持久文档锁定。我们最初使用本机文档锁定,但是$writers没有集群,所以我们必须实现我们自己的…我们在doc上设置了一个字段,以便“lock”集群化(我们还必须实现s的单锁存储…唉,下次再谈这个)。由于需求,我们必须在3个应用程序数据库中维护近100万个文档,我们生成了大量的审计数据,但我们将其推送到SQL

所以我想说,这更像是一个管理头痛(我也是这个项目的管理员,所以在我们的例子中,我可以证实这一点!),而不是设计师头痛


我也很想听听其他人对这个问题的看法。

我考虑过无状态配置,但没有机会测试它。我实际上已经看过这个,但我发现它有点欠缺。这至少是很有帮助的,让我走上了我需要谨慎行事的轨道,但我不认为这是一个半完整的gotcha's列表。谢谢你!我知道,这就是为什么它没有标记为已回答。。。我希望能在这里看到一些有用的信息。你说的“$writers不群集”是指主锁服务器关闭时出现的问题吗?不是。我们在视图网格中向用户显示了一个图标,如果文档被其他用户锁定,则会显示一个小挂锁,这需要在所有群集服务器上显示。使用本机DominoDoc锁定,在集群服务器a上锁定文档(假设它是主锁定服务器),设置字段,显示挂锁图标。现在转到群集服务器B,查看文档属性,将没有$writers字段。它只在锁服务器上设置。所以现在在服务器B上,我无法在“视图”中轻松显示文档已锁定。。。。如果锁定服务器宕机,则锁定\解锁时会出现不可接受的延迟。不要检查应该使用
.getLockHolders()
或等效公式的项目。我相信这些会奏效。如果您允许provosional lock,它应该在主锁服务器关闭时也会锁定。对于单个文档来说,这很好,但我说的是显示一个“视图”。我们通过JSON呈现所有内容,当获取数据以显示在网格中时,我们可以检索大量文档,我们需要尽快实现这一点,通常我们不会“触摸”NotesDocument,我们从NotesAvigator读取,因此我们直接从视图读取……因此您需要文档上的某些属性