欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]

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

2024/11/30 10:06:51 来源:https://blog.csdn.net/Rain050415/article/details/144005772  浏览:    关键词:241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】
第十弹: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. 企业实践

  • 追求性能

  • 追求易用、减少误用

  • 打通内部生态

  • 文档建设、用户群建设

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com