241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]

server/2024/11/25 11:41:09/

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

课程背景:

  • HTTP 请求(一)
    • API 接口层
    • 状态管理
    • 页面
    • 前端路由
    • 终端
  • HTTP 请求(二)
    • 请求解析
    • 后端路由
    • 业务逻辑
    • 数据库

01. 再谈 HTTP 协议

1991年,开始大规模使用…三十多岁还在更新…可见生命力之强

1.1 HTTP 协议是什么

HTTP:超文本传输协议(Hypertext Transfer Protocol)

1.2 为什么需要协议

需要明确的边界

  • 开始和结束 [协议开始] [协议结束]

1.3 协议里有什么

发送端

POST /sis HTTP/1.1
Who: Alex
Content-Type: text/plain
Host:17.0.0.1:8888
Content-Lenth: 28Let's watch a movie together

接受端

HTTP/1.1 200 OK
Server: hertz
Date: Thu, 21 Apr 2022 11:46:32 GMT
Content-Type: text/plain; charse=utf-8
Content-Length: 2
Upstream-Caught: 1650541592984580OK

内容

请求行 / 状态行:

  • 方法名 - URL - 协议版本
  • 协议版本 - 状态码 - 状态码描述

请求头 / 响应头:

请求体 / 响应体:

1.4 请求流程

服务端

客服端

业务层 - 服务治理层/中间件层 - 路由层 - 协议编/解码层 - 传输层

1.5 不足和展望

HTTP1:
  • 队头阻塞

  • 传输效率低

  • 明文传输不安全

HTTP2:
  • 多路复用
  • 头部压缩
  • 二进制协议
QUIC:
  • 基于 UDP 实现

  • 解决队头阻塞

  • 加密减少握手次数

  • 支持快速启动

02. HTTP 框架的设计与实现

2.1 分层设计

OSI 七层网络模型、TCP/IP 四层概念模型

  • 专注性
  • 扩展性
  • 复用性

高内聚 低耦合 易复用 高扩展性

2.2 应用层 API 设计

提供合理地 API

  • **可理解性。**命名合理易理解
  • **简单性。**尽量简介
  • **冗余性。**做同样地事情地接口只保留一个
  • 兼容性。
  • 可测性。
  • 可见性。

不要试图在文档中说明,很多用户不看。

2.3 中间件设计

中间件需求

洋葱模型:核心逻辑与通用逻辑分离

调用链

2.4 路由设计

  • 静态路由
  • 参数路由
  • 路由修复
  • 冲突路由以及优先级
  • 匹配 HTTP 方法
  • 多处理函数:方便添加中间件

青铜:map[string]handlers
黄金:前缀匹配树

站在巨人的肩膀上

2.5 协议层设计

抽象出合适的接口

2.6 网络层设计

网络模型

03. 性能修炼之道

3.1 针对网络库的优化

  • go net
  • netpoll
  • netpoll with nocopy peek
    • 分配足够大的 buffer
    • 限制最大的 buffer size

不同网络库的优势

go net:流式友好、小包性能高

netpoll:中大包性能高、时间延迟低

3.2 针对协议的优化 – Headers 解析

  • 核心字段快速解析
  • 使用 byte slice 存储
  • 额外存储到成员变量中

  • 普通 header 性能较低
  • 没有 map 结构

3.3 针对协议的优化 – Header key 规范化

  • 超高的转化效率
  • 比 net.http 提高40倍

  • 额外的内存开销
  • 变更困难

3.4 热点资源池化

  • 减少内存分配
  • 提高了内粗复用
  • 降低了 GC 压力
  • 性能提升

  • 额外的 Reset 逻辑
  • 请求内有效
  • 问题定位难度增加

04. 企业实践

  • 追求性能

  • 追求易用、减少误用

  • 打通内部生态

  • 文档建设、用户群建设

碎碎念:已经开始听不懂了,很多关于计算机网络的知识,一时半会是不懂得,也正常,先记下来,留个印象,总会派上用场的


http://www.ppmy.cn/server/144782.html

相关文章

【创建型设计模式】工厂模式

【创建型设计模式】工厂模式 创建型设计模式第二期!本期介绍简单工厂模式和工厂方法模式。 简单工厂模式 简单工厂模式(又叫作静态工厂方法模式),其属于创建型设计模式,简单工厂模式不属于设计模式中的 23 种经典模…

2024最新YT-DLP使用demo网页端渲染

2024最新YT-DLP使用demo网页端渲染 前提摘要1.使用python的fastapi库和jinjia2库进行前端渲染2.代码实现1)目录结构2)代码style.cssindex.htmlresult.htmlmain.pyrun.py 3)运行测试命令端运行 3.项目下载地址 前提摘要 2024最新python使用yt…

Epipolar-Free 3D Gaussian Splatting for Generalizable Novel View Synthesis 论文解读

目录 一、概述 二、相关工作 1、单场景3DGS 2、跨场景生成3DGS 3、几何方法解决3D任务 三、eFreeSplat 1、预训练跨视角模块 2、无外极线跨视角交互感知模块 3、迭代跨视角高斯对齐 4、高斯参数预测 一、概述 该论文设计了一种不依赖于极线约束的情况实现可推广的新视…

Spring AI Fluent API:与AI模型通信的流畅体验

引言 随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient&#xff0c…

书生浦语实战训练营L1G5000

XTuner 微调个人小助手认知任务 记录复现过程并截图。 基础任务(完成此任务即完成闯关并获得 100 算力点) 使用 XTuner 微调 InternLM2-Chat-7B 实现自己的小助手认知,如下图所示(图中的尖米需替换成自己的昵称)&…

springboot 使用笔记

1.springboot 快速启动项目 注意:该启动只是临时启动,不能关闭终端面板 cd /www/wwwroot java -jar admin.jar2.脚本启动 linux shell脚本启动springboot服务 3.java一键部署springboot 第5条 https://blog.csdn.net/qq_30272167/article/details/1…

安卓手机5G网络频繁掉4G 问题解决 手机5G网络优化方案

问题环境 在某个长期停留的位置(例如:躺平)使用手机时网络突然从5G跳到4G,偶尔跳来跳去导致网络体验很差,经过调整5G网络情况下网速及其他体验都要更好,基于这样的情况使用一种简单的操作,锁定5…

生成式AI;语义通信技术;生成式AI辅助的云边协同算法及其可解释性

目录 生成式AI 语义通信技术 生成式AI辅助的云边协同算法及其可解释性 一、端到端设计的物理层内生智能 二、生成式语义通信 三、生成式数字孪生网络 四、生成式AI辅助的云边协同算法及其可解释性 五、未来可能的研究方向 生成式AI 是一种人工智能技术,它能够从大量数…