这是我参与「第五届青训营」伴学笔记创作活动的的第15天
性能优化和微服务架构
针对网络库的优化
优化
1.go net:
存下全部 Header
减少系统调用次数
能够复用内存
能够多次读
2.go net with bufio:
绑定一块缓冲区
3.netpoll:
存下全部 Header
拷贝出完整的 Body
4.netpoll with nocopy peek:
分配足够大的buffer
限制最大 buffer size
不同网络库优势
1.go net:流式友好、小包性能高。
2.netpoll:中大包性能高、时延低。
针对协议的优化
Headers解析
找到 Header Line边界:\r\n,先找到\n再看它前一个是不是\r。
针对协议相关的 Headers快速解析:
1.通过Header key首字母快速筛除掉完全不可能的key
2.解析对应value 到独立字段
3.使用byte slice管理对应header 存储,方便复用
取:核心字段快速解析,使用byte slice存储,额外存储到成员变量中
舍:普通header性能较低,没有map结构
热点资源池化
与请求一一对应,贯穿一个请求始终
取:减少了内存分配,提高了内存复用,降低了GC压力,性能提升
舍:额外的 Reset逻辑,请求内有效,问题定位难度增加
微服务架构
介绍
彻底的服务化
优势:1.开发效率
2.业务独立设计
3.自下而上
4.故障隔离
劣势:
1.治理、运维难度
2.观测挑战
3.安全性
4.分布式系统
核心要素:
1.服务治理
2.可观测性
3.安全
基本概念
服务:一组具有相同逻辑的运行实体。
实例:一个服务中,每个运行实体即为一个实例。
实例与进程的关系:实例与进程之间没有必然对应关系,可以一个实例可以对应一个或多个进程(反之不常见)。
集群:通常指服务内部的逻辑划分,包含多个实例。
常见的实例承载形式:进程、VM、k8s pod……
有状态/无状态服务:服务的实例是否存储了可持久化的数据(例如磁盘文件)
服务间通信:对于单体服务,不同模块通信只是简单的函数调用。对于微服务,服务间通信意味着网络传输。