分层设计及优化 | 豆包MarsCode AI刷题

76 阅读2分钟

分层设计

image.png

传输层和应用层不一样,传输层要关注0101传输。应用层只需要关注接口怎么实现,底层逻辑不需要理解。

image.png

1、application应用层:跟用户打交道,对请求进行一个抽象,提供丰富应用api

提供合理的 API(可理解性、简单性、冗余性、兼容性,可测性、可见性)

2、middleware中间件层:预处理逻辑【洋葱模型】

中间件需求: 配合 Handler 实现一个完整的请求处理生命周期 拥有预处理逻辑与后处理逻辑 可以注册多中间件 对上层模块用户逻辑模块易用

3、route路由层: 注册、寻址【前缀匹配树】

框架路由实际上就是为 URL 匹配对应的处理函数(Handlers) 静态路由: /a/b/c、/a/b/d 参数路由: /a/:id/c (/a/b/c, /a/d/c)、/*all路由修复: /a/b <-> /a/b/冲突路由以及优先级:/a/b、1:id/c 匹配 HTTP 方法 多处理函数:方便添加中间件

4、codec协议层:完成抽象接口,就可以拓展接口

抽象出合适的接口

5、transport网络层/传输层【网络模型】

BIO NIO、buffer

image.png

1、针对网络库的优化

go net(流式友好,小包性能高)

存下全部Header

减少系统调用次数

能够复用内存

能够多次读

netpoll(中大包性能高,时延低)

存下全部Header

拷贝出完整的Body

2、针对协议的优化 — Headers解析

image.png

SIMD(Single Instruction Multiple Data)即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。

3、针对协议的优化——Header key规范化

image.png

4、热点资源池化

池化:(关乎生命周期、并发问题)

池化操作最初是用来减小数据大小,使模型更容易训练,这个过程即为下采样(downsampling),这里可以称为下池化。随着之后的发展,池化也可以增加数据大小,此时的池化操作为上采样(upsmapling)或上池化。

数据的池化,根据被池化的张量维数的不同,一般可分为一维池化、二维池化与三维池化。池化操作都有一个固定的窗口,可以称为池化窗口,类似与卷积操作中的卷积核。

对于池化,大多数都需要池化窗口kernel size、步长stride、填充padding、dilation这几个参数。池化窗口表示选取的数据范围,步长表示池化窗口每次沿某个方向的长度,padding表示对input池化前是否在周围补充0,dilation为膨胀率。