网络与部署 | 青训营笔记

157 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

网络与部署

接入

使用域名系统

Host 管理
  • 流量和负载:用户规模指数级增长,文件大小越来越大,统一分发引起较大的网络流量和 CPU 负载
  • 名称冲突:无法保证主机名称的唯一性,同名主机添加导致服务故障
  • 时效性:分发靠人工上传,时效性太差
使用域名系统
  • 使用域名系统替换 hosts 文件
  • 关于域名空间

    • 域名空间被组织为树形结构
    • 域名空间通过划分 zone 的方式进行分层授权管理
    • 全球公共域名空间仅对应一棵树
    • 根据名服务器:查询起点
    • 域名组成格式:[a-zA-Z0-9_-],以点划分 label
域名购买与配置迁移
  • 修改配置:清空 /etc/hosts
  • 配置 /etc/resolv.conf 中nameservers为公共 DNS 迁移原配置,通过控制台添加解析记录
开放外部用户访问
  • 租赁一个外网 ip,专用于外部用户访问门户网站,将该 ip 绑定到一台物理机上,并发布公网 route,用于外部用户访问

自建 DNS 服务器

问题背景
  • 内网域名的解析也得到公网去获取,效率低下
  • 外部用户看到内网 ip 地址,容易被 hacker 攻击
  • 云厂商权威 DNS 容易出故障,影响用户体验
  • 持续扩大公司品牌技术影响力,使用自己的 DNS 系统
DNS 记录类型
  • A / AAAA:IP 指向记录,用于指向 IP,前者为 IPv4记录,后者为 IPv6 记录
  • CNAME:别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取 IP 地址
  • TXT:文本记录,购买证书时需要
  • MX:邮件交互记录,用于指定哪台服务器对于该域名解析
  • SOA 记录:起始授权机构记录,每个 zone 有且仅有唯一的一条 SOA 记录,SOA 是描述 zone 属性以及主要权威服务器的记录

接入 HTTPS 协议

对称加密和非对称加密
  • 对称加密:一份密钥
  • 非对称加密:公钥和私钥
SSL 的通信过程
  • client random

  • server random

  • premaster secret

  • 加密算法协商

    • 堆成密钥 session key
证书链
  • Server 端发送是带签名的证书链

  • Client 收到会仍然需要验签

    • 是否是可信机构颁布
    • 域名是否与实际访问一致
    • 检查数字签名是否一致
    • 检查证书的有效期
    • 检查证书的撤回状态

接入全站加速

问题背景
  • 源站容量低,可承载的并发请求数低,容易被打垮
  • 报文经过的网络设备越多,出问题的概率越大,丢包,劫持,mtu 问题
  • 自主选路网络链路长,时延高
解决方案
  • 源站容量问题

    • 增加后端机器扩容
    • 静态内容,使用静态加速缓存
  • 网络传输问题

    • 动态加速 DCDN
  • 全站加速

    • 静态加速 + 动态加速
静态加速 CDN
  • 解决服务器端的第一公理问题
  • 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
  • 减轻了各省的出口带宽压力
  • 优化了网上热点内容的分布
动态加速 DCDN
  • 针对 POST 等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输

4 层负载均衡

  • 基于 IP + 端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡落地到后端服务器上
常见的调度算法原理
  • RR 轮询: Round Robin,将所有的请求平均分配给每个真实服务器 RS
  • 加权 RR 轮询:给每个后端服务器一个权值比值,将请求按照比例分配
  • 最小连接:把新的连接请求分配到当前连接数最小的服务器
  • 五元组 hash:根据 sip、sport、proto、dip、dport 对静态分配的服务器做散列取模
  • 一致性 hash:只影响故障服务器上的连接 session,其余服务器上的连接不受影响
4 层负载均衡特点
  • 大部分都是通过 dpdk 技术实现,技术成熟
  • 纯用户态协议栈、kernel bypass,消除协议栈瓶颈
  • 五缓存,零拷贝,大页内存(减少 cache miss)
  • 仅针对 4 层数据包转发,小包转发可达到限速,可承受高 cps

7层负载均衡

Nginx
  • 最灵活的高性能 WEB SERVER,应用最广的 7 层反向代理

  • 模块化设计,较好的扩展性和可靠性

  • 基于 master / worker 架构设计

  • 支持热部署:可在线升级

  • 不停机更新配置文件、更换日志文件、更新服务器二进制

  • 较低的内存消耗:1 万个 keep-alive 连接模式下的非活动连接仅消耗 2.5M 内存

  • 事务驱动;异步非阻塞模型、支持 aio、mmap(内存映射)

  • 代理服务器功能

    • Keepalive
    • 访问日志
    • url rewrite 重写
    • 路径别名
    • 基于 ip 的用户访问控制
    • 限速及并发连接数控制
异步非阻塞
  • 传统服务器

    • 一个进程/线程处理一个连接/请求阻塞模型、依赖OS实现并发
  • Nginx

    • 一个进程/线程处理多个连接/请求异步非阻塞模型、减少OS进程切换
提升 CPU 使用效率
  • 合适的 worker 进程数

    • worker 进程数 = CPU 核数
  • CPU 亲和

    • 每个worker 程绑定一个 CPU 核,提升缓存命中率
  • 减少 CPU 开销

    • multi_accpet 允许worker 同时接受新连接
    • accept_mutex 解决惊群问题
    • reuseport 监听同端口,内核负载均衡
提升网络效率
  • 连接复用

    • 减少 upstream 建联
  • 使用 Cache

    • 超市时间对业务的影响
  • gzip 压缩

    • 会增加 CPU 开销,需要平衡使用
  • 开启 proxy_buffering

    • 谨慎设置 proxy_buffer 的大小、磁盘 io 读写