01、接入问题
经典问题:浏览器URL 输入网站域名 www.toutiao.com 到网页加载出来,都经历了哪些过程?`
- 域名解析
- HTTP请求
- TCP连接
- SSL握手
- ......
字节接入框架:
02、企业接入升级打怪之路
2.1、使用域名系统
2.1.1、Host管理
最开始,example公司采用Host管理,如下:
面临的问题:
- 流量和负载:用户规模指数级增长,文件大小越来越大,统一分发引起较大的网络流量和负载。
- 名称冲突:无法保证主机名称的唯一性
- 时效性:分发靠人工上传,时效性太差
2.1.2、使用域名系统
域名结构
DNS 记录类型:
| 类型 | 含义 |
|---|---|
| A/AAAA | IP指向记录,前者用于IPv4记录,后者为IPv6 |
| CNAME | 别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址 |
| TXT | 文本记录,购买证书时需要 |
| MX | 邮件交换记录,用于指向邮件交换服务器 |
| NS | 解析服务器记录,用于指定哪台服务器对于该域名解析 |
| SOA | 起始授权机构记录,每个zone有且仅有唯一的一条SOA记录,SOA是描述zone属性以及主要权威服务器的记录 |
如何建设外部网站,提升公司外部影响力?
方案: 租赁一个外网 IP,专用于外部用户访问门户网站,将 www.example.com 解析到外网 ip100.1.2.3,将该 ip 绑定到一台物理机上,并发布公网 route,用于外部用户访问。
比如说要访问www.example.com ,会先向云厂商DNS服务器获取域名对应的IP地址,然后访问IP地址。
进阶,公司构建自己的权威DNS服务器,能够更快。
2.3 HTTPS协议
解决HTTP明文传输
常见加密算法:对称加密、非对称加密
对称加密
客户端会向服务器发送==密钥==,然后对发送的数据进行加密,将加密后的数据发送给服务器,服务器收到之后根据==密钥==进行解析。
存在的问题:发送的==密钥==可能被劫持,然后破解。
非对称加密
加密与解密使用不同的==密钥==,分别成为==公钥、私钥==。服务器将公钥发送给客户端,客户端根据公钥对数据进行加密,然后发送给服务器,服务器根据公钥对应的私钥进行解析,这样就不会泄露密钥了。
SSL通信过程
上面流程中,客户端有一个验证公钥的过程:
- 是否是可信机构颁布的
- 域名是否与实际访问一致
- 检查数字签名是否一致
- 检查证书的有效期
- 检查证书的撤回状态。
防止伪造公钥,窃取数据。
2.4、全站加速
外网用户访问站点的时候,一定是一帆风顺嘛?可能出现的问题有哪些?
- 源站容量低,可承载的并发请求数低,容易被打垮
- 报文经过的网络设备越多,出问题的概率越大,丢包、劫持、mtu问题
- 自主选路网络链路长,时延高
当前网络加速的实现方案和加速产品努力的方向都是:
- 尽可能把服务器放在离用户物理距离近的地方
- 把长距离公网传输改成稳定的内网传输。
关键概念
静态CDN服务
CDN(Content Delivery Network)内容分发网络,将网站内容发布到最接近用户的边缘节点,使网民可就近取得所需的内容,有效解决互联网网络拥塞状况,提高网民访问的响应速度和成功率。 静态CDN服务以图片、页面、JS、CSS、大文件安装包等静态文件加速为主。
主要原理是通过在现有的Internet中增加一层新的网络架构,将网站内容发布到最接近用户的Cache服务器内,通过DNS负载均衡的技术,判断用户来源,就近访问Cache服务器取得所需的内容,解决Internet网络拥塞状况,提高用户访问网站的响应速度,如同提供了多个分布在各地的加速器,以达到快速、可冗余的为多个网站加速的目的。
动态CDN
所谓的动态CDN,是指用户在请求一些动态内容时,如网站中.asp, .jsp, .php, API等,不直接请求源站,而是由基于地理位置的DNS调度,请求最靠近用户的云服务节点,再由云服务节点通过优化过的传输网络,转发请求到源站,达到优化和加速的目的,当然,这其中有很多其他的传输层面的优化,比如说访问链路优化、传输内容压缩合并、智能选路、链路复用等技术。

看下图:
假设用户在西部地区,他要访问某个API接口,会先找到青海的边缘节点,由边缘节点经过路径优化找到汇聚节点,再找到核心机房。
我们可以看到,静态加速和动态加速,都依赖基于地理位置的DNS服务,这类服务,能够根据用户的地理位置,返回最优的接入IP,我们称之为==GeoDNS==
- 源站容量问题:增加后端机器扩容;静态内容,使用静态加速缓存。
- 网络传输问题: 动态加速
DCDN
全站加速: 静态加速 + 动态加速
当前腾讯、阿里和AWS的都支持动静态内容混合加速,即静态内容直接由边缘节点(静态CDN)返回,动态请求走内网代理转发到源站。AWS更是把动静态加速直接合并为一个服务Amazon CloudFront,统一计费。
使用全站加速:
2.5、四层负载均衡
四层是基于7层网络模型的,达到传输层。
什么是4层负载均衡?
基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡的落地到后端服务器中。
三个主要功能:
- 解耦VIP(Virtual IP),虚拟IP和RS(Real Server)真实服务器
- NAT
- 防攻击
访问的时候,通过虚拟IP,通过某种调度算法定位到一个后端服务器。
常见调度算法:
RR轮询
Round Robin,将所有的请求平均分配给每个真实服务器RS
加权RR轮询
给每个后端服务器一个权值比例,将请求按照比例分配。
最小连接
把新的连接请求分配到当前连接数最小的服务器。
五元组Hash
根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模。
缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个 hash 环
一致性hash
只影响故障服务器上的连接Session,其余服务器上的连接不受影响。
常见实现方式:FULLNAT
流程:
Client -> GW:用户请求通过外网核心设备,到达GW。CIP:Client IP。GW->RS:请求到达GW之后,IP地址会发生变化,变成LIP,然后到达真实的服务器上- 一步步返回。
问题:RS怎么知道真实的CIP?
GW->RS阶段通过TCP的option字段传递,后面再反解出来。
四层负载均衡的特点:
- 纯用户态协议栈
- 无缓存,零拷贝,大页内存
- 仅针对四层数据包转发。
2.6、七层负载均衡
四层负载均衡只能看到传输层,如果需要操作应用层协议呢? 比如说在Header中添加一个东西,这属于第七层相关的,因此四层就不够看了。
Nginx是应用最广的七层反向代理。
反向代理示意图:
代理服务器功能:
- KeepAlive
- 访问日志
- URL重写
- 路径别名
- 基于IP的用户的访问控制
- 限速及并发连接数控制。
- ...