CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】
第十弹:Git 基础知识【书生大模型训练营】
第十一弹:玩转HF/魔搭/魔乐社区【书生大模型训练营】
第十二弹:书生大模型全链路开源体系【书生大模型训练营】
第十三弹:玩转书生「多模态对话」与「AI搜索」产品【书生大模型训练营】
第十四弹:浦语提示词工程实践【书生大模型训练营】
第十五弹:HTTP 框架修炼之道【字节后端青训营】
第十六弹:打开抖音会发生什么【字节后端青训营】
第十七弹:将我的服务开放给用户【字节后端青训营】
- 系统熟悉和学习企业级网络接入核心组件及基本原理
- 面试时,别惹问道你从输入网页到内容加载出来
- 从零到一搭建属于自己的网站
- 学会故障排查
01. 接入问题的引入
1.1 问题引入
从输入网站域名 - 到网页加载出来经历了什么
- 域名解析
- TCP建联
- SSL握手
- …
1.2 字节接入框架
A life of a request…
02. 企业接入升级打怪之路
2.1 使用域名系统
2.1.1 Host管理
2.12 使用域名系统
替代 hosts 文件
关于域名空间:
- 域名空间被组织成树形结构
- 域名空间通过过划分 zone 的方式进行分层授权管理
- 全球公共域名空间进对应一棵树
- 根域名服务器:查询起点
- 域名组成格式:[a-zA-Z0-9]
2.1.3 域名购买与配置迁移
域名购买
购买二级域名
域名备案:实名认证…
修改配置
2.1.4 如何开放外部用户访问
方案:租赁外网 IP,用于外部用户访问门户网站。
2.2 自建 DNS 服务器
2.2.1 问题背景
内网域名的解析也得出公网去获取,效率低下
外部用户看到内网 ip 地址,容易被 hacker 攻击
…
2.2.2 DNS查询过程
- 网络客户端 - 本地DNS服务器
- DNS根服务器
- .com域服务器
- 返回客户端
2.2.3 DNS 记录类型
A/AAAA:IP指向记录
CNAME:别名记录
TXT:文本记录
MX:邮件交换记录
NS:解析服务器记录
SOA:起始授权机构记录
2.2.4 权威 DNS 系统架构
站在企业角度思考,需要哪种 DNS 服务器?
- 权威 DNS、LocalDNS…
2.3 接入 HTTPS 协议
2.3.1 问题背景
- 页面返回 403
- 搜索不了东西
- 页面弹窗
HTTP 明文传输,弊端越来越明显
故需要 HTTPS
2.3.2 对称加密和非对称加密
常见的加密算法
对称加密:一份密钥
非对称加密:公钥和私钥
- 私钥存在服务器
2.3.3 SSL 的通信过程
-
client random
-
server random
-
premaster secret
-
加密算法协商
-
👇
-
对称密钥
2.3.4 证书链
Server 是带签名的证书链
摘要信息 - 指纹(数字签名)
利用公钥解密指纹(数字签名)
- 保证证书不会被篡改
2.3.5 使用 https
在网址头假如https,保证不会被劫持
2.4 全站加速
2.4.1 问题背景
- 源站容量低,可承载的并发请求数低,容易被打垮
- …
响应慢、卡顿 👉 用户流失
2.4.2 解决方案
源站容量 - 静态加速
流量 - 动态加速
2.4.3 静态加速 CDN
缓存:浏览器缓存?可以被下一次调用,而不用访问源站
优势:
-
解决“第一公里”问题(靠近用户的)
-
缓解消除不同运营商之间互联瓶颈的影响
-
…
2.4.4 动态加速 DCDN
针对 POST 等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输
2.4.5 DCDN 原理
边缘节点、汇聚节点、核心机房(一般在核心区)
中心区:机房数量少,算力大
边缘区:机房数量多,算力小
2.4.6 使用全站加速
-
用户首次登录抖音,注册用户名手机号等信息—— 静态加速 CDN
-
抖音用户点开视频加载后观看—— 动态加速 DCDN
-
打开今日头条进行网页浏览—— 静态加速 CDN、动态加速 DCDN
2.5 负载均衡
负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。
负载均衡的主要作用如下:
高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。
伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。
高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。
安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。
2.5.1 问题背景
在运营商租用了公网 IP,企业内部如何使用?
- 现状:
- 找一个物理机
- 租多个公网 ip(数量有限)
如何管理有限的公网 ip?
2.5.2 什么是 4 层负载均衡?
基于 IP+ 端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上。
三个主要功能:
- 解耦 vip 和 rs
- NAT
- 防攻击:syn proxy
2.5.3 常见调度算法原理
-
RR 轮询:Round Robin
-
加权 RR 轮询
-
最小连接
-
五元组 hash
缺点:当某个后端服务器故障后,所有连接都重新计算,影响整个hash环。
-
一致性 hash
2.5.4 常见实现方式 FULLNAT
RS 怎么知道真实的 CIP?
- 通过 TCP option 字段传递然后通过特殊地内核模块反解
2.5.5 4 层负载均衡特点
大部分都是通过 dpdk 技术实现,技术成熟,大厂都在用
纯用户协议栈,kernel bypass,消除协议栈瓶颈
无缓存,零拷贝…
2.5.6 使用 4 层负载均衡
外网核心设备 - 外网路由器 - 四层负载均衡 - 权威DNS解析/后端服务器
2.6 七层负载均衡
2.6.1 问题背景
四层负载均衡对 100.1.2.3 只能 bind 一个 80 端口,而有多个外部站点需要使用,该如何解决?
有一些 7 层相关的配置需求,该怎么做?
- SLL 卸载
- 请求重定向
- 路由添加匹配策略
- Header 编辑
- 跨域支持
- 协议支持
2.6.2 Nginx 简介
最灵活的高性能 WEB SERVER,应用最广的 7 层负载均衡
- 模块化设计,较好的扩展性和可靠性
- 基于 master/worker 架构设计
- 支持热部署;可在线升级
- 不停机更新配置文件、更换日志文件…
2.6.3 Nginx 和 Apache 性能对比
Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
2.6.4 Nginx 反向代理
2.6.5 Nginx 内部架构
Cache loader 和 Cache manager
2.6.6 事件驱动模型
03. 动手实践
3.1 服务器搭建
3.2 四层负载均衡方案
开源解决方案:LVS + keepalived
3.3 七层负载均衡实验
3.4 SSL 自签证书实验
3.5 如何将本地服务开放外网访问
服务开发前期,如何低成本让别人访问自己的服务?
- Ngrok,Expose your localhost to the web
04 复习总结
梳理接入架构
碎碎念:坚持
与君共勉。