Kyuubi项目中的Ranger访问请求性能优化实践
Apache Kyuubi作为一个企业级SQL网关服务,在处理大规模数据查询时,性能优化尤为重要。在最新开发中,社区发现并解决了一个影响Ranger权限检查性能的关键问题。
问题背景
在Kyuubi的RuleAuthorization模块中,原始实现使用ArrayBuffer来收集和管理Ranger的访问请求(access requests)。这种设计在处理少量请求时表现尚可,但当面对大规模查询(如涉及数万个文件的场景)时,性能瓶颈就变得非常明显。
问题的核心在于,每次新增一个PrivilegeObject时,都需要与ArrayBuffer中已有的所有访问请求进行逐一比较,这种线性查找的时间复杂度为O(n),随着请求数量的增加,性能呈线性下降。
优化方案
针对这一问题,开发团队提出了将数据结构从ArrayBuffer改为HashMap的优化方案。HashMap基于哈希表实现,其查找操作的平均时间复杂度为O(1),可以显著提升大量请求场景下的性能表现。
具体实现上,优化后的版本利用HashMap的键值对特性,将访问请求的特征作为键,避免了不必要的重复比较。这种改变虽然简单,但效果显著。
性能对比
为了验证优化效果,团队设计了包含50,000个文件的测试场景:
test("KYUUBI #6754: improve the performance of ranger access requests") {
val outputPath = "/private/var/folders/tr/..."
println("output path: "+ outputPath)
val plugin = mock[SparkRangerAdminPlugin.type]
when(plugin.verify(Seq(any[RangerAccessRequest]), any[SparkRangerAuditHandler]))
.thenAnswer(_ => ())
val df = spark.read.parquet(outputPath + "/*/*.parquet")
val plan = df.queryExecution.optimizedPlan
val start = System.currentTimeMillis()
RuleAuthorization(spark).checkPrivileges(spark, plan)
val end = System.currentTimeMillis()
println(s"Time elapsed : ${end - start} ms")
}
测试结果显示:
- 优化前:性能表现较差,处理时间较长
- 优化后:性能提升显著,处理时间大幅缩短
技术意义
这一优化不仅解决了特定场景下的性能问题,更体现了几个重要的工程实践原则:
-
数据结构选择的重要性:在软件开发中,选择合适的数据结构往往比算法优化更能带来显著的性能提升。
-
大规模数据处理考量:企业级应用需要特别关注大规模数据场景下的性能表现,不能仅在小数据量下测试通过就满足。
-
权限检查的优化思路:对于频繁执行的权限检查操作,应该尽量减少不必要的计算和比较。
总结
这次优化展示了Kyuubi社区对性能问题的敏锐洞察力和快速响应能力。通过将ArrayBuffer替换为HashMap这一看似简单的改动,却解决了实际生产环境中可能遇到的重大性能瓶颈。这也提醒开发者在设计系统时,特别是在处理可能大规模增长的数据时,需要提前考虑数据结构的扩展性和性能特征。
对于使用Kyuubi的企业用户来说,这一优化将直接提升在大规模数据查询场景下的响应速度,特别是在启用Ranger权限检查的情况下,用户体验将得到明显改善。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
HY-Embodied-0.5这是一套专为现实世界具身智能打造的基础模型。该系列模型采用创新的混合Transformer(Mixture-of-Transformers, MoT) 架构,通过潜在令牌实现模态特异性计算,显著提升了细粒度感知能力。Jinja00
FreeSql功能强大的对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+、Xamarin 以及 AOT。C#00