文章目录
在做这个项目之前,大家可能会想要知道,为什么要做一个定时微服务,做了之后能产生什么价值呢。
定时微服务的优势
1.场景宽泛,方便立意。
在真实业务中,定时场景还是比较常见的,作者经历的几家公司和业务场景来看,几乎都会涉及定时的场景。面试当中,面试官对于一个项目的考察,开始可能就是关于这个项目的立意,也就是为什么要做这样一个项目?此时结合自己学校的业务,或者公司的业务,去构思一个定时的场景会相对容易且合理。
2.业务属性较弱,适合抽成一个独立的中台服务
基于上面的立意思考,考虑到定时场景是一个通用且业务关联性弱的场景,很多业务场景都会用到,那么去把这部分定时逻辑抽成一个单独的服务也是合理的。这样可以作为一个中台服务去维护。
3.核心逻辑聚焦,容易掌握
定时服务并不复杂,场景很好理解,逻辑也很好理解,所以比较容易掌握。它的特点不是业务本身的复杂性,而难点在于如何提高定时的精度,如何能扛住高负载等。
4.可以囊括很多核心技术栈
在如何提高定时精度,以及如何提高任务吞吐量这些上面,有很多可以做文章的点。其中会用到MySQL、Redis等核心组件,前提是我们这两方面掌握比较好的情况下,可以将这个项目作为引子,将面试官引导到这两项技术的考察上,那一场面试基本就稳了。(另从这个点考虑,如果读者消息队列掌握不错,那像Kafka、RocketMQ消息队列也提供异步回调的能力,将其引入作为最后回调业务方的一种方式也是合适的,那有可能将面试官引入到消息队列的考察上)
定时微服务的价值
1.提升架构设计能力
适合架构能力的提高,定时微服务采用模块化设计和分治策略等设计理念,在如何提高定时精度,如何提高系统高负载等问题解决方案上,运用了很多好用设计理念和思想,这些设计能力在后续公司的业务场景中也是可以发挥作用,这也会是面试官感兴趣的点。
2.应对面试答辩
-
1.首先定时微服务很好立意,从面试官的角度,基于学校或公司的业务场景,设计一款功能聚焦,容易维护的定时微服务是合理的。
-
2.项目的设计难点:定时微服务具有高精度,高负载等核心难点,面试官也很好理解,其次在设计中运用了很多模块化,分治等设计理念来解决这些难点,所以比较容易引起面试官兴趣,同时可以拿出来说的点也足够多。
-
3.项目中运用的都是一些核心技术,包括MySQL、Redis这些都是作为后端开发的核心技能点。同时项目可扩展性很高,例如读者消息队列掌握很好,完全可以融入消息队列技术等。这样项目面试之后,面试官很容易引导到这些核心技术点的考察上,进入面试者熟练的节奏。
中台服务
"中台服务"你可以先把它理解成:
把多个业务都会用到的通用能力,单独抽出来做成一个统一服务,给不同业务系统复用。
假设公司有这些业务:
订单系统
会员系统
营销系统
消息系统
它们都需要"定时执行任务":
订单系统:30分钟未付款 → 自动取消订单
会员系统:会员到期 → 自动降级
营销系统:晚上 8 点 → 自动开始活动
消息系统:明天上午 10 点 → 给用户发提醒
一种比较原始的做法是,每个业务自己写定时逻辑:
订单服务
└── 自己实现定时任务
会员服务
└── 自己实现定时任务
营销服务
└── 自己实现定时任务
消息服务
└── 自己实现定时任务
这样就会出现很多重复建设:
每个项目都要实现任务调度
每个项目都要考虑任务丢失
每个项目都要考虑重复执行
每个项目都要考虑高并发
每个项目都要做重试、监控、日志
于是可以把"定时能力"单独抽出来:
┌───────────────┐
订单服务 ───────→ │ │
会员服务 ───────→ │ 定时任务中台 │
营销服务 ───────→ │ │
消息服务 ───────→ │ │
└───────────────┘
业务系统只需要告诉它:
什么时候执行
执行什么任务
执行完成后通知谁
比如订单系统发一个任务:
{
"taskId": "order_10001",
"executeAt": "2026-09-03 18:00:00",
"callback": "/order/timeout"
}
定时中台负责:
保存任务
↓
等待执行时间
↓
到点触发
↓
调用订单系统