nginx tcp 负载均衡 长连接_TCP负载均衡 高可用 高扩展架构

互联网架构中,web-server接入一般是用nginx来做反向代理,实施负载均衡,架构一般也就是三层:

  1. 调用层,一般是浏览器或者app

  2. 中间是反向代理,nginx

  3. 下游是真实的接入集群,web-server,一般我们用的是tomcat,apache

整个的访问过程是:(盗图了)

24d2dd944d98ae56b115b435ecffec1b.png

1.浏览器发起请求

2.DNS将地址解析为IP地址

3.通过外网IP访问nginx

4.nginx发起负载均衡策略,常见的轮询,随机,IP-hash等

5.nginx将请求发给内网IP的web-server

由于Http是短连接,以及web-server是无状态的,理论上任何一个http请求落在任意一台web-server上都可以得到正确的处理.

问题是,TCP是长连接,client和server一旦建立连接,一个client发起的请求必须落在同一台tcp-server上,那如何做负载均衡呢,如何保证水平扩展呢?

方案1:单机法tcp-server(盗图了)

34fe1d40bca12008921c4f009bd3ba17.png

单个tcp-server显然是可以保证请求的一致性的.

这个方案有什么缺点呢?

无法保证高可用

方案2:集群法tcp-server

可以通过搭建tcp-server集群来保证高可用,客户端来实现负载均衡: (1)client内配置有tcp1/tcp2/tcp3.daojia.com三个tcp-server的外网IP; (2)客户端通过“随机”的方式选择tcp-server,假设选择到的是tcp1.daojia.com; (3)通过DNS解析tcp1.daojia.com; (4)通过外网IP连接真实的tcp-server

方案3:服务端实施负载均衡

只有将复杂的策略下沉到服务端,才能根本上解决扩展性的问题。(还是盗图了) 1a03eef8e5c64501395629d8e0e94336.png 增加一个http接口,将客户端的“IP配置”与“均衡策略”放到服务端是一个不错的方案: 1.client每次访问tcp-server前,先调用一个新增的get-tcp-ip接口,对于client而言,这个http接口只返回一个tcp-server的IP; 2.这个http接口,实现的是原client的IP均衡策略; 3.拿到tcp-server的IP后,和原来一样向tcp-server发起TCP长连接;   新的问题又产生了,如果所有IP放在客户端,当有一个IP挂掉的时候,client可以再换一个IP连接,保证可用性,而get-tcp-ip接口只是维护静态的tcp-server集群IP,对于这些IP对应的tcp-server是否可用,是完全不知情的,怎么办呢?

方案四:tcp-server状态上报(继续盗图)

7ce83b27051d3a100428e28fb623d891.png get-tcp-ip接口怎么知道tcp-server集群中各台服务器是否可用呢,tcp-server主动上报是一个潜在方案,如果某一个tcp-server挂了,则会终止上报,对于停止上报状态的tcp-server,get-tcp-ip接口,将不返回给client相应的tcp-server的外网IP。 方案5:tcp-server状态拉取(略) 总结 web-server如何实施负载均衡? 利用nginx反向代理来轮询、随机、ip-hash。   tcp-server怎么快速保证请求一致性? 单机。但是无法保证高可用   如何保证高可用? 客户配置多个tcp-server的域名。   如何防止DNS劫持,以及加速? IP直通车,客户端配置多个tcp-server的IP。   如何保证扩展性? 服务端提供get-tcp-ip接口,向client屏屏蔽负载均衡策略,并实施便捷扩容。   如何保证高可用? tcp-server“推”状态给get-tcp-ip接口, or get-tcp-ip接口“拉”tcp-server状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值