在 B 端心理软件的业务图谱中,并非所有的功能都会面临高并发考验。系统里存在一些调用频次极低、但计算资源消耗较大的冷门功能,例如每半年为各校区生成一次包含多维度图表的年度工作总结 PDF。
这个生成接口通常需要调用无头浏览器(Headless Chrome)在后台渲染 ECharts,然后截图并拼接成几十页的文件。在传统的基于 Spring Boot 或 Node.js 的微服务架构中,为了支持这个功能,需要让包含了 Puppeteer 等庞大依赖的容器常驻在 Kubernetes 集群里。即使在没有请求的静默期,这些容器依然会持续占用几百兆的物理内存和部分 CPU 资源。对于长达数月的低频等待期来说,常驻内存的设计产生了不必要的服务器成本浪费。
为了优化资源分配,我们将这类低频重型任务从主业务中剥离出来,部署到了 Serverless(无服务器架构)平台上,通过云函数(FaaS)来实现计算资源的按需调度。
在平时没有任务触发时,云函数处于休眠状态,不占用任何服务器资源,成本几乎为零。当管理员在期末点击了“下载年度总结”按钮,触发器会捕获这个 HTTP 请求,Serverless 引擎随后在毫秒级时间内分配物理资源,拉起一个执行容器。容器运行几百行 PDF 生成代码、将文件存入 OSS 后,便会被引擎自动回收。整个过程只需为代码实际运行的那几秒钟支付微小的费用,大幅降低了系统的运维和租赁开销。橙星云技术团队在处理同类定时报表业务时,广泛采用了这种按需计费的架构。
当然,Serverless 机制并非没有挑战。最主要的问题在于冷启动延迟:容器在被初次拉起和初始化环境时,会消耗数秒钟时间,这可能会影响用户的等待体验。
为了缓解这一现象,我们可以采用预热(Warm Up)策略。当系统监测到进入了报表生成的高峰月份,可以设置一个定时任务,每隔几分钟向云函数发送一个轻量的探针请求。这个探针能让云函数实例保持活跃状态,避免被引擎回收。当真实的 PDF 生成请求到达时,系统就能直接复用已经启动的环境,实现平滑快速的响应,兼顾了成本控制与接口的响应性能。
