打个比方,我们就像一个以高速飞行的飞机,在飞行的过程中我们需要保证安全和稳定,同时需要给飞行引擎换一个更加强大的引擎,能够飞得更高和更快。在大数据计算上面,我们的挑战具体有哪些呢?然后我们会谈谈阿里在处理这些挑战采取的解决办法。
MaxCompute每天都有百万级作业, 如何能够保证新的功能不会造成线上故障?
MaxCompute从第一天就强调安全性,如何处理可测性和安全性之间的矛盾?
MaxCompute Playback
在阿里内部,绝大部分计算任务是批处理任务,批处理的基本流程是用户会用我们的语言写一个分布式关系代数的查询优化,通过前端提交到后端,通过编译器和优化器,生成物理执行计划会和后端的执行引擎进行绑定,在调度到后面万台规模集群进行计算。
编译器Playback工具是什么呢?我们每天有百万级的jobs,每天都在变,在有新功能的时候,往往需要增强我们的语言,比如支持一些迭代计算的语法,又比如提供新的UDF。再者我们内在要有非常强大的需求驱动,需要持续不断的提高优化器的表达能力,性能优化水平,从而满足业务迅速发展的需要。如何能够保证升级过程中没有大的Regression?如果我们采用人工的方式一个个用户任务去验证我们新的计算引擎,就算都是专家,可以2分钟看出是否有风险,那也需要要近4年的时间。那怎么办呢?我们的方案是利用我们自己运算平台的并行运算能力来验证兼容性测试,将编译查询作为一个MaxCompute的UDF,然后执行一个并行DAG执行来并行执行上百万查询的编译优化,然后在智能分析结果得到新功能的潜在风险。
使得编译器符合基于AST的Visitor模型,经过编译变成一个AST的语法树,然后我们会一遍一遍的去遍历这个树,给这个树的节点绑定信息或者进行变换。在正常的编译过程中,我们要进行语法的分析,类型绑定,语义分析, 元数据统计数据绑定,然后生成逻辑计划交给优化器进行优化。这个是一个非常标准的编译器的模型。通过这种模式我们可以非常方便加入我们自定义的插件,使得可以我们在编译的过程去收集一些信息,这些信息可以用做后面进一步展开的统计分析。
利用MaxCompute本身灵活数据处理语言来构造分析任务;
利用MaxCompute本身超计算能力来并行分析海量用户任务;
利用MaxCompute灵活的UDF支持且良好的隔离方案,在UDF中拉起待测的编译器进行编译,之后再进行详细的结果分析;
整个过程都在MaxCompute完善的安全体系保护下,保障用户的知识产权不会泄露给开发同学。
非常简单,我们会进行新版本的验证,job有些会编译不过;我们也会精确制导找到触发新的优化规则的query,验证其查询优化是否符合预期;最后我们会在语义层面做整体的数据分析,比如说我们会发现有一个API,这个API我们想下线掉,怎么知道这个业务有多少人在用,我们对相应的用户发warning推动用户下线过时的语法,我们需要你们用新的更好的一个API改造原有的任务,而且,可以对query整体进行分析来确定下一步开发的重点,还有评估在这个查询优化下面的优化提高程度等等,有了这个系统,任何我们的开发,在去验证这么的时候,利用的就是我们背后大数据的分析能力。
MaxCompute Flighting
MaxCompute Playback解决了对于大量job在优化和编译的时候,我们能够快速的进行验证和比对。那么,如何保证MaxCompute优化器和运行器是正确执行的,如何避免在快速迭代中的正确性问题,从而避免重大的事故,同时需要保证数据的安全性?
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-30114-2.html
十年以后