【架构】网络分发

这篇文章总结一下整个架构中涉及网络分发的部分,如DNS、CDN和代理服务器。

一,DNS

DNS,全称Domain Name System,即域名系统。作用就是将域名解析为网站服务器所在的ip。域名解析时会添加解析记录,这些记录有:A记录AAAA记录CNAME记录MX记录NS记录TXT记录SRV记录URL转发。,DNS记录比较重要的参数部分列举如下[1]:

A(Address):将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录。

CName(Canonical Name):如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务商提供的一个域名,一般是把用于配置CDN。

NS(name server): 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录。

DNS解析流程,假设要解析www.baidu.com,一般会先查浏览器缓存;如果没有,查看系统hosts文件;如果没有,交给LDNS服务器解析www.baidu.com;如果没有,交给ns服务器解析baidu.com,找到可以解析的LDNS服务器;如果还没有,交给顶级域的解析服务器,找到可以解析的NS服务器;如果还没有,就要找国内根域名服务器的镜像服务器。这样充分利用了缓存。

在DNS这里能做的优化有2点:

1,做好DNS缓存,或者浏览器的DNS预解析。
2,DNS的A记录可以记录多个ip,通过DNS可以做简单的负载均衡(只能轮询)。需要注意的是,采用这种策略时,往往记录的ip不会使用服务器的真实ip,而是nginx的virtual ip,再由nginx进行路由和网络分发。

二,CDN

CDN的设计在工作中一般是用不到的,一般有实力做CDN的只有部分大公司。但是CDN的设计思路,是需要了解的,这有助于我们理解为什么CDN能够加速静态资源的获取。

互联网从逻辑上看是一张大网,但实际上是由许多小网络组成的,这其中就有小网络"互连互通"的问题,典型的就是各个电信运营商的网络,比如国内的电信、联通、移动三大家。这些小网络内部的沟通很顺畅,但网络之间却只有很少的联通点。如果你在 A 网络,而网 站在 C 网络,那么就必须"跨网"传输,和成千上万的其他用户一起去"挤"连接点 的"独木桥"。而带宽终究是有限的,能抢到多少只能看你的运气。

另外,网络中还存在许多的路由器、网关,数据每经过一个节点,都要停顿一下,在二层、 三层解析转发,这也会消耗一定的时间,带来延迟。

最终结果就是,如果仅用现有的 HTTP 传输方式,大多数网站都会访问速度缓慢、用户体 验糟糕。

放到全球来看,物理距离非常大,你在北京,访问旧金山的网站,要跨越半个地球,地理位置距离远、运营商网络、路由转发的影响就会成倍增加[2]。

CDN,全称Content Delivery Network,即内容分发网络。了解CDN,可以看这篇文章[2]。CDN通过就近原则,让用户访问距离用户最近的边缘服务器,优化用户的体验。CDN的核心web服务器会解析用户ip,根据用户ip,就近分发,找到距离用户最近的边缘服务器,如果边缘服务器没有,就向上一级级的找,直到找到或者访问源站。

使用CDN需要注意的是,

1。启动时,需要初始化全量数据。
2。增量更新。注意有效期。

三,多地址直连

多地址直连[3]是说客户端直接访问多个服务器节点组成的水平集群。

一般这种情况会出现在如eureka,nacos上,客户端第一次请求nacos后,会在本地缓存nacos上访问的服务的ip列表,下次就直接访问本地缓存中的服务ip列表。

此外,游戏中常见的游戏选区,也属于多地址直连。

四,代理

代理服务器,分为正向代理和反向代理。给客户端做代理的叫正向代理,如我们常见的加速器,vpn,都属于正向代理;而反向代理是给服务器做代理,如nginx,就属于反向代理服务器。这里我们简单讨论一下反向代理。

OSI七层模型中,

应用层,如http协议、ftp协议都是应用层的协议

表示层

会话层

传输层,如tcp协议

网络层

数据链路层

物理层

nginx可以根据用户ip和端口做4层反向代理[4]。

也可以根据用户协议、方法、请求头、正文参数、cookie等,做7层反向代理。

7层反向代理更智能,效率更低。

常见的代理有nginx、LVS、haproxy的区别可以查看这篇文章[5]。

参考文章:

1\],[DNS解析中的A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发等](https://www.cnblogs.com/bluestorm/p/10345334.html) \[2\],[CDN图解(秒懂 + 史上最全)](https://www.cnblogs.com/crazymakercircle/p/14978513.html) \[3\],[系统设计之多地址直连](https://developer.aliyun.com/article/1194532) \[4\],[Nginx系列之nginx四层反向代理](https://cloud.tencent.com/developer/article/2013908) \[5\],[LVS、Nginx和HAProxy区别](https://www.cnblogs.com/struggle-1216/p/13511703.html)

相关推荐
llilian_165 分钟前
时间同步校时服务器配件清单及挑选攻略 校时时间服务器 网络时间同步装置
运维·服务器·网络
nvd1111 分钟前
通过 Gmail API 发送邮件的完整指南
服务器·网络
duration~21 分钟前
ARP 协议详情
网络·网络协议·tcp/ip·智能路由器
zbtlink31 分钟前
常见的家用路由器耗电量高吗?不同产品耗电量会不会有差别
网络·智能路由器
三十_A31 分钟前
WebRTC 入门:一分钟理解会议系统的三种架构(Mesh/SFU/MCU)
架构·webrtc
粟悟饭&龟波功36 分钟前
【软考系统架构设计师】九、架构演化与维护
前端·后端·架构·系统架构·软件工程
天远云服37 分钟前
Fintech硬核架构:解析天远贷前风险报告接口在Go微服务中的解析策略
微服务·架构·golang
渡我白衣40 分钟前
Reactor与多Reactor设计:epoll实战
linux·网络·人工智能·网络协议·tcp/ip·信息与通信·linux网络编程
灋✘逞_兇42 分钟前
Protobuf的RPC序列化和调用原理
网络·网络协议·rpc
不吃香菜5671 小时前
WebSocket 超细致完整用法讲解(含原理 + 前端 + 后端 + 实战案例 + 避坑)
前端·网络·websocket·网络协议