我所理解的分布式调度

对于规模以上的应用来说,调度系统已经是必不可少的组成部分,尤其在基于数据分析的后台应用大量增长的今天,健壮的调度任务管理已经是非常重要的一环,因此多花些时间来分析研究调度系统的设计对于日常的开发与运维具有比较重要的意义。

调度问题是怎么来的

当你的网站是个简单的blog,而且并不需要跟外部交互的时候,你大概不需要调度任务,因为此时网站需要处理的任务仅限于 即时交互 , 即用户想使用一个功能,你就立即给他就是了,如同你在简书上写一篇文章,一点保存,这篇文章立即就保存到网站的后台服务器中去了,这也是互联网刚出现时候的最早的应用模式。

之后因为网站发展的不错,用户多了起来,就发现需要大量处理一些非即时的任务,比如要定时将用户访问日志归档清理,这个时候一般情况下会在服务器启动一个定时任务,在每天固定时间发起清理归档,又如你想显示一下网站的访客流量、发表文章数、评论统计,由于并非每次用户或者后台管理员每次需要看的时候都去计算一遍,所以可能又需要启动另一个任务来去处理这些数据,这样的任务多了,就需要思考一个问题,哪些任务要先处理,哪些任务要后处理,每个任务要占用多少资源,从而任务调度问题开始出现。

调度什么时候变得复杂

在一个单机的系统,任务并不多的情况下,生活还依然是美好的,利用Linux自带的定时器或者系统框架提供的定时任务,实现好任务执行器,配置好任务触发的时间和频率,然后每天等待它自动触发,数据生成,任务搞定,似乎调度也没那么困难。

然而好景不长,伴随着网站的发展,你发现任务处理的越来越慢,甚至偶尔会有任务超时的情况,原因是每天用户产生的数据量越来越大,每次任务捞起的数量已经超载,依次执行完每个任务,可能已是最初执行时间的几倍。

这时稍有点经验你便会想到,任务没必要顺序执行啊,所以弄个线程池,起多个线程同时来捞数据然后执行,同时配置动态调整每次数据捞取的数量,增大执行频率,一系列组合拳打出去之后,调度任务又恢复正常,由于增加了并发数,甚至执行的比开始还更快了,就这样业务高峰便又顺利度过了。

调度什么时候变得更加复杂

之前所描述的情况基本上都在单机的情况,网站的QPS(每秒处理的任务数量)基本在500以下,通过一系列的参数调优,串行变并行,任务运行的很平稳。然而当任务变的规模更大,比如十倍于当前,一台机器已经不能处理所有的任务,这时候需要增加更多的机器,将任务分配到不同的机器上,于是便有了所谓的分布式调度的问题。

分布式是目前稍大型的网站不可避免的问题,这种处理方案有很多好处,比如可以利用廉价的机器,可以(理论上)无限水平拓展,同时也带来了一系列棘手的问题,机器之间的网络通信,如何把流量均匀的分布于不同流量,如果有机器宕机了如何处理,每个问题都已经是一个庞大的技术领域。

对于调度的分布式问题,首先要解决的便是如何把任务分发到不同的机器上,这要求调度系统通常要至少分为两层,第一层决定一共要处理哪些任务并把任务分发到哪些机器上处理,第二层接到任务后具体执行。虽然描述起来很简单,但是这个处理过程实际上需要大量支撑系统的支持,比如在任务分发时如何判断哪些机器还活着可以处理任务,这可能需要一个可以感知整个集群运行状态的配置中心,又比如任务如何分发,是采用消息还是实时服务接口,如果是用消息派发则需要消息系统,如果是实时服务,又需要类似dubbo这样的分布式服务框架。当系统达到这个复杂度,已经不是将任务捞起并处理这么单纯,而是多个关联系统复杂性的叠加。

分布式调度的难题

虽然分布式调度带来了复杂度的上升,但是它的水平拓展能力完美的适配了网站的规模发展,直到有一天你看到了类似这个错误:

org.springframework.transaction.CannotCreateTransactionException

数据库连接池已经打满,由于单个数据库的连接数是一定的,这意味着数据库变成了资源瓶颈,这时候给任务处理happy的加机器已经不能提高系统的整体处理能力,这就如同你要运走一群人,给你提供的车辆是无限的,但是汽油确是一定的。当然数据库也是可以拓展的,但是考虑到数据迁移的复杂性,这几乎将问题的复杂度提高了一个等级。因此,一个分布式系统的吞吐量,在很大程度上是与数据库处理能力做权衡的结果。

写在最后

分布式调度是一个巨大的话题,并且还在随着实际任务复杂度的提高而快速的更新,上面这些思考与总结也只是浮光掠影,还需要在实际工作中再深入体会与仔细研究。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容