一个程序员独自维护 Healthchecks.io 11 年,定时任务监控做到月收入 2.6 万美元
定时任务监控服务 Healthchecks.io 从 2015 年上线起只有创始人 Pēteris Caune 一个人,官网 2026 年 10 月公布 MRR 2.6 万美元、付费账户 1236 个。按他的博客复盘从 5 美元 MRR 起步、不招人不追大客户的做法和四档定价,并用 Spring Boot 定时任务接上自建的开源版实际跑了一遍。
记录技术探索,分享实践心得。
共 1900 篇文章定时任务监控服务 Healthchecks.io 从 2015 年上线起只有创始人 Pēteris Caune 一个人,官网 2026 年 10 月公布 MRR 2.6 万美元、付费账户 1236 个。按他的博客复盘从 5 美元 MRR 起步、不招人不追大客户的做法和四档定价,并用 Spring Boot 定时任务接上自建的开源版实际跑了一遍。
RabbitMQ 4.4.0 让 quorum queue 原生支持延迟投递,认的是 long 型的 x-opt-delivery-time 头。用 Spring Boot 4.1.1 对 4.4.0 和 4.3.6 跑了六组,classic queue、4.3.6、字符串头和 Spring AMQP 的 setDelayLong 都会让消息立刻送达,而且不报任何错。
async-profiler 4.6 能把 profile 以 OTLP 格式直接 POST 到 HTTP 端点,wall clock 的线程过滤改为按线程名,内置 HTTP 服务器被删掉。在 Spring Boot 4.1.1 应用上接本地接收端实测:默认路径是 /v1development/profiles,不加 -t 时请求体里没有线程名,端点不通时 asprof 退出码为 200。
把一个 Web、JPA、Security、Actuator、Validation 的 Spring Boot 3.5.16 项目升到 4.1.1,每步一个 git 提交:主代码不用改,测试切片和 TestRestTemplate 换了包,@MockBean 已删。4.1.1 的 spring-boot-starter-classic 会带进 spring-boot-grpc-server 却不带 Spring gRPC,CSRF 没关的 Security 应用启动即报 NoClassDefFoundError,4.0.8 没有这个问题,排除该模块即可。换成模块化 starter 时,只引 spring-security-test 会让 @WebMvcTest 里没有 HttpSecurity。
MiniMax 10 月 19 日发布的 M3.1 Flash 在 OpenCode 里限时免费,免登录就能给 Spring Boot 项目写代码;不带 Key 直连 OpenCode 接口会被 FreeTierError 以 403 挡回,要用 API 可走 OpenRouter 的 :free 版本,每天 50 次起。
Spring Boot 4.1.1 实测 SSL bundle 的 reload-on-update:直接覆盖文件、certbot 改软链、Kubernetes Secret 卷切换 ..data,都在 10 秒左右生效。只换证书不换私钥时 Boot 照样重载,HTTPS 握手全部失败;打开 verify-keys 后这次重载被拒,旧证书继续服务。
Stream Gatherers 在 JDK 24 由 JEP 485 定稿。这里用 JDK 27 和 Spring Boot 4.1 跑了 windowFixed、windowSliding、scan 三个内置 gatherer,再用 Gatherer.ofSequential 写了按字段去重和按累计金额切批两个自定义操作,顺带讲清 push 的返回值怎么让流短路、finisher 怎么在流末收尾。
开源发布平台 Ghost 由非营利基金会运营,没有投资人,两位创始人也不持股。截至 2026 年 10 月 19 日,官网显示年化营收 1115 万美元。按官网数据和创始人 John O'Nolan 的自述,看它怎么靠 Kickstarter 起步,用开源免费加托管收费养活全职团队(2024 年时 30 多人),以及现在的四档定价。
在 Spring Boot 4.1.1 项目里写了 17 处不判空的调用,接上 Error Prone 2.50.0 和 NullAway 0.14.2 实测:JSpecify 模式报 12 个错误,Spring API 上直接标 @Nullable 的返回值全部拦下;List.get、System.getProperty、HashMap.put 和 RowMapper 里的 ResultSet.getString 要加 JSpecifyExperimental 才报,Jackson 的 JsonNode.get 始终漏网。JDK 21 上要配 .mvn/jvm.config 和 -XDaddTypeAnnotationsToSymbol=true,编译耗时中位数从 2248 ms 到 4139 ms。
AWS 10 月 15 日让新用户用 GitHub、Google 或 Apple 账号直接注册 SageMaker Studio,领 AWS Free Tier 最多 200 美元额度,官方说多数情况下不用信用卡,中国区域不适用。