http协议:
终端——前端路由——页面——状态管理——API接口层
数据库——业务逻辑——后端路由——请求解析
——http请求
一、再谈http协议
http是超文本传输协议
图片、文档、视频——点击实现跳转
为什么需要协议:需要明确的边界:开始与结束
能够携带的信息:什么信息、消息类型:协议开始——协议元数据——text——协议结束
一个常见的http里有什么?
常见方法名:get,head,post,put,delete,connect,options,trace,patch;
请求行/状态行:方法名/url/协议版本;协议版本,状态码,状态码描述:状态码:1xx:信息类;2xx:成功;3xx:定向;4xx:客户端错误;5xx:服务端错误
请求头/响应头
请求体/响应体:
请求流程:业务层/服务治理层,中间件层/路由层——协议边(解码)层——传输层
不足与展望:
http1:队头阻塞;传输效率低;明文传输不安全;
http2:多路复用;头部压缩;二进制协议;
quic:基于udp实现;解决队头阻塞;加秘密减少握手次数;支持快速启动;
二、http框架的设计与实现 空结构体:使用空结构体节省内存——空结构体struct{}实例不占据任何的内存空间
可作为各种场景下的占位符使用:节省资源、空结构体本身具备很强的语义,即这里不需要任何值,仅作为占位符
实现set,可考虑用map代替
Atomic包:锁的实现是通过操作系统来实现,属于系统调用;atomic操作通过硬件实现,效率比锁高;sync.mutex应该用来保护一段逻辑,不仅仅用于保护一个变量;对于非数值操作,可以使用atomic.value,能承载一个interface{}
小结:避免常见的性能陷阱可以保证大部分程序的性能;普通应用代码,不要一味的追求程序的性能;越高级的性能优化手段越容易出问题;在满足正确可靠、简洁清晰的要求的前提下提高程序性能
性能优化分析工具:性能调优原则:要依靠数据而不是猜测;要定位最大瓶颈而不是细枝末节;不要过早、过度优化。
三、性能修炼之道
四、企业实践