【问题标题】:Client side interceptor and external load balancing architecture客户端拦截器和外部负载均衡架构
【发布时间】:2015-08-28 16:13:30
【问题描述】:

我正在我们公司实施一个新应用程序,我正在寻找进行集群的方法。根据 jboss 文档here,有两种可用的架构。

  1. 客户端拦截器
  2. 外部负载平衡

问题 1:在客户端拦截器架构中。客户端拥有代理对象,它知道将消息路由到哪个服务器。这里的客户是谁?我知道 java 脚本/HTML 不能保存代理对象。是不是节点前面的spring/servlet层?

问题2:外部负载均衡器是否知道节点可以包含的代码和服务,或者它只是使用算法将请求委托给?

【问题讨论】:

    标签: java jakarta-ee jboss architecture


    【解决方案1】:

    对于 1 -客户端,是远程 EJB 动态代理和/或应用程序客户端容器(桌面应用程序)

    对于 2 - 外部负载均衡器对代码一无所知。 (我看到这个解决方案的使用远远超过问题 1 的场景)

    配置集群的方法有很多种,具体取决于您的负载平衡和容错目标。例如,您可以在未集群的应用程序服务器之间进行负载平衡。由于没有会话复制,容错性更小,性能更快。

    这里是关于数字 1 的更多细节。

    假设在问题 1 中我有一个分布式应用程序。假设在应用服务器上运行的 Web 应用和 EJB,我希望调用另一个应用服务器的一些 EJB。

    当您调用远程 EJB 时,应用程序服务器会生成一个类,该类会传输到调用服务器。这是动态代理,它包含所有网络通信的东西。

    在整个应用服务器市场中,我们通常会看到两种配置形式,(1) 动态代理类,它知道集群并将调用其他节点,(2) 带有节点列表的 CORBA URL,即 corbaloc: :nodeA.host.com,nodeB.host.com/...

    这里有更多关于数字 2 的细节。

    第二种情况通常是我们向“外部”世界的调用者提供基于 HTTP 的服务、WebUI、REST、SOAP 等。

    带有 mod_jk 插件的 Apache HTTPD 是 JBoss 文档here 中的一个示例

    请求可以发送到不同的服务器以解决负载或故障。 HTTP 会话对象在节点之间复制。 (JBoss 中的 JGroups 库处理这个,IP 组播也是一种常用技术)

    因此负载平衡器/反向代理不需要知道它只知道将请求转发到的 URL 的代码,集群中的应用程序服务器协作获取会话信息。

    【讨论】:

    • 所以,要正确理解上面的第 1 点。您是说当一个应用程序需要调用另一个应用程序并且不涉及(REST 或其他 html 请求)时使用“客户端拦截器”?
    • 并在需要 html/外部世界调用服务器时使用外部负载均衡器?
    • 如果在没有会话复制的情况下使用负载均衡,会不会是一个粘性会话,这意味着来自客户端的请求总是会到达它首先到达的负载均衡服务器?
    • 是的,stick 会话将 HTTP 会话“卡”在一个节点上。通常当我设计这些时,即使我有会话复制,我也会使用粘性会话。这是一个“安全”的设置。如果我有无状态的 Web 资源(没有 HTTP 会话),那么关闭粘性会话可以在峰值负载下稍微提高性能。
    • 注意:“外部”是指内部网络用户。
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多