导语:随着互联网技术发展,新技术不断涌现,这制造了一个意想不到的新问题:打造服务时可能经常多种不同领域技术深度结合,但由于种种原因这些技术通常难以结合的那么好。蚂蚁集团基于开源的分布式计算框架Ray构建融合引擎,在不同场景去解决这个问题,取得了一定成果,现在就让我们来看看他们是怎么做的?
利用Ray构建融合引擎
随着互联网的发展,人们倾向于使用新的计算范式来应对不同的场景,新的技术也随之涌现,如OLAP引擎、图计算、流计算、深度学习等。这意味着在解决一个问题时,可能需要两项甚至多项技术进行深度的结合。
Ray的使用也很简单,在目前比较流行的分布式框架,都有三个比较基础的分布式原语,分布式任务、对象和服务。而常用的面向过程的编程语言中,也刚好有三个基本概念,函数、变量和类。这三个编程语基本概念刚好可以和分布式框架的原语对应起来。在Ray系统中,可以通过简单的改动,实现它们之间的转换。
但是,在将不同技术结合到一起的时候,会遇到多方面的挑战,包括:
● 复杂系统的协调。当多个核心计算引擎组合到一起的时候,系统的复杂性大大上升,也加大了工程师对复杂系统的协调难度;
● 性能优化。在进行性能调优工作时,工程师需要面对多种分属不同领域的计算引擎,导致系统难以突破性能瓶颈;
● 开发效率。工程师需要熟悉多个引擎如何协同工作,出现问题也难以定位和排查,导致开发效率低下。
这正是蚂蚁集团开发融合计算引擎的原因,其目标是将多种不同范式的引擎融合在一起,更好的提供服务,融合计算基于分布式计算框架Ray开发而成,具备以下特性:
● 简单且通用的API。
● 同时支持多个编程语言。
● 弹性且可自定义的任务调度。
● 分布式状态管理。
● 易用的错误处理和故障恢复。
● 低成本的DevOps。
Ray是由伯克利大学RiseLab实验室发起,蚂蚁金服共同参与的一个开源分布式计算框架,它提出的初衷在于让分布式系统的开发和应用能够更加简单。Ray作为计算框架具有敏捷的调度机制,也可以根据计算对资源使用的需求实现异构调度。
Ray的使用也很简单,在目前比较流行的分布式框架,都有三个比较基础的分布式原语,分布式任务、对象和服务。而常用的面向过程的编程语言中,也刚好有三个基本概念,函数、变量和类。这三个编程语基本概念刚好可以和分布式框架的原语对应起来。在Ray系统中,可以通过简单的改动,实现它们之间的转换。
左边是一个简单的例子,在这个函数前面需要加入一个“@remote”修饰符,就可以把一个函数转换成为分布式任务。任务通过“.remote”调用执行,返回值是一个变量,又可以参与到其他计算中。
右边是另一个例子,通过加“@remote”修饰符的方式可以把一个类转变成服务。类中的方法可以通过“.remote”调用变成一个分布式任务,和函数的使用非常相似。通过这种方式可以实现从单机程序到分布式任务的转变,把本地的任务调度到远程的机器上进行执行。
关于Ray更多的介绍参见:《提效降本:蚂蚁金服如何用融合计算改造在线机器学习》
在蚂蚁的金融智能技术架构中,融合计算运行于Kubernetes集群之上,Ray作为分布式计算的基础设施,支持包括动态图计算、在线机器学习等应用框架,驱动上层实时风控、知识图谱等应用。
蚂蚁深度参与了Ray开源项目的开发,在Ray社区贡献位于前二位。截止到2020年10月,前25位贡献者当中有8位蚂蚁工程师,22%的代码由蚂蚁集团贡献。蚂蚁为Ray贡献了包括Java API、容错性GCS等功能特性,并为Ray在大规模落地实践提供了宝贵经验。
Ray在蚂蚁集团的规模化应用实践
蚂蚁在18年Ray项目的早期就参与到了项目的开发,长期和Ray开源社区保持密切合作,并深度参与了Ray内核的开发。在蚂蚁内部,我们基于Ray构建了实时图计算、在线计算、在线机器学习等计算平台,以及多个直接运行在Ray之上的分布式业务系统。这些系统在微贷、风控、智能营销、金融智能、金融核心等核心业务领域得到了广泛的应用,平稳顺利地支持了多次双十一大促。
下面,我们将简要介绍Ray在蚂蚁集团的规模化应用实践。
首先是在线机器学习系统。
传统的在线机器学习系统是一系列子系统组成的任务管道,原始的实时数据需要流经过滤、采样、特征工程、训练和部署等系统,才能发挥作用。这就给我们带来了数据一致性、系统稳定性、多平台等挑战。
蚂蚁基于Ray开发出端到端的在线机器学习架构,如下图。
这套架构在一个在线机器学习框架中包括实时数据处理、分布式训练以及模型部署三大组件,并通过Ray的分布式计算特性,支持跨编程语言的开发、exactly once、自动化训练和模型更新等。
在该在线学习系统的运行时里,我们可以看到实时数据处理和训练及部署是高度集成在一起的,外部的实时数据被转换为微批处理,并实时同步给训练组件,然后进行部署,这种设计可以最大化系统效率。这套系统同时支持数据流API和SQL两种调用方式,进一步为业务方降低了使用的学习成本。
另一个落地场景是大规模并行处理。
随着业务场景和需求的不断深化扩展,许多在线应用开始承担分布式计算功能,然而,现有的应用架构缺乏分布式计算系统中的任务调度、集群管理、灵活容错 FO 等能力,导致在业务规模化过程中,容易出现集群负载不均、单机瓶颈、资源无法动态隔离等问题。
银行卡支付一直是支付工具中重要的组成部分。银行卡业务涉及各类金融机构渠道,涉及的机构众多,各个机构的能力各不相同。如何保障用户在大促期间的高支付成功率,让用户的大促体验丝般顺滑存在极大的挑战。当银行卡支付发生异常时,需要尽快做出准确的决策,执行应变操作,以及时减少异常带来的损失。而传统的监控报警提供的秒级指标查询延迟较高,特别是对于决策常用的成功率联合计算指标,延迟更是超过1分钟,决策也因此只能做到分钟级的熔断能力,同时稳定性也不能满足大促的SLA要求。
为了解决上述问题,我们基于 Ray 打造了Ray-MPP在线计算系统,具备端到端极低延迟、高可用、具备数据准确性保障(exactly once)等特点。
一方面可以很好的处理在线计算应用中大规模细粒度任务调用的场景,另一方面发挥 Ray 运行时动态扩展的特点,使得系统具备更好的运行时资源动态隔离能力,并在处理任务时具备更强的灵活性。
Ray-MPP 被运用在金融网络的金融决策链路中,为金融决策的指标查询计算和决策脚本计算提供分布式计算能力。经过实际场景中的检验,Ray-MPP 为业务在计算性能、稳定性、研发效能等各方面都带来了提升。
未来展望
目前,Ray项目发展势头良好,并且得到了越来越多的关注。除了蚂蚁之外,Uber、Intel、微软、字节跳动等公司也在积极参与Ray社区。同时,也有越来越多开源项目已经集成进了Ray的生态。
未来,我们将从扩展性、性能、调度、弹性、生态建设等方面继续提升Ray的能力,把Ray打造成一个稳定、高效、易用、通用的分布式计算底盘,也期待和业界与社区有更多交流探讨。
同时,我们也正在面向应届毕业生招聘2021年实习生,欢迎自荐和推荐。
团队介绍
我们是蚂蚁集团数据技术部,是整个蚂蚁集团数据引擎的底盘,为整个集团的各项业务发展保驾护航。我们打造的蚂蚁集团计算存储基础架构,其技术核心包括金融大数据的开放计算体系,金融级大规模图计算存储,金融智能机器学习平台及系统架构,以及适合金融场景的多模融合计算引擎等方面的研发和攻关。
依托蚂蚁集团丰富的数字金融和数字生活场景,我们致力于打造新一代大数据和AI基础设施。
我们的团队横跨美国硅谷和中国北京、上海、杭州和成都。我们追求的工程师文化是开放、简单、迭代、追求效率、用技术解决问题!
你想要的我们都有!!!
● 平台好:顶尖的工程师团队,超大规模数据计算平台,Stanford、Berkeley等一流高校的合作伙伴, SQLFlow等多个自研和开源项目。
● 成长快:面对不可多见的一流计算场景,挑战世界级技术难题,主管师兄带你飞。
● 福利好:提供业内极具竞争力的薪资,各种补贴我们都帮你想到了。
● 活动多:生日会、工程师节日、阿里日、战役庆功、各种团建……来了你就知道了!
招聘需求
面向对象:2021.11-2022.10期间毕业的应届毕业生
岗位类型:
● 研发工程师:C/C++, Java, Python, Go
● 算法工程师:机器学习
技术方向:图计算、分布式计算、分布式存储、数据库、人工智能
工作城市:杭州、北京、上海、成都
应聘方式:发简历至antcomputing@antgroup.com
需要注明【岗位+编程语言+技术方向】或者找学长学姐帮你内推。
期待大家以最帅/最美的姿势跑完招聘流程,等待offer降临!