2019/02/19 18:48 IT产业网
贝壳找房是2018年4月推出的“新居住”服务平台,为消费者提供包括二手房、新房、租赁等全方位的居住服务。随着公司业务的发展和中台战略的推进,为了管理大量的分布式调度任务,贝壳找房技术团队开发了一套中心化的作业调度系统KOB(Ke Job的简称),定义了公司的任务调度模型,实现了任务调度的统一管理和监控。
KOB是贝壳找房开发的分布式作业调度系统,其架构简介如下:
作为贝壳找房的大型开源项目之一,KOB背后的核心功能和创新点是大家关心的重点。针对一些关键问题,我们采访了项目负责人赵禹光。
Q:为什么要做KOB这个项目?
说来话长,随着公司业务的发展和中台战略的推进,很多大型项目拆分成多个小项目和微服务。我们之前使用Quartz来实现作业调度功能,但随着项目的增多,作业调度任务也分散在许多不同的项目和微服务中。这样不仅不利于作业调度任务的统一管理,也会浪费大量的服务资源,同时也无法实现跨项目间的任务调度。
基于以上思考,我们开发了第一版作业调度系统,又经过了1年多的沉淀,开源了KOB作业调度系统。
Q:为什么后来要选择开源?
带着公司在发展中遇到的作业调度问题,我们调研了很多市场上的产品,发现并没有能很好地解决我们需求的产品,因此我们决定自研。现在经过了1年多的沉淀,把我们的方案和产品以开源的方式回馈给社区,希望可以为作业调度方向提供新的解决方案,让大家共同参与建设。
Q:目前国内有哪些比较好的作业调度系统?KOB跟它们相比又有什么区别?
作业调度系统是每个互联网公司的基础服务,国内常用的有Elastic-job、TBSchedule等开源产品。
首先,它们都基于Quartz实现任务调度,每个项目需要建立相应的配置和存储,有一定的接入成本,且任务调度模块的扩展性较低。而KOB的作业调度组件都是自研的,各种配置由服务端统一管理,接入成本比较低,并且基于KOB做功能定制会更加灵活。
其次,KOB在中心化的实现方案下,保证了每个业务线机器资源的弹性伸缩,同时也实现了任务调度的统一管理和监控,降低了每个项目的管理成本。
再次,KOB实现了管道队列模块,在调度任务较多时,会将任务保留并延迟执行,保证调度任务必然运行,不会因为负载过高而丢失任务。
最后,我们支持对已接入的项目做资源隔离,使得各个项目的接入更加简单,不必考虑其他项目。其他的差异可以查看我们做的竞品分析:KOB竞品分析
Q:我们在架构方面,有哪些创新呢?
除了刚才所说的区别以外,KOB的任务调度机制和任务管理理念也有所不同。
以Quartz为例,Quartz用MySQL的行锁解决任务分配问题。但对于大量短任务的这种情况,每个客户端都会抢占数据库锁,这样就会出现大量的线程等待,对客户端是非常不友好的。而KOB是用ZooKeeper来实现任务调度的,会统一由服务端分配调度任务,预先分配好了执行任务的客户端,避免了客户端抢占数据库锁这样的资源浪费。
Q:KOB目前可以支持那些语言的客户端呢?其他语言想接入KOB会不会成本很高?
目前只有Java版本的客户端,正在规划增加对其他语言的支持。在这里也希望大家加入我们的队伍,一起开发其他语言的客户端。
其他语言的客户端开发也比较容易,因为KOB的架构主要的逻辑在服务端,客户端通过与ZooKeeper通信来实现任务调度。
Q:目前线上的稳定性怎么样?
目前在公司内部,已经接入了数百个线上服务,每天完成几万次的任务调度,调度准确性达99.999%,时间误差在毫秒级,支持失效转移,稳定性是有保证的。
Q:接入了这么多的项目后,相应的运维成本是否会增加呢?
不会的,KOB的服务端是实现了高可用的,服务失败会自动处理,不会耗费运维人力,另外我司的基础监控也比较完善。
目前KOB并不需要专职的运维同学,在服务的承载能力下,任何业务方都可以自由地在平台上进行接入,自行查看任务运行情况。并且每个项目间都是逻辑隔离的,不用担心受到其他业务的影响。
KOB作业调度系统使用了目前市场最主流的技术栈,可靠性、扩展性都很高,而学习成本很低。
Q:想问下KOB作业调度系统的下一步规划是什么?
我们会抓紧推进KOB社区的建设,同社区一起发展,在功能上即将发布跨项目调度功能,正在考虑增加DAG调度等新功能。
Q:最后一个问题,团队有没有其他产品开源的计划?
团队目前有一些其他技术类项目,解决业务中遇到的一些具体的问题,比如帮助线上定位问题、数据一致性组件等,也有开源计划,暂时保密。
对了,KOB的开源地址:https://github.com/LianjiaTech/kob,欢迎大家多提宝贵意见!
榜单收录、高管收录、融资收录、活动收录可发送邮件至news#citmt.cn(把#换成@)。