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权限检查的情况下,用户体验将得到明显改善。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00