http请求的典型执行流程是什么?可以看出,典型的过程是:(1)客户端请求dns-server并发起域名解析;(2)dns服务器返回域名对应的外地网络IP(1.2.3.4);(3)客户端通过外网ip访问反向代理(1 . 2 . 3 . 4);(4)反向代理将请求分发给网络服务器;通过内部网IP(192.168 . x . x);(5)网络服务器处理请求;
将域名转换为ip的过程,发生在应用系统之外,通过DNS实现。
除了域名解析,DNS在架构设计上还能做什么?
一是用户可以就近访问DNS,用户需要就近访问资源:(1)电信用户想要访问某个服务器资源;(2)浏览器向dns服务器发起域名解析请求;(3)dns服务器识别访问者是电信用户;(4)dns服务器将电信机房nginx外网ip返回给访客;(5)游客就近参观;
根据用户的ip,返回最近的服务器ip称为“智能DNS”,最常用的是CDN和多机房。
二、反向代理的横向扩展在典型的互联网架构中,web层的性能可以通过增加web-server来扩展,但是反向代理nginx仍然是整个系统的唯一入口。如果系统吞吐量超过nginx的性能极限,难以扩展,需要dns-server配合水平扩展。
具体方法是:在dns-server中,同一个域名可以配置多个nginx外部ip,每次dns解析请求都会通过轮询返回不同的ip,这样nginx就可以横向扩展。这种方法叫做“DNS轮询”。
三、web服务器负载均衡由于“dns轮询”可以将同一个域名的流量平均分配给不同的nginx,所以也可以用来均衡web服务器的负载:(1)从架构上去掉nginx层;(2)直接将多个网络服务器的内部网络ip改为外部网络IP;(3)在dns服务器中轮询并分析域名对应的外地网络IP;
通过DNS实现负载均衡有哪些优缺点?
优点:(1)采用第三方DNS实现,服务器架构不需要移动;(2)缺少一层网络请求;
缺点:(1)DNS只有解析功能,不能保证对应外网ip的可用性。nginx作为反向代理时,与web-server有保活检测机制,web-server挂机时,可以自动迁移流量;(2)当web-server需要扩展时,通过DNS扩展需要很长时间才能生效,nginx是服务器完全可控的部分,所以web-server的扩展更加实时方便;