当前位置: 首页 > article >正文

241125学习日志——[CSDIY] [ByteDance] 后端训练营 [16]

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】
第十弹:Git 基础知识【书生大模型训练营】
第十一弹:玩转HF/魔搭/魔乐社区【书生大模型训练营】
第十二弹:书生大模型全链路开源体系【书生大模型训练营】
第十三弹:玩转书生「多模态对话」与「AI搜索」产品【书生大模型训练营】
第十四弹:浦语提示词工程实践【书生大模型训练营】
第十五弹:HTTP 框架修炼之道【字节后端青训营】
第十六弹:打开抖音会发生什么【字节后端青训营】
第十七弹:将我的服务开放给用户【字节后端青训营】

  • 系统熟悉和学习企业级网络接入核心组件及基本原理
  • 面试时,别惹问道你从输入网页到内容加载出来
  • 从零到一搭建属于自己的网站
  • 学会故障排查

01. 接入问题的引入

1.1 问题引入

从输入网站域名 - 到网页加载出来经历了什么

  1. 域名解析
  2. TCP建联
  3. 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查询过程
  1. 网络客户端 - 本地DNS服务器
  2. DNS根服务器
  3. .com域服务器
  4. 返回客户端
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 使用全站加速
  1. 用户首次登录抖音,注册用户名手机号等信息—— 静态加速 CDN

  2. 抖音用户点开视频加载后观看—— 动态加速 DCDN

  3. 打开今日头条进行网页浏览—— 静态加速 CDN、动态加速 DCDN

2.5 负载均衡

负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

负载均衡的主要作用如下:

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。

伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。

高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。

安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。

2.5.1 问题背景

在运营商租用了公网 IP,企业内部如何使用?

  • 现状:
  • 找一个物理机
  • 租多个公网 ip(数量有限)

如何管理有限的公网 ip?

2.5.2 什么是 4 层负载均衡?

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

三个主要功能

  1. 解耦 vip 和 rs
  2. NAT
  3. 防攻击: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 复习总结

梳理接入架构

碎碎念:坚持
与君共勉。


http://www.kler.cn/a/413683.html

相关文章:

  • Java中使用FFmpeg拉取RTSP流
  • 单片机学习笔记 11. 外部中断
  • Java中的线程池使用详解
  • DB2数据库
  • 嵌入式linux C++通用makefile模板
  • MySQL系列之远程管理(安全)
  • 【通俗理解】Adaptive Gradient Algorithm(自适应梯度算法)——从梯度下降到优化器选择
  • 《Gin 框架中的表单处理与数据绑定》
  • 跳表(Skip List)
  • TCP网络套接字
  • Python中3中并发对比
  • 【从零开始的LeetCode-算法】3202. 找出有效子序列的最大长度 II
  • 整合Springboot shiro jpa mysql 实现权限管理系统(附源码地址)
  • Reachy 2,专为AI与机器人实验室打造的卓越开源双臂移动操作平台!
  • 【计网】自定义协议与序列化(一) —— Socket封装于服务器端改写
  • 数据库死锁排查案例
  • 设计模式——MVC模式
  • 鉴于很多笔记本笔记不安全,手机下载安全开源笔记本的方法
  • 接口的扩展
  • go web单体项目 学习总结
  • 性能测试工具|如何有效度量前端性能
  • idea或datagrip连接opengauss数据库
  • SQL for JSON
  • React拆分组件中的传值问题
  • python之poetry 安装、创建项目、修改源、创建虚拟环境等操作
  • PHP中的命名空间与自动加载机制详解