# 0x00 前言

# 0x02 前端

# CDN

代理服务器分布式网络,它从靠近用户的位置提供内容

# 更新方式

推送 PUSH

当服务器内容发生变动,推送 CDN 接受新的内容。

  • 更新最快
  • 流量最小化
  • 存储最大化

拉取 PULL

当用户请求该资源的时候,从服务器拉取资源。

  • 更新有延迟
  • 存储最小化

# 缺点

  1. CDN 成本可能会很高
  2. TTL 过期之前更新内容,CDN 缓存内容可能会过时

# 0x02 后端组件

# 负载均衡器

负载均衡起到了一个均衡负载的作用

  1. 防止请求进入运行情况糟糕的服务器。
  2. 防止资源过载。
  3. 帮助消除单一故障点。

额外的功能:

  1. SSL 终结:解密传入的请求,并加密服务器响应。

工作-备用 / 双工作

# 选 Worker

  • Random
  • Round Robin
  • Least Busy
  • Sticky session / Cookie
  • By request paramters

# 路由流量

  • 随机
  • 最少负载
  • Session/Cookie
  • 轮询调度或加权轮询调度
  • 四层负载均衡
  • 七层负载均衡

# 反向代理

  • 安全性:隐藏后端服务器信息
  • 可扩展性和灵活性:客户端只能看到服务器,服务端
  • 本地终结 SSL 会话:
  • 压缩:
  • 缓存:
  • 静态内容:

# 0x08 Http Server Model

# Master

主进程监听不同的进程信号,并且作出反馈。

  • TTIN TTOU 告诉 master 升高或者降低运行的 worker
  • CHLD 子进程已结束

# 四种 Worker

# 同步 Workers

单请求单 worker, 并且不支持 persistent connections

在 CPU 和网络贷款上资源有限。(啥意思,,)

即请求时间不定的情况应该是要避免的。

# 异步 Workers

异步场景

  • Applications making long blocking calls (Ie, external web services)
  • Serving requests directly to the internet
  • Streaming requests and responses
  • Long polling
  • Web sockets
  • Comet (其实就是推送)

通过 eventlet / gevent 使用 Greenlets

# Tornado Workers

tornado

# AsyncIO Workers

  • gthread
  • gaiohttp

# Pre-fork Web Server

https://stackoverflow.com/questions/25834333/what-exactly-is-a-pre-fork-web-server-model

pre-forking 意味着 一个 master 创建了多个 fork 来处理请求。每一个分叉意味着一个独立的 *nix 进程(不一定吧,异步 worker 怎么算?)。

The pre in pre-fork means that these processes are forked before a request comes in. They can however usually be increased or decreased as the load goes up and down.

libev / libuv

epoll or kqueue, it is always indispensable to the asynchronous topic.

asyncio

sanic
libuv
uvloop

# 0xEE 结论