【问题标题】:load balancing/ TCP port forwarding using subdomains使用子域进行负载平衡/ TCP 端口转发
【发布时间】:2011-12-06 05:56:31
【问题描述】:

我正在做一个项目

1.这需要多个进程来监听唯一端口上的请求(可能在多个主机上)

2.每个流程都旨在为唯一的客户服务

3.客户端应该使用client_id.domainname.com作为标识符/端点连接到相应的服务器进程。

例如: 请求来到

client_id_1.domainname.com:FIXED_PORT should go to host_1:port_1
client_id_2.domainname.com:FIXED_PORT should go to host_2:port_2    
etc..
[Edited for clarification : the port number with which client will access should be fixed.Only the client_id would change with change in client]

4.[已编辑(错过了这一点)]。映射需要是动态/可修改的。例如,如果一个进程死亡,则必须启动另一个可能不在同一个端口上的进程

我尝试了以下方法(使用java)

1.实现了 tcp 服务器,并尝试使用 tcp 端口转发使用http://code.google.com/p/portforward/ 和我通过搜索找到的其他类似内容。问题是这使用了没有请求 uri 的 InetAddress(使用子域从uri)

2.在嵌入式码头中将服务器进程作为 Servlet 实现。这仅适用于 GET 请求。可以使用

将 GET 请求重定向到特定服务器
httpServletResonse.sendRedirect("http://host_1:port_1")

对于 POST,我们有 RequestDispatcher,它最终会产生一个 GET。似乎 HTTP 规范不允许使用 POST 进行重定向。

我还发现了这个Calling the doPost in another Webapp with a Req Dispatcher forward,它建议自己以编程方式触发 POST 请求。(我还没有研究过这种方法)

我希望有一个解决方案。 我可能过于简单化了,但我认为这与 HEROKU 所做的类似。它们还有在不同端口上运行的后端进程(dynos)(我不确定)。它们与基于应用程序的传入请求相匹配-名称。下面讨论 http://www.quora.com/Scalability/How-does-Heroku-work 但这个问题没有得到解答。

我在这方面被困了很长一段时间。非常感谢您的帮助。

【问题讨论】:

  • Heroku 只允许端口 80 和端口 443 上的入站连接 - 我认为在这种情况下你排除了 Heroku?
  • 是否有可能让一台主机连接知道 client_id 到 host_x:port_x 的映射的“连接分配器”?该主机可以简单地告诉请求客户端适当的重定向。还是您的问题是您无法从请求中获取 client_id?如果是这样:这些客户可以在他们的请求中简单地告诉“我是客户###”吗?
  • xmoex@ 服务器上发生的事情应该对客户端隐藏。客户端应该使用他们已知的端点发出请求。
  • @JohnBeynon Herkou 只允许在 80,443 上进行连接,但服务器进程将在不同的端口上运行。我的问题是它们如何根据 url 转发请求。
  • 是客户端浏览器吗?或者他们是原始的 tcp 客户端?

标签: java tcp heroku load-balancing portforwarding


【解决方案1】:

这在 Heroku 堆栈上是不可能的,因为它只支持标准的 HTTP 和 HTTPS 端口(80 和 443)。当您启动进程时,服务所连接的端口由 Heroku 基础架构决定(请参阅 $PORT and Procfiles)。

在支持更多端口之前,尝试做任何不适合此模型的事情都不会真正奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多