我们已经开发了一个自定义 TCP 协议,用于通过套接字与 iPhone 客户端交互,并且我正在寻找布局我们的生产服务器。我们将在单个 debian EC2 实例上运行用 erlang 编写的服务器,并且很可能在单独的实例上运行 mysql(我猜这是推荐的?)。
我正在寻找保护和负载平衡与 TCP 服务器的连接的方法,并且正在研究 EC2 的 ELB、HAProxy、LVM 和 nginx。nginx 似乎只支持 http,而且由于我们使用的是自定义协议,所以我正在寻找一些有关此类系统设计的意见。我还想知道路由器/防火墙阻止蜂窝网络 ISP 会有什么影响。
我当前的设计思路是将所有内容通过端口 80 放到 ELB 上,然后将其路由到 TCP 服务器。我对 ELB 并不完全满意,因此我想知道:
- 还有什么其他非 http 反向代理选项,
- SSL 可以在反向代理上运行吗?还是也需要在 TCP 服务器上运行?
- 除了通过端口 80 之外,还有什么关于蜂窝网络防火墙/路由器解决方法的建议吗?
答案1
嗯,haproxy 和 ELB 都不是只支持 HTTP 的;它们都可以进行任意 TCP 连接代理。但你为什么需要代理呢?只需运行 L3 负载均衡器即可;它更简洁。它可能无法在 AWS 中工作,但我认为这是 AWS 的限制。
答案2
- HAProxy 和 ELB 似乎都能很好地满足您的需求。
- 将 stunnel 添加到您的 HAProxy 解决方案中可以实现这一点,ELB 也应该如此(尽管尚不完全清楚 SSL 卸载是否适用于原始 TCP 连接)。
- 取决于您需要使用的蜂窝网络,但我认为应避免使用端口 80 - 有些网络会尝试代理这些请求。如果有的话,请使用 SSL 流运行 443 - 对于流量干扰相对有限的运营商来说,这应该可以正常工作。