超文本传输协议(HTTP)多年来演进以满足现代应用需求,从简单文本交付到高性能、实时体验。
HTTP 演进
HTTP/0.9
- 构建用于获取简单 HTML 文档
- 单个 GET 请求
- 无头部
HTTP/1.0
- 添加头部和状态码
- 支持更丰富交互
- 每个请求仍然需要新连接
HTTP/1.1
- 引入持久连接
- 更多方法
- 使 Web 更快和更高效用于日常浏览
HTTP/2
- 解决性能瓶颈与多路复用
- 启用多个请求共享一个连接
- 头部压缩
HTTP/3 (QUIC)
- 转移到 UDP 与 QUIC
- 减少延迟
- 提高可靠性,特别是对于移动和实时应用
系统性能指标
四个核心指标
Queries Per Second (QPS)
- 系统每秒处理多少传入请求
- 服务器 1 秒收到 1000 请求?那是 1000 QPS
- 听起来直接直到你意识到大多数系统不能长时间维持峰值 QPS 没有东西开始破坏
Transactions Per Second (TPS)
- 系统每秒处理多少完成事务
- 事务包括完整往返,即请求出去、命中数据库、回来带响应
- TPS 告诉你关于实际完成工作,不只是收到请求
- 这是你业务关心什么
Concurrency
- 系统在任何给定时刻处理多少同时活跃请求
- 你可以有每秒 100 请求,但如果每个花费 5 秒完成,你实际处理 500 并发请求一次
- 高并发意味着你需要更多资源、更好连接池和更聪明线程管理
Response Time (RT)
- 从请求开始到响应接收经过时间
- 在客户端级别和服务器级别测量
- 简单关系 tying 它们一起:QPS = Concurrency ÷ Average Response Time
- 更多并发或更低响应时间 = 更高吞吐量
Nginx 为什么如此流行
Apache 统治 Web 服务器 20 年,然后 Nginx 出现并改变一切。现在 Nginx 供电一些互联网最大站点,包括 Netflix、Airbnb、Dropbox 和 WordPress.com。不是因为它更新或更流行,而是因为它解决 Apache 不能高效处理问题。
Nginx 流行原因
- 高性能 Web 服务器
- 反向代理和负载均衡器
- 缓存层
- SSL 终止(卸载)
网络调试命令
当有人说”这是网络问题”,这些命令帮助你快速找到什么错:
- ping:检查目的地响应并报告往返时间用于基本可达性
- traceroute / tracert:显示路径上每个跳所以你可以看到包在哪里慢或停止
- mtr / pathping:连续测量每跳延迟和丢失捕获间歇问题
- ip addr, ip link / ipconfig /all:打印本地 IP、MAC 和接口状态所以你可以验证机器网络身份
- ip route:揭示路由表确认哪个网关和下一跳系统将使用
- ip neigh:显示 IP 到 MAC 条目检测重复或陈旧 ARP 记录在 LAN
- ss -tulpn:列出监听套接字和 PIDs 所以你可以确认服务实际绑定到期望端口
- dig:解析 DNS 记录验证客户端将连接确切 IP
- curl -I:只获取 HTTP(S) 头部检查状态码、重定向和缓存设置
- tcpdump / tshark:捕获包所以你可以检查真实流量验证什么发送和接收
- iperf3:测量两端主机之间端到端吞吐量分离带宽限制从应用问题
- ssh:打开远程机器安全 shell 运行检查和应用修复直接
- sftp:安全传输文件所以你可以拉日志或推送 artifacts 在事件期间
- nmap:扫描开放端口和探测版本确认哪个服务暴露和响应
Hub、Switch 和 Router 解释
每个家庭和办公室网络依赖这三个设备,hub、switch 和 router,然而它们角色经常混合。
Hub(集线器)
- 操作在 Layer 1(物理层)
- 最简单三个
- 不理解地址或数据类型
- 当包到达,它简单广播到每个连接设备
- 创建一个碰撞域
- 所有设备竞争相同带宽
- 使 hub 低效在现代网络
Switch(交换机)
- 工作在 Layer 2(数据链路层)
- 学习 MAC 地址并转发帧只到正确目的地设备
- 交换机上每个端口作为自己碰撞域
- 提高效率并加速通信在 LAN 内
Router(路由器)
- 操作在 Layer 3(网络层)
- 基于 IP 地址路由包
- 连接不同网络一起,例如,你家网络到互联网
- 每个路由器接口形成单独广播域
- 保持本地和外部流量隔离
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP194: Evolution of HTTP。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。