标量选择反模式

主要观点:从以事件循环为核心开始写了很多有状态服务,之后需多次重构该循环,如 TigerBeetle PR 案例。对于实现某种编程语言的 LSP 服务器,有三个主要事件源,其“明显”的事件循环设置是合并多个事件流。关键是事件流外部驱动且不知用户何时输入,process(event)需时间,会导致处理当前事件后可能有多个事件等待,“标量选择”会随机选择,产生开销。
关键信息:有多种优化方式,如优先级排序(写优先于读优先于接受新客户端)、选择性背压(决定不处理特定请求施加背压)、消除(根据后续事件完全丢弃请求)、合并(同时处理多个请求更高效)。
重要细节:通过batch_stream函数将标量选择改为批量选择,在低负载时为单例批量,负载增加时批量大小增长,负载呈次线性增长。示例代码展示了如何实现合并事件流和批量处理事件。总之,处理消息时应始终批量处理。

阅读 12
0 条评论