万字心路历程:从十年老架构决定重构开始
内容提要
iLogtail经历了多次迭代,引入了Golang插件系统,重构了架构,提高了可观测性和可扩展性,解决了商业版和开源版的问题。重构过程中遇到了挑战和困难,采用了从内向外的重构顺序,确保代码质量和兼容性。整个架构晋级过程持续了半年多,为iLogtail的发展迈出了一大步。
延伸解读
重构的核心驱动力
iLogtail原有架构中,C++主程序与Golang插件系统之间的数据通路组合受限,导致开源社区用户无法享受C++的高性能处理能力。同时,内部数据模型仅支持Log,无法表达Metric和Trace,且与SLS强绑定,向第三方存储投递时需额外转换,降低效率。这些限制严重制约了iLogtail作为通用可观测数据收集器的发展,因此架构升级势在必行。
架构升级的关键设计
新架构将内部数据模型更换为通用的PipelineEventGroup,支持Log、Metric和Trace,并引入插件化设计,将C++的输入、处理、输出能力抽象为插件,与Golang插件统一概念。流水线支持原生处理插件和扩展处理插件的组合,但约束原生插件必须在扩展插件之前,以减少CGO调用,确保性能。这种设计既保留了C++的高性能优势,又增强了灵活性和可扩展性。
实施策略与挑战
重构采用从内向外的顺序,先重构底层数据模型和插件,再逐步向上层推进,分阶段实施以确保每个阶段可独立CI。面对原有测试系统不健全的挑战,团队通过完整梳理代码、补充单元测试来保障兼容性。整个重构历时半年多,期间还优化了商业版与开源版的代码嵌入方式,通过纯追加文件而非替换,显著提升了开发效率。
Q&A
iLogtail的重构主要解决了什么问题?
重构主要解决了输入输出与处理模块间的组合能力受限的问题,提升了商业版和开源版的功能兼容性。
iLogtail的架构重构过程中遇到了哪些挑战?
重构过程中遇到的挑战包括新架构设计、分阶段实施和确保代码质量等问题。
iLogtail的新架构有哪些主要特点?
新架构支持多样化的输入、处理和输出插件,增强了系统的灵活性和可扩展性,并引入了通用数据模型。
Golang插件系统对iLogtail的影响是什么?
Golang插件系统扩展了iLogtail的输入输出通道,提高了处理能力,并支持多样化的数据处理。
iLogtail的重构过程持续了多长时间?
整个架构晋级过程持续了半年多。
iLogtail在重构后如何提升用户体验?
重构后的iLogtail更好地支持商业版和开源版的需求,提升了开发效率和用户体验。