【问题标题】:Java Load balancing Tcp proxy server designJava负载均衡Tcp代理服务器设计
【发布时间】:2014-12-13 17:05:22
【问题描述】:

我想设计和实现一个代理服务器,它接受客户端请求,然后从属性文件中读取主机连接配置,并使用循环算法选择可用主机,然后通过在之间创建新套接字将客户端请求传递给选定的主机代理服务器和主机。我的问题是最佳实践应该是什么,以及如果无法访问可用的主机如何处理什么应该是适当的方式。我应该使用什么最合适的设计模式

【问题讨论】:

  • 什么设计模式?没有决定要做。如果您收到出站连接错误,则必须尝试另一台主机。如果你都试过了,你必须向下游客户端返回一个错误。
  • @EJP 在代理服务器和主机之间,我们是否为来自代理服务器端的每个请求创建套接字
  • 为什么要在代理和主机之间创建一个新的套接字?初始设置后,客户端可以直接连接到主机,以防止代理出现瓶颈。
  • 你检查过haproxy吗?
  • @mike 如果我们没有为每个请求在代理服务器和主机之间创建新的客户端套接字,那么当涉及到并发用户时,向客户端发送正确的响应就会出现问题,不是吗

标签: java design-patterns tcp architecture distributed


【解决方案1】:

这是根据某种模式在主机之间平衡负载的传统问题,您提到您的意图是使用“轮询”,但是您可以使用很多负载平衡模式,Apache camel 确实提供了大部分服务,如果你想实现纯负载均衡,试试骆驼源代码,但你可以使用稳定的骆驼实现。

【讨论】:

    【解决方案2】:

    我认为这篇文章实际上是从概念上解释了可以实现的不同负载平衡算法。 load balancing algorithms

    使用简单的循环,如果在尝试分派客户端的传入请求时任何主机[i] 不可用,只需将其状态标记为不可用。

    1. 一种策略是永远忽略不可用的主机。

    2. 另一种选择是下次仍然检查不可用的主机,以防它再次可用。

    3. 可以使用另一种更好的主动监控方式,即定期在代理服务器和主机之间发送心跳以确定可用性,而不是在请求调度时。

    但使用哪种方式实际上取决于您的性能目标(例如吞吐量、延迟)、每个主机的处理能力等。

    【讨论】:

    • 我正在尝试通过为代理服务器和主机之间的每个连接创建客户端套接字来实现它,因为如果没有为客户端请求发送正确响应的问题,我认为在这种情况下该怎么做您更喜欢保留所有连接套接字或为每个请求创建客户端套接字,这就是我到目前为止实现它的方式,加上当我尝试从代理服务器连接到主机时,如果主机不可访问它会引发异常然后我将其标记为不可用什么是最合适的方式
    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多