Serverless JOB——传统任务新变革
——竞宵
阿里云Serverless团队
运行 job 的主流方式是采用分布式任务框架,比如Quartz、XXLJob 、ElasticJob等。此类框架作为面世时间较长的开源项目,使用企业众多,功能成熟。
而在当前的在云生时代,K8Sjob 和 Cronjob也逐渐被考虑采用。但是此方案普遍存在一些痛点:
首先,资源利用率低。采用开源的分布式框架需要程序常驻,在云主机中 7*24 小时收费。而K8S 方案也需要用户维护集群节点,造成成本浪费。
其次,可观测性差。用户需要完全自建一套日志采集、集群和业务监控指标采集、告警系统来满足生产环境的需要。
最后,运维复杂。无论是开源框架还是 K8S ,都需要关注底层资源的高可用、高并发下任务的容量和弹性,运维操作具有较高的技术复杂度。
而 SAE JOB 作为首款面向任务的 Serverless PaaS 平台完美解决了以上痛点。它重点解决了用户的效率和成本问题,其作为 SAE 最新“运完即停”负载类型,能够聚焦任务场景,在兼具传统任务使用体验和功能的同时按需使用,按量计费,做到低门槛任务上云,节省闲置资源成本。同时,采用了事件驱动加无入侵任务调度和管控,用户零改造,即可具备任务的全生命周期管理及可观测等开箱即用的功能。
上图为SAE Job的产品架构图。它支持多种调用方式,包括阿里云标准API/SDK,能够通过配置和 Cron 表达式实现定时任务,通过MQ/OSS 触发器来拉起 SAE Job 。同时支持很多任务的核心特性,包括任务生命周期管理、执行记录、事件通知、日志监控告警、超时重试、阻塞策略、任务分片、任务多并发等。
SAE Job 提供了三大核心价值:
① 完备全托管:提供了一站式全托管的管理界面,其任务生命周期管理、可观测性开箱即用,用户可以低心智负担、零成本地学习使用 SAE 。
② 简单免运维:屏蔽了底层资源,用户只需关注其核心的业务逻辑开发,无需操心集群可用性、容量、性能等方面的问题。
③ 超高性价比:采用按需使用、按量付费的模式,只有任务执行业务逻辑时才会拉起收费,其余时间不收取任何费用,极大节省了资源的成本开销。
SAE Job使用流程演示
首先,创建新的任务模板。
选择计算派大小的镜像并配置齐使用参数。
完成任务相关的配置,比如配置定时周期以及任务高级设置。
至此,任务创建完毕,手动执行任务。查看任务执行记录,可以看到已经拉起实例。任务执行完毕后可查看实时日志。
通过上述体验,可以看到 SAE的使用非常顺畅且简单,保证用户能够低智负担、零成本来使用 SAE 。
SAE Job 以任务为中心,提供传统的用户体验。当前聚焦支持单机广播、并行分片模型的任务,同时支持事件驱动、并发策略和超时重试等诸多特性,提供低成本、多规格、高弹性的资源实例来满足短时任务的执行。
相比开源的分布式框架,其优点在于全托管面运维的用户体验,开箱即用的完备功能以及白屏化管控,任务运行完立即释放资源,不会浪费闲置资源成本。
与 K8S Job相比,其优点除了全托管免费,还有用户无需了解 K8S 相关概念及技术细节,无需维护其复杂度。
SAE Job 充当了 XXL Job 的调度中心和执行器,用户只需聚焦它的任务代码和简单配置,比如任务模板、并发重试等,由 SAE 负责无入侵地进行任务调度和管控。
将 XXL Job 部署到 SAE ,其核心价值是降本提效。
降本体现在:如果采用原有的XXL Job,为了保持其高可用,需要MySQL+2ECS+SLB+N*ECS 作为执行器,而部署到SAE 上则只需要为其任务执行具体业务逻辑所消耗的 CPU 内存付费,即 SAE 实际的资源消耗量。
提效体现在:SAE 全托管面运维的体验,降低了整体运营复杂度,提升了可用性。
XXL Job “0改造迁移,用完即停”演示
首先创建任务模板,配置相关网络信息,选择jar包部署,将 XXL Job demo 进行部署。
同时通过环境变量来标识所需要执行的Handler,比如 jar 包中的 Handler,以及任务的执行参数。配置文件采集,采集对应的XXL Job 文件日志。
完成任务的相关配置。 SAE提供了可视化的方式为用户生成 Cron 表达式。将并发实例数设为2,高级设置保持默认。
至此,任务模板创建完成。因为采用了 jar 包上传的方式,所以 SAE 首先会为用户构建镜像。
任务触发完毕,手动执行任务,可以看到已经拉起 Job,启动了两个实例。完成后,可以查看实时日志和文件日志。
新建分片 Handler Job,引用部署包的方式,并修改对应的 handler 名字。
在高级设置里启动分片。
至此,整个配置完成。任务触发完毕后,手动执行。
可以看到拉起了两个实例,由于启用了分片,实例名称里有 index 。
SAE Job目前主要聚焦于泛互联网、新零售、电商、文化传媒、制造、 IoT、物流、金融证券、医疗卫健和保险等行业。主打的场景包含以下六个:
① 定时任务:定时拉取数据、爬虫。
② 批处理:数据清洗、转换、分析。
③ 异步执行:异步进行状态刷新以及离线查询。
④ 传统框架迁移:XXL Job 0改造迁移等。
⑤ 微服务架构:与原有的微服务架构进行调用通信、流程解耦。
⑥ CI/CD:用SAE Job 作为构建镜像的载体实现GitOps ,从而完善 CI/CD 的流程。
用户案例介绍:
用户的业务诉求为:需要通过定时任务将酒店产品变化的数据定期推送给第三方平台,比如飞猪等。其任务有两个特点:
首先,任务的初始化耗时久,需要分钟级;其次,任务执行时间非常长,需要5-6个小时,并且除了处理业务逻辑之外,还需要调用其他微服务来获取元数据等信息,这也意味着任务重要性极高。
我们为此提供的解决方案是将订单中心、产品中心、用户中心等微服务直接部署到 SAE应用上,将定时任务部署到 SAE job 里,用户无需改造即可通过 SAE 内置的注册中心实现通信。
该解决方案为用户提供了诸多价值:
- 两种负载统一入口操作、应用间调用0改造。
- 任务运完即停,立刻释放闲置资源,极大节省了资源成本。
- 超时失败自动重试,无需人工干预实现自愈。
- 提供完善的任务运行时监控报警机制。
借助这套解决方案,用户0代码改造即完成了整个架构Serverless 化,同时节省了资源成本和运维成本。
未来,SAE将持续为其应用和任务的可用性保驾护航。