将我的服务开放给用户 | 青训营笔记

93 阅读2分钟

01 接入问题引入

从输入网站域名到网页加载出来,都经历了哪些过程

image.png

02 企业接入升级打怪之路

域名系统

自建DNS服务器

HTTPS协议

接入全站加速

  • 静态加速CDN
  • 动态加速DCDN
    • 针对 POST 等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输。

四层负载均衡

基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上。

常见调度算法

  • RR轮询: Round Robin,将所有的请求平均分配给每个真实服务器RS
  • 加权RR轮询: 给每个后端服务器一个权值比例,将请求按照比例分配
  • 最小连接: 把新的连接请求分配到当前连接数最小的服务器
  • 五元组hash: 根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模
    • 缺点: 当后端某个服务器故障后,所有连接都重新计算,影响整个 hash 环
  • 一致性hash: 只影响故障服务器上的连接session,其余服务器上的连接不受影响
    • 常见实现方式:FULLNAT

特点

  • 大部分都是通过 dpdk 技术实现,技术成熟,大厂都在用
  • 纯用户态协议栈,kernel bypass,消除协议栈瓶颈
  • 无缓存,零拷贝,大页内存 (减少 cache miss)
  • 仅针对4层数据包转发,小包转发可达到限速,可承受高 cps

七层负载均衡

Nginx

特点

  • 模块化设计,较好的扩展性和可靠性
  • 基于 master/worker 架构设计
  • 支持热部署;可在线升级
  • 不停机更新配置文件、更换日志文件、更新服务器二进制
  • 较低的内存消耗:1万个 keep-alive 连接模式下的非活动连接仅消耗2.5M内存
  • 事件驱动: 异步非阻塞模型、支持 aio,mmap(内存映射)

异步非阻塞

  • 传统服务器: 一个进程/线程处理一个连接/请求阻塞模型、依赖OS 实现并发
  • Nginx: 一个进程/线程处理多个连接/请求异步非阻塞模型、减少OS 进程切换

image.png

Nginx简单调优

image.png

03 动手实践

快速将本地服务开放给外网:ngrok

04 总结