云上静态网站的省钱做法:OBS+CDN+函数计算的分工与取舍
很多静态网站并不需要一台长期开机的服务器。本文讨论一种常见的分工:对象存储负责存放静态文件,CDN负责就近分发,函数计算只处理少量动态请求。理解三者的边界,比一开始就把所有功能塞进一台服务器更重要。
一、基本分工
对象存储(以华为云 OBS 为例)适合存放 HTML、CSS、JavaScript、图片等不经常变化的文件。它的优势是按量计费、容量弹性大,不需要自己维护操作系统和 Web 服务进程。
CDN 则站在用户和源站之间。用户第一次访问时从就近节点获取内容,之后相同内容可以直接命中缓存,从而降低源站压力,也减少跨地域访问的延迟。
函数计算适合处理表单提交、简单的接口代理、生成动态页面片段等短时任务。它按调用次数和执行时间计费,没有请求时不产生持续的计算费用,适合低频、突发性的动态需求。
三者的请求链路可以概括为:用户 -> CDN 节点 ->(缓存未命中时)对象存储或函数 -> 返回结果。
二、缓存是省钱的关键
静态资源和动态请求要分开对待:
- 图片、样式、脚本等带版本号或内容哈希的文件,可以设置较长的缓存时间;文件更新时改文件名或哈希,旧缓存自然失效。
- 首页、列表页等经常变化的页面,缓存时间宜短,或者只缓存几分钟,避免用户看到过期内容。
- 需要登录态、个性化结果的接口不要走 CDN 缓存,或者只做私有缓存,否则容易出现串号、看到他人数据的风险。
一个常见的误区是把所有路径都缓存很久,结果是省了流量,却多花了排查过期内容的时间。先区分“可公开缓存、短时缓存、不能缓存”三类,再逐类设置规则。
三、成本来自哪里
静态网站的主要成本通常包括四部分:存储量、CDN 流量与请求数、函数调用与执行时长、域名与证书等固定支出。评估时可以先回答三个问题:页面总大小是多少、月访问量大概是多少、动态请求占多大比例。
如果访问量很低,长期运行一台服务器往往不划算,因为服务器费用与访问量无关;而对象存储加 CDN 的费用随访问量变化,起步成本更低。反过来,如果动态逻辑很重、每次请求都要做复杂计算,函数按次计费也可能高于一台利用率很高的服务器,这时需要实际测算,而不是凭感觉选择。
四、容易踩的坑
- 把动态接口和静态资源放在同一个缓存规则下,导致登录后页面错乱。
- 只关注单价,忽略回源流量、请求次数和函数冷启动带来的延迟。
- 图片未经压缩就直接上线,页面体积翻倍,CDN 流量随之上升。
- 没有设置对象存储的访问控制,公开桶被意外访问或被盗链。
对应的做法是:动静分离、按路径设置缓存、图片按需压缩和按尺寸裁剪、默认私有并只开放必要的读取权限。
五、上线前检查清单
- 静态资源是否都走了 CDN,源站是否只接受 CDN 回源。
- 缓存规则是否按文件类型和路径区分。
- 表单、搜索等动态入口是否有超时、重试和错误提示。
- 是否开启了访问日志,出现异常流量时能否定位到具体路径。
- 证书是否正常,HTTP 是否按需跳转到 HTTPS。
结语
对大多数内容型静态网站来说,先用对象存储加 CDN 解决“给所有人看”的部分,再用函数计算解决“偶尔需要算一下”的部分,是一种成本和复杂度都比较可控的起点。等到访问量、动态需求或团队规模明显变化时,再考虑引入更重的架构,而不是一开始就为还不存在的规模付费。
- 点赞
- 收藏
- 关注作者
评论(0)