引言
Q:浏览器输入网站域名到网页被加载出来,经历了哪些步骤?
A:域名解析、TCP建连、SSL握手、HTTP请求。
接入架构
企业接入进化史
域名系统
主机表 host 到 IP 的映射
host方式面临的问题:
-
流量和负载:用户规模指数增长,文件大小越来越大,统一分发引起较大的网络流量和CPU负载
-
名称冲突:无法保证主机名称唯一性,同名主机添加导致服务故障
-
时效性:分发靠人工,时效性差
改进:使用域名系统替换hosts文件
关于域名空间:
- 被组织成树形结构
- 通过划分zone方式进行分层授权管理
- 全球公共域名空间仅对应一颗树
- 根据名服务:查询的起点
- 域名组成格式:[z-zA-Z0-9_-],以点划分label
域名购买与配置迁移
步骤:
- 购买域名,购买二级域名
- 域名备案:防止在网上从事非法经营活动
- 修改配置:清空 /etc/hosts ,配置/etc/resolv.conf中nameservers为公共DNS迁移原配置,通过控制台添加解析记录
Q:如何公开外部用户访问?
A:租外网ip,将www.example.com解析到外网ip,ip绑定到一台物理机,发布公网route,用于外部用户访问。
自建DNS服务器
背景:
- 内部域名的出公网效率低下
- 外部用户看到内网ip,容易被入侵
- 云厂商权威DNS容易出现故障,影响用户体验
- 持续扩大公司品牌技术影响力
DNS查询过程
-
主机 - 本地DNS服务器:访问www.163.com,请告诉我他的地址
-
本地DNS服务器 - DNS根服务器:本地里没有www.163.com的记录,联系根DNS得到域名给对应的地址
-
DNS根服务器 - 本地:是.com区域管理,给你.com的服务器地址,.com知道答案
-
本地 - .com服务器:www.163.com对应的地址是?
-
.com服务器 - 本地:负责163.com区域的服务器知道地址,给你他的地址
-
本地 - 163.com服务器:www.163.com对应的地址是?
-
163.com - 本地:该域名对应的地址是1.1.1.1
-
本地 - 主机:www.163.com对应的地址是1.1.1.1
DNS记录类型
- A/AAA:IP指向记录,用于指向IP,前者为IPv4记录,后者为IPv6记录
- CNAME:别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址
- TXT:文本记录,购买证书时需要
- MX:邮件交换记录,用户指向邮件交换服务器
- NS:解析服务器记录,用于指向哪台服务器对于该域名解析
- SOA:其实授权机构记录,每个zone有且仅有唯一的一条SOA记录,是描述zone属性以及主要权威服务器的记录
权威DNS
企业需要权威DNS——LocalDNS
例子:bind
架构
HTTPS协议
背景
出现白页、返回403、弹出广告的原因是使用http,其使用明文传输,解决方法是改用https协议。
对称加密和非对称加密
对称:一份秘钥,秘钥可能被截获
非对称:公钥和私钥
SSL通信过程
证书链
机构是否可信、域名是否与实际访问的一致、检查数字签名是否一致、检查证书有效期、检查证书的撤回状态
验签过程:摘要信息用私钥加密得到签名,客户端用公钥解密数字签名得到摘要,并进行对比
接入全站加速
存在问题:
- 外网用户访问站点存在的问题,会被并发的请求打垮
- 报文经过过多的网络设备,容易丢包、劫持
- 自主选择链路长,时延高
- 流失用户
解决方案:
- 源站容量问题:增加后端机器扩容;静态内容使用静态加速缓存
- 网络传输问题:动态加速CDN
- 全站加速:静态加速 + 动态加速
静态加速CDN
缓存,将静态内容缓存到邻近的CDN静态节点上,不需要访问源站服务器
优势:解决服务器第一公里的问题,消除不同运营商之间的瓶颈,减轻各省的出口带宽压力,优化网上热点内容的分布
动态加速DCDN
针对POST等非静态请求不能再用户边缘缓存的夜晚,基于只能选路技术,从众多会员线路中择优选择一条线路进行传输
原理:
RTT:
全站加速:
四层负载均衡
基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡落到后端服务器
主要功能:
- 解析VIP和rs
- NAT
- 防攻击:syn+proxy
常见的调度算法:
- RR轮询:将所有的请求平均分配给每一个真实服务器RS
- 加权RR轮询:给每个后端服务器一个加权比例,将强求按比例分配
- 最小连接:把最新的连接请求分配到当前连接数最小的服务器
- 五元组hash:根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模
缺点:后端某个服务器故障后,所有连接器都重新计算,影响整个环
解决:一致性hash,只影响故障服务器上的连接session,其余服务器上的连接不受影响
常见的实现方式FULLNAT
使用特点
- 大部分使用dpdk实现
- 纯用户协议栈,消除协议栈瓶颈
- 无缓存、零拷贝、大页内存
- 进针对4层数据包转发,小包转发可达到限速
架构 多了7、8
七层负载均衡
背景
需要7层的服务
- SSL卸载:业务侧是http服务,用户需要用https访问
- 请求重定向:浏览器访问toutiao.com自动跳转www.toutiao.com
- 路由添加匹配策略:完全、前缀、正则
- Header编辑
- 跨域支持
- 协议支持: websocket、 grpc、 quic
NGINX
介绍:
- 模块化设计,较好的扩展性和可靠性
- 基于master/worker架构设计
- 支持热部署;可在线升级
- 不停机更新配置文件、更换日志文件、更新服务器二进制
- 较低的内存消耗
- 事件驱动:异步非阻塞模型
内部架构
事件模型
将每一种动作归纳成独立的事件,给每个事件相应的回调函数,队列不为空则取出事件处理相应的回调函数。