我不允许谁还分不清这三种watch机制的区别

今天快速介绍目前市场面常见的三个watch机制的实现。

1.chunked transfer encoding

k8s控制面几个组件,核心枢纽是apiserver, 除etcd之外,其他组件都通过restful进行http通信。

上文提到的informer机制是controller的标准范式, 目的是实现声明式API的闭环控制,减少了对于apiserver的调用。

scheduler和kubelet、kubectl也有对于apiserver的调用,监听资源变更的方式都是watchAPI, 这是一种非标准的chunked transfer encoding,http1.1传输层编码。

分块传输编码(CTE)是一种 HTTP/1.1 机制,通过将数据分割为多个块来流式传输响应,每个块前面都带有其十六进制表示的大小,使得服务器可以在不知道总长度的情况下发送数据,适用于动态内容、实时更新和大文件传输,最后以一个长度为零的块结束。

2. grpc 流式通信

apiserver作为控制面组件的交互枢纽, 与底层存储etcd交互。

apiserver 也需要watch etcd的资源变动,这样才能接力反馈到上层组件(scheduler,kubectl)。

etcdv3 走的是grpc协议,天生支持双向实时通信。

http2.0 高性能rpc框架, 单个tcp连接上多路复用,二进制分帧、双向流式通信,头部压缩。

apiserver是作为grpc客户端与etcd交互,etcd 的 Watch 机制是一个集 MVCC 版本控制、高效内存索引、持久化存储和流式网络通信 于一体的复杂系统。其核心价值在于提供了 基于逻辑时钟的、可靠的、有序的变更通知,这正是 Kubernetes 等分布式系统能够构建出高效、一致的状态协调机制的基础。

3. 服务端发送事件SSE

目前火热的大模型在线推理,走的是SSE协议。

服务器发送事件(SSE)是一种基于HTTP 协议的单向通信协议,它允许服务器以事件流(Event Stream)的形式实时向客户端推送数据,而无需客户端明确请求。它建立在标准的 HTTP 协议之上,通过单向的持久连接,服务器可以主动向客户端发送事件和数据。

本质上,它是以应用层消息协议来实现的,由客户端向服务端发起建立连接请求,并保持连接打开,然后服务端主动推送消息给客户端,服务器给客户端发送的 SSE 数据,必须是 UTF-8 编码,且返回的内容类型是text/event-stream

比如当你在使用DeepSeek 时,当你询问它问题时,你会看到它会逐字地将回答显示出来,实际上这是DeepSeek 将先计算出的数据主动的"推送"给你,采用 SSE 技术边计算边返回,避免接口等待时间过长而直接关闭页面。

相关推荐
涡能增压发动积20 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o20 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
swg32132120 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung20 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald20 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川21 小时前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
元宝骑士21 小时前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
用户319523703477121 小时前
记一次 PostgreSQL WAL 日志撑爆磁盘的排查
后端
nghxni21 小时前
LightESB PlatformHttp v3.0.0:JSONPath 订单转换 HTTP 路由实战
后端
武子康21 小时前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端