这是我参与「第五届青训营 」笔记创作活动的第9天
一、本堂课重点内容
(续上一节)
- 网络架构怎么给抖音提质
- 总结
二、详细知识点介绍
2. 网络架构怎么给抖音提质
网络提速
网络稳定
2.1 网络提速
2.1.1 HTTP2.0
多图并发下载
2.1.2 怎么理解多路复用/stream
- 单个TCP链接传输
- 如果TCP丢包了怎么办?
2.1.3 QUIC/HTTP3.0
- TCP or UDP?
- Kernel or Userspace
- 0 RTT
- 弱网优势
除了协议优化,网络路径能不能优化?
2.1.4 数据中心分布
2.1.5 同运营商访问
2.1.6 静态资源(图片视频)路径优化(CDN)
2.1.7 动态API(播放/评论接口)路径优化(DSA)
刷的快,但是三天两天挂掉,谁刷抖音?
2.2 网络稳定
2.2.1 容灾概念
故障发生 —— 故障感知 —— 自动切换 —— 服务恢复
2.2.1.1 网络容灾的具体案例一
2.2.1.2 网络容灾的具体案例二
bytedance.com A 1.1.1.1 / bytedance.com A 2.2.2.2 ==> bytedance.com A 1.1.1.1 => 自动化
2.2.1.3 网络容灾的具体案例三
云到端 ==> 主动降级/容灾
场景局限性
2.2.1.4 网络容灾的具体案例四
Bug 导致全 crash ==> 前置兜底逻辑/ cache 文件
没有容灾的故障怎么查?
2.2.2 故障排查
故障明确 —— 故障止损 —— 分段排查
2.2.2.1 故障明确
出现什么故障?——> 沟通是前提
- 什么业务?什么接口故障?
- 故障体现在哪里?
- 访问其他目标是否正常?
- 是否是修改导致的异常?
2.2.2.2 故障止损
- 先止损再排查
- 用户体验第一
- 对公司收入的影响是按照分钟甚至秒来计算
- 如何止损
- 组件没有容灾,但是系统有没有?
- 降级
2.2.2.3 分段排查
- 客户端排查
- 客户端访问其他服务没问题吗?
- 其他客户端访问目标服务没问题吗?
- 服务端排查
- 服务端监控/指标都正常吗?
- 手动访问一下正常吗?
- 分组件排查
- 中间链路排查
- 服务端跟客户端确保都没有问题
- 中间网络设备有没有问题?(交换机/路由器/网关LB)
- 旁路的 DNS 有没有问题
2.2.2.4 网络故障排查常用命令
- dig 查询 DNS 问题
- ping/telnet/nmap 查询三层/四层连通性
- Traceroute 排查中间链路
- iptabels
- tcpdump
2.2.2.5 网络故障排查案例一
客户端异常 -> 服务端自测正常 -> 网关转发异常 -> 健康检查异常
2.2.2.6 网络故障排查案例二
个别用户报故障,生产环境大多是客户端的问题
2.2.2.7 网络故障排查案例三
安徽电信报障某APP无法使用 -> 检测后端服务正常,安徽电信流量突降 -> 安徽电信客户端 ping 不通目标服务 -> 电缆被挖断
2.2.2.8 网络故障排查案例四
某APP故障 -> 后端服务器反馈服务正常 -> 网络转发设备异常 -> 抓包 -> 路由不对称
2.2.3 故障预防很重要
- 监控报警
- 故障演练/预案
- 故障降级/止损
2.2.4 总结
高质量刷抖音:
- 路径提速
- 数据中心提速
- HTTP2.0 提速
- QUIC提速
- 网络容灾
- 故障排查
3. 总结 & 课后作业
3.1 课后作业1
UDP socket 实现 ack,感知丢包重传
提示:
- 学会UDP socket编程
- 先从简单的 ack 学习,客户端等待 ack 再发包
- 什么时候客户端认为是丢包?
- 重传怎么考虑效率?
- 能不能不阻塞只穿丢掉的中间的段?
3.2 课后作业2
三台同网段内的服务器,模拟实现一个路由器
3.2.1 方法一:Linux 操作系统配置法
提示:
- 了解 Linux 的路由配置方式
- 确保是同网段直连可达的环境。在三台机器上另外配置 IP 网段和路由。
- 一台机器做客户端,一台机器做路由器,一台机器做服务端。
- 客户端配置到达服务器的下一跳指向路由器,路由器上配置到达服务端的路由
3.2.2 方法二:用户态socket编程实现简易route软件
提示:
- 收到指定的包后,做转发
- 注意修改报文的 MAC,不是修改 IP。
- 实现一个对称路由,这样可以实现TCP交互
- 可以通过 ping 来验证
- 可以支持 traceroute 吗?