我即将开始一个将在全球范围内使用的新XPage项目。我有点担心,因为他们担心性能,因此考虑将此应用程序与负载均衡器或集群中一起使用。我一直在环顾四周,我已经看到可能存在范围变量的问题(例如,用户在一台服务器上启动会话,然后发送到另一台服务器,某些范围的变量会丢失)。我还看到this wonderful article关注性能,但没有真正提到有关集群环境的任何内容。
只是一些额外的信息:并发用户不应该高于600,但可能会随着时间的推移而增长,总共有大约3000个用户。 XPage应用程序将是两个数据源(活动数据库及其存档)的门户。
我的问题是:作为开发人员,在开发可能在负载均衡器后面或集群环境中运行的应用程序时,我必须非常关注什么?
谢谢你的时间!
答案 0 :(得分:2)
这不是一个真正的答案......但我不能在评论中说明这一点。
我们遇到了一个非常类似的问题。
我们有一个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代理就会向客户端。这为他们被定向到的任何服务器提供了“粘性”会话,并且如果他们所在的服务器变得不可用,则rev代理仅将它们移动到不同的服务器。
我们使用“用户”托管会话bean来存储每个用户的配置,因此如果用户移动服务器,如果用户的bean不存在,则会创建它。但它们的关键点在于:由于粘性会话,用户只有在我们关闭服务器或服务器失败时才会移动。由于我们的应用程序是SPA,因此很多用户“config”存储在客户端,因此如果它们被引导到不同的服务器(对于用户,它们仍然指向www.ourapp.com),没有什么真正改变。< / p>
到目前为止,这对我们来说非常有效。
该应用程序也可以通过“离线”外部应用程序访问,它指向rev代理(www.ourapp.com),但我们最初遇到问题,因为此应用程序没有传回Rev代理“粘性” cookie令牌,所以1个设备正在向代理发送一个请求,该请求被路由到服务器A,然后1秒后发送到服务器B,然后是A..B..C,各种令人头痛的问题...因为集群可能是一些如果向同一个doc ...冲突发送请求,则秒不同步。只要我们让外部应用程序为每个会话传回rev代理令牌,问题就解决了。
我不太明白你的问题的一点是:“...... XPage应用程序将是单个数据库(没有副本)和存档数据库(没有副本)的门户。”这是否意味着门户网站将被群集,但数据库用户连接到不会被群集?
我们没有真正的编码方式,如果app在1台服务器上,因为用户的会话“卡在”一台服务器上。我们确实需要跨所有服务器的持久文档锁定。我们最初使用本机文档锁定,但$ writers不集群,所以我们必须实现自己的...我们在doc上设置一个字段,以便“锁定”集群(我们还必须实现单个锁存储.. .sigh,可以谈另一次)。由于需求,我们必须在3个应用程序数据库中维护近100万个文档,我们会生成大量的审计数据,但我们会将其推送到SQL。
所以我会说这更像是一个管理员头痛(我也是这个项目的管理员,所以在我们的情况下我可以证实这一点!)而不是设计师的头痛。
我也有兴趣听听别人对此主题的看法。