当前位置: 首页 > 知识库问答 >
问题:

web应用服务器端的负载平衡是否会生成JSF单例应用范围bean的多个实例?

钮勇
2023-03-14

假设我在AWS或GAE上部署我的web应用程序,并且我在JSF中的应用程序有一个单例应用程序处理的Bean,其方法是“void setList(List)”“List getList()”。当用户修改列表时,我从SessionScoped bean调用此方法。我希望通过向所有用户推送通知消息,确保所有用户都能在自己的会话中获得更改,以便再次获得列表。如果AWS或GAE的负载平衡器在多个实例中拆分应用程序,他们如何管理这个单例应用程序范围bean?有很多单身的例子吗?它们是如何同步的?是否存在一个实例具有不同信息的风险?

我认为参与负载平衡的每个服务器上的应用程序的所有实例都需要以某种方式进行更新,但这会扼杀负载平衡的目的,因为工作将在任何地方复制。单例工作可能不是负载平衡的,但我不知道。文档非常广泛,很难熟悉。

@ManagedBean( name = "theModelBean",
              eager = true )
@Singleton
@ApplicationScoped

public class ModelBean {
  ArrayList<Data> theList;

  public List<Data> getList(){
    return theList;
  }

  public void setList( List<Data> aList ) {
    this.theList = aList;
  }
}


@ManagedBean( name = "theController" )
@SessionScoped

public class Controller {

  @ManagedProperty(value = "#{theModelBean}")
  private ModelBean theModelBean;

  public foo(){
    ArrayList<Data> list = new ArrayList<>;
    list.add( new Data() );
    theModelBean.setList( list );
  }
}

我希望负载平衡不会干扰我的逻辑,它以一种透明的方式为我处理所有事情。否则,我可能必须让ModelBean在每次列表更改时将其写入数据库,并在每次会话请求时从数据库中获取列表。

共有1个答案

云德辉
2023-03-14

我将忽略您问题中的“负载平衡”/“负载平衡”术语,并假设您实际上指的是“集群”/“集群”。如中所示:同一个WAR文件正在部署到多个服务器,这些服务器都位于一个代理之后(谁负责实际的负载平衡,但负载平衡本身并不是观察到的问题的原因)。

是的,集群的每台服务器都将获得自己的任何“应用程序范围”bean实例。这不仅包括JSF@javax。面孔。豆应用程序的作用域是,但CDI也是@javax。企业价格。上下文应用程序范围为和@javax。注射Singleton和EJB@javax。ejb。单例

通常的方法实际上是在集群的所有服务器使用的单个公共数据源中跟踪共享数据。通常使用基于SQL的RDBMS来实现这一点。通常,您会触发SQL查询,以从DB获取每个请求/视图的最新数据。如果您使用JPA,您通常使用二级缓存来缓存数据,这样数据库命中的数量就会减少。这可以在集群范围内配置。

如果数据是不可变的(即创建后只读),那么在数据库中保存的替代方法是依赖会话持久性。有一个@SessionScopedbean,它在readObject()期间从@Application ationScoped中读取一个,并在readObject()期间向@Application ationScoped中写入if-缺席。一个真实世界的例子是在JSF后面的代码中实现的。

 类似资料:
  • 这是我的第一个负载平衡问题。 我已经编写了一个简单的express应用程序来了解负载平衡是如何工作的。我还看了一些类似于的东西。如果我必须使用Nginx进行负载平衡,那么我是否应该在4个不同的docker容器中运行4个不同的express实例,然后使用Nginx在它们之间进行负载平衡,而Nginx位于自己的容器中? 我说得对吗?我有点困惑

  • 我有一个弹性Beanstalk应用程序,最初配置为使用经典的负载平衡器。我发现这在通过WebSocket连接时会导致错误。因此,我将应用程序配置为使用应用程序负载平衡器,因为我被告知ALB支持WebSockets。然而,它们似乎没有:当我试图通过WebSocket连接到我的ALB时,会出现完全相同的错误。 ALB真的支持WebSocket吗?AWS文件在这方面存在矛盾。此页面表示它只支持HTTP和

  • The inside of a computer is as dumb as hell but it goes like mad! — Richard Feynman 曾几何时,为缓慢的 Web 服务器加速的方式就是增加更多的 CPU 核心。 我记得一个老板买了一台 24核的 Sun 工作站,它是个尺寸接近悍马的怪物, 以至于我们不得不扩修数据中心的大门才能将其放入。 时至今日,扩展 Web 站点

  • 在Kubernetes中创建负载平衡器类型的服务时,它是创建一个全新的外部负载平衡器,还是只为负载平衡器类型的第一个服务创建一个负载平衡器,并将该负载平衡器重新用于负载平衡器类型的所有后续服务? 这个问题特别重要,因为为每个服务构建一个单独的负载平衡器对我来说成本太高。 如果它特定于云提供商,我使用Azure,但我很想知道其他云提供商是否不同。

  • 我们将AmazonWeb服务用于使用node的业务应用程序。js服务器和mongodb作为数据库。当前已删除该节点。js服务器正在EC2介质实例上运行。我们将mongodb数据库保存在一个单独的微实例中。现在我们希望在mongodb数据库中部署副本集,这样,如果mongodb被锁定或不可用,我们仍然可以运行数据库并从中获取数据。 因此,我们试图将副本集的每个成员保持在单独的实例中,这样即使主模块的

  • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv