aws负载均衡的属性
在aws上有一种负载均衡叫nlb,其实就是一种4层的负载均衡。可以做tcp和udp的负载均衡。
然后每个nlb在aws这边会分配一个domain给你,本来我以为这个跟国内云厂商一样是不变的,后来这个发现这个解析出来的ip是经常会变化的。无论ipv4还是ipv6的。
比如我这里后面是2个az, 那nlb的域名解析出来就是2个ip
我们看这个图里,每个nlb都是对应一个可用区的后端,当你所在这个可用区的后端的服务都挂了,那aws也会把对应的dns解析出来的ip给删除掉。这种如果是内网使用aws的域名解析的话可能问题不大,但是如果是依赖公共的dns server来进行,那可能就会经常错误。
但是aws其实也提供跨可用区的负载均衡。
这种可以避免对外ip地址的经常变化, 但是有2点我觉得是无法使用这种模式的理由:
- aws 跨az的流量是收费的。而国内云厂商,oracle云这些都是免费的。虽然看着好像不贵,但是当你内网调用非常多的时候,这个费用是很可观的。
- aws 跨az的延迟是不能保证的。我们经常碰到跨az的请求突然断开,这种可能很快重新连接上。还有一种是跨az的突然延迟飙高,我们有碰到过一次30s的延迟,是30秒不是30毫秒。这种就特别恶心,如果这个服务刚好没有做好熔断,那就玩球了,我们当时碰到的就是一个服务的数据连接这里的问题。
因此为了解决aws dns解析的问题,最好的做法就是在外面再套一个aws ga来玩,ga的ip一直是固定的,这样就保证了dns解析经常变化的问题。