前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式定时系统的简单思考

分布式定时系统的简单思考

原创
作者头像
小神大石头
发布2022-07-26 20:35:08
4740
发布2022-07-26 20:35:08
举报
文章被收录于专栏:devops学习devops学习devops学习

需求分析

  • 功能需求 设计一个定时服务系统(类似闹钟),输入一个定时回调任务:一个时间点或cron表达式和回调地址,系统定时到点完成指定接口的回调。
  • 非功能需求 任务不丢失,回调事件点尽量精确,支持分布式部署无单点,高可用

系统设计

对于cron定时,第三方的github包支持robfig/cron,可支持cron表达式的解析及任务调度执行,但缺乏分布式支持。

分布式设计

  1. 抢占式设计 所有节点相同时间通过分布式锁抢占任务的执行权,可以满足多节点部署高可用。多数业务项目都是此方法来完成分布式定时的需求。
  2. 优点:设计简单,任务不丢:只要有活的节点便可以保证执行
  3. 缺点:各节点负载容易不均衡,无法通过添加节点完成横行扩展;无法满足任务保持需求的场景(即希望同一业务属性的任务始终保持在同一节点执行)。
  4. 预分配设计 将任务通过一定的负载均衡策略提前分配到节点,如一致性hash等分配方法可基本保证任务保持。
  5. 优点:各节点负载比较均衡,可通过添加节点完成横行扩展,提高任务执行的吞吐量。
  6. 缺点:提前分配需要统一管理当前的节点状态,状态同步不实时会导致部分任务miss执行。
  7. 其他可能的设计 这块属于自己的一个想法,是不是可以结合两种方式,完成带有预分配的抢占式设计,类似优先级抢占。就是在抢占前可以分个优先级,优先级高的优先获得执行权,如果优先级高的节点故障时可由优先级的节点抢占兜底。不过这个顺序抢占过程就会导致任务的执行有一定的延迟。

项目实践

实践项目

  1. 采用预分配的设计实现的一个分布式定时sdk 基本原理:基于redis同步节点数据,模拟服务注册。然后将任务名 根据一致性hash 选举出执行该任务的节点。
1612670225_45_w1368_h930.png
1612670225_45_w1368_h930.png
  1. 采用预分配的设计实现的一个分布式定时服务 该服务主要完成需求功能,包括任务的存储、管理及执行,用dron进行定时调度。
1612670196_19_w556_h462.png
1612670196_19_w556_h462.png

后续规划

尝试完成一套带有预分配的抢占式设计系统

附录

解构系统设计面试

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求分析
  • 系统设计
    • 分布式设计
    • 项目实践
      • 实践项目
        • 后续规划
        相关产品与服务
        负载均衡
        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档