Presto 主动Kill 机制
背景:用户界面中,为了改善用户使用体验,移除了 查询时点击按钮的操作,变更为只要检测到查询条件的修改都会自动触发计算。而实际使用过程中,用户在最终条件确定前,所有条件变更导致的查询计算均是计算资源的浪费
目的:为了避免自动触发的计算导致Presto 计算资源的浪费
如图所示,左侧指标、细分维度、公共过滤条件以及 日期范围、日期粒度、人群的变化都会导致分析查询的调用
方案:
进入Presto 计算后,Presto 会生成一个QueryId,并且提供一个支持Http 接口以支持杀死正在计算中的Query。
接口地址:
1
http://prestoHost:Port/v1/query/{queryId}/killed
从界面端发起的所有分析查询,均附带两个requestID参数,当前RequestID 和 前次requestId。RequestId 可以根据时间戳+Hash随机生成。
如果用户连续触发两次分析查询,那么在后一次的分析方法中,主动调用kill-pre 方法,会告知程序上一次的pre-requestId,我们拿着pre-requestId 去查找 上一次分析查询queryId,然后调用kill接口,杀死上一次正在计算中的presto 线程。
前一次的分析查询,presto查询被杀后,通知给前端,说该查询被用户主动终止