随着云计算技术的快速发展,企业级软件对性能和可扩展性的需求不断提升。作为广受欢迎的项目管理工具,Jira Cloud面临着支持海量数据和提升系统响应速度的挑战。为了应对这些需求,Atlassian团队引入了Protobuf(一种高效的二进制序列化协议),以替代传统的JSON格式,从而极大地提升了Jira Cloud在数据传输和服务响应方面的性能表现。Jira Cloud的架构基于一个已经历时近二十年的大型单体应用——Jira Monolith。尽管经过多年演进,这套系统在处理极大规模数据时仍面临瓶颈。为了解决扩展性受限的问题,Atlassian推进了对系统架构的微服务拆分,逐步用多个职责单一的微服务替代原有的单体代码。
其中,Issue Service的设计尤为关键,它负责处理和管理大量的工单数据,致力于支持单个Jira站点多达十亿条工单的数据存储与访问。Issue Service的数据存储采用键值存储模型,以文档格式组织Issue数据。在系统迁移的初期,Issue Service主要充当一个最终一致的缓存层。用户请求工单时,Jira Monolith会调用Issue Service从Memcached缓存读取数据;若缓存不存在数据,则Issue Service回调Jira Monolith获取数据并进行缓存。此流程保证了数据的准确性,同时引入了高效的数据访问路径。原本工单数据采用JSON格式进行传输和缓存,但JSON格式存在序列化和反序列化性能不足、数据体积大等问题,导致系统资源消耗高,响应时间长。
通过内部基准测试对比多种Java序列化框架后,Protobuf胜出,展现出卓越的编解码速度、紧凑的数据结构和灵活的模式演进能力。Atlassian因此确定Protobuf作为Issue Service的主要数据序列化格式。尽管Protobuf通常结合gRPC实现高性能的服务间通信,但兼容性问题让Atlassian暂时放弃了基于AWS Application Load Balancer的gRPC方案,转而采用基于HTTP的Protobuf数据传输方式,以减少对现有基础设施的影响。迁移过程中,Atlassian采用了零停机切换策略,确保用户体验不受影响。具体步骤包括在Jira Monolith与Issue Service添加新的Protobuf格式端点、缓存采用不同的键存储Protobuf数据以及引入三种模式切换的逻辑标志——旧逻辑、校验模式和新逻辑。通过逐步投入生产环境,团队能够监控和比较两个数据路径的差异,及时发现并修复代码错误。
迁移过程中,团队面临了Protobuf不支持null值、与Spring框架集成复杂等技术挑战。Protobuf的数值字段若无值默认回退为零,而字符串字段为空字符串,这与JSON中的null存在差异,增加了数据缺失语义的处理难度。为此,开发团队设计了不存储空字段数据的优化方案,并在读取时动态补全,提高了存储和传输效率。此外,Spring默认的错误处理机制与Protobuf响应类型不兼容,导致HTTP 406错误。团队通过自定义异常处理器,确保服务端正确返回异常状态码,提升了系统的稳定性和兼容性。迁移完成后,Jira Cloud系统获得了显著的性能提升和资源节约。
Memcached集群的CPU使用率减少了约75%,这不仅降低了服务器的负载,也意味着更低的运维成本。由于Protobuf序列化后的数据比JSON减少了约80%的体积,缓存传输效率大幅提高,这使得Memcached的集群规模得以缩小55%。在序列化和反序列化速度方面,Protobuf分别比JSON快约四倍和三十三倍,极大优化了服务端处理延迟。最终,Jira系统的服务响应时间降低了20%,保证了用户在高并发情况下依然享有流畅的体验。迁移初期也暴露了Memcached内存分配机制对数据大小变化的敏感性。Protobuf较小的数据体积导致缓存条目落入不同的Slab类别,旧缓存策略引发了网页驱逐率的暂时上升。
通过滚动重启和等待Memcached内置的自动调节功能逐步生效,缓存命中率最终稳定在99%以上。Protobuf的成功应用为Jira Cloud的微服务化和未来持续性能优化奠定了坚实基础。Atlassian团队的经验也为其他大型云平台应对序列化瓶颈提供了宝贵的借鉴。展望未来,随着微服务部署不断深化和大规模数据处理需求的持续增长,Protobuf及相关技术在提升系统响应速度、降低网络带宽和内存使用方面的优势将更加凸显。与此同时,团队计划进一步探索基于gRPC的通信方式,以实现更高效的服务端点交互,尽管这需要克服当前负载均衡器的限制。总结来看,Protobuf迁移不仅优化了Jira Cloud的核心问题服务性能,还带来了诸多附加价值,包括代码库的简化、系统的灵活性增强和持续交付的便捷性提升。
对于任何面临数据格式瓶颈和扩展压力的云端应用,合理采用高效的序列化协议和逐步零停机迁移策略是关键成功因素。通过积极应对新技术带来的挑战,Jira Cloud展示了现代软件架构升级的最佳实践路径,助力打造更快速、更稳定、更具扩展性的云端项目管理平台。