Sitar-agent:构建可扩展的可靠动态配置边车”
Airbnb 开发了 Sitar Agent,一个轻量级的 Kubernetes Sidecar,用于可靠地向数千个服务实例交付动态配置变更。配置交付始于开发人员通过 Git 或 UI 创建或更新配置值,这些值随后存储于 Sitar Service 中。Sitar Service 会定期将配置的全量状态打包为压缩快照并上传至 AWS S3。当服务 Pod 启动时,Sitar Agent 首先将这些 S3 快照下载到挂载的磁盘上,从而实现快速引导。随后,Agent 与 Sitar Service 同步自快照创建以来所做的任何变更,并向主应用容器发出就绪信号。启动后,Agent 每隔数秒持续轮询 Sitar Service 以获取更新。主应用容器通过 Sitar 客户端库从挂载的磁盘读取配置,该库缓存配置值并检测文件变更。一项关键的设计决策是将 Sitar Agent 作为独立的 Sidecar 容器,而非集成到主容器中,此举优先考虑了可靠性、操作安全性和多语言支持,而非微小的成本节约。该系统采用拉取(pull)模型,Agent 轮询 Sitar Service,并通过服务端缓存和基于令牌的数据库访问进行优化,以降低负载。对于本地磁盘键值存储,Airbnb 选择了 SQLite 而非基于 Sparkey 的旧版实现,原因在于 SQLite 在并发能力、性能及多语言支持方面表现更优。SQLite 内置的预写日志(Write-Ahead Logging)允许在写入期间进行并发读取,其更简单的运维模型也优于 RocksDB 虽性能更高但复杂度更大的方案。这种健壮的 Sidecar 设计确保了关键配置能够快速、可靠地交付至 Airbnb 庞大的服务舰队。