服务开发给用户
域名系统
方式一、Host管理
问题:
- 流量和负载:用户规模指数级增长,文件大小越来越大,统一分发引起较大的网络流量和cpu负载
- 名称冲突:无法保证主机名称的唯一性,同名主机添加导致服务故障
- 时效性:分发靠人工上传,时效性太差
替代方法 - 域名系统
关于域名空间: - 域名空间被组织成树形结构
- 域名空间通过划分zone的方式进行分层授权管理
- 全球公共域名空间仅对应一棵树
- 根域名服务器:查询起点
- 域名组成格式:[a-zA-Z0-9_-],以点划分label
用户访问过程(使用公共域名系统)用户访问过程(自建公共域名系统)
自建DNS服务器
问题背景
- 内网域名的解析也得出公网去获取,效率低下
- 外部用户看到内网 ip 地址,容易被 hacker 攻击
- 云厂商权威DNS容易出故障,影响用户体验
DNS请求过程
- 记录类型
A/AAAA: IP指向记录,用于指向IP,前者为IPv4记录,后者为IPv6记录
CNAME: 别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址
TXT:文本记录,购买证书时需要
MX: 邮件交换记录,用于指向邮件交换服务器
NS:解析服务器记录,用于指定哪台服务器对于该域名解析
SOA 记录: 起始授权机构记录,每个zone有且仅有唯一的一条SOA记录,SOA是描述zone属性以及主要权威服务器的记录
HTTPS协议
接入全站加速
源站容量低,可承载的并发请求数低,容易被打垮
解决方法:静态加速与动态加速(DCDN)
报文经过的网络设备越多,出问题的概率越大,丢包、劫持、mtu问题
自主选路网络链路长,时延高
四层负载均衡
基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上.
负载均衡的作用:
1.解 vip(虚拟ip) 和 rs(真正的服务器)
2.NAT
3.防攻击: syn proxy
常见的调度算法
RR轮询: Round Robin,将所有的请求平均分配给每个真实服务器RS
加权RR轮询: 给每个后端服务器一个权值比例,将请求按照比例分配
最小连接: 把新的连接请求分配到当前连接数最小的服务器
五元组hash: 根据sip、sport、proto、dip、dpot对静态分配的服务器做散列取模
特点
- 大部分都是通过 dpdk 技术实现,技术成熟,大厂都在用
- 纯用户态协议栈,kernel bypass,消除协议栈瓶颈
- 无缓存,零拷贝,大页内存 (减少 cache miss)
- 仅针对4层数据包转发,小包转发可达到限速,可承受高 cps
七层负载均衡
主要是为了解决HTTP流量无法处理的问题 Nginx
- 模块化设计,较好的扩展性和可靠性
- 基于 master/worker 架构设计
- 支持热部署;可在线升级
- 不停机更新配置文件、更换日志文件、更新服务器二进制
- 较低的内存消耗: 1万个 keep-alive 连接模式下的非活动连接仅消耗2.5M内存
- 事件驱动: 异步非阻塞模型、支持 aio,mmap (内存映射)
总结
本次课程主要学习讲服务开发给用户的一些内在的网络请求是如何优化的,主要有域名系统和负载均衡策略,负载均衡策略根据处理的问题分为四层和七层,七层主要介绍了Negix,并对整个过程进行动手实践。