![]()
去年Azure亚太区一次区域性故障,某电商平台的静态资源全挂,页面白屏持续了47分钟。事后复盘发现,他们的存储账户只开了本地冗余——主区域一崩,备区数据只能干看着,读不了。
这事在开发者社区传开后,RA-GRS(读取访问异地冗余存储)的搜索量一周涨了340%。但很多人搜完发现,微软文档把配置步骤拆成了7个入口,软删除和版本控制更是藏在"属性"二级菜单里。
容灾不是备份,是"主崩了还能读"
创建存储账户时,大多数人直接点"创建"跳过冗余选项。默认的本地冗余(LRS)只在单数据中心内复制三份数据,机房着火或光缆被挖就全完。
RA-GRS的 trick 在于:数据异步复制到几百公里外的次级区域,且次级副本开放只读权限。主区域挂了,换个 endpoint 就能继续 serving 文件,RTO(恢复时间目标)从小时级压到分钟级。
配置路径藏得深:存储账户 → 设置 → 配置 → 复制 → 选"读取访问异地冗余存储"。页面会弹出主备区域对照表,比如东亚主区对应东南亚备区。注意这个复制是异步的,RPO(恢复点目标)通常在15分钟以内,对静态网站来说可接受。
匿名访问:方便用户,也方便攻击者
静态网站托管必须开匿名访问,否则每个用户请求都要过 Azure AD 鉴权,延迟和成本双双爆炸。但开了之后,整个容器对公网裸奔,扫号器能直接列目录。
微软的折中方案是"容器级匿名访问"。创建容器时命名$web(系统保留名)或自定义如 public,在容器设置里单独开启"Blob 匿名访问"级别。这比账户级全开要收敛攻击面。
一个常见坑:修改匿名访问设置后,CDN 边缘节点可能缓存旧策略。建议配合 Cache-Control 头,把 HTML 设 no-cache,静态资源设长期缓存。否则用户可能看到"允许匿名"的容器突然 403,其实是 CDN 还在用旧令牌。
测试匿名访问别用浏览器直接刷。curl -I 看响应头里的 x-ms-blob-public-access,返回 blob 说明配置生效。浏览器缓存会骗你,curl 不会。
![]()
软删除:21天后悔药,但别当备份用
软删除默认关闭。开启后,删除操作变成"标记删除",数据在后台保留指定天数(建议21天,覆盖一次完整迭代周期)。期间随时可恢复,不计入存储费用——只收标准 Blob 价格。
但软删除有个反直觉的边界:覆盖操作也算"删除"。上传同名文件把旧的顶掉,旧版本进软删除保留池。如果业务逻辑依赖"同名即覆盖"来做更新,21天后会发现历史版本堆积,存储账单暴涨。
查看软删除文件要手动开关:容器概览页 → "显示已删除 Blob"。恢复操作是单个文件粒度,没有批量回滚 API。误删1000个文件?写脚本遍历调用 Undelete 吧,控制台点到你手酸。
更隐蔽的坑:软删除不防存储账户级别的删除。如果管理员手滑删了整个账户,或者订阅被停用,软删除跟着一起蒸发。这是"防手抖"不是"防人祸"。
版本控制:Git 思维入侵对象存储
Blob 版本控制是2020年 GA 的功能,但使用率至今偏低。开启后,每次覆盖或删除自动生成版本快照,保留策略独立配置,默认无限期。
和软删除的区别:软删除是"回收站",版本控制是"Git 历史"。前者管生死,后者管演变。建议两者全开,软删除设21天兜底,版本控制按业务设 30/90/365 天分层。
版本控制的计费模型是"增量存储",只收版本间差异块的钱。但大文件频繁覆盖会产生长尾版本链,List Blobs 接口返回数据量线性增长。某视频站曾因此导致 CDN 回源超时——源站列目录 API 响应从200ms飙到8秒。
版本 ID 是系统生成的 UUID,不支持自定义标签。想按"发布版本"语义管理,得自己建元数据表映射,或者用 Blob 索引标签(另收费)。
配置清单:7个检查点防翻车
![]()
综合微软官方文档和社区踩坑记录,完整配置路径如下:
1. 创建存储账户时,冗余选项必须显式选 RA-GRS,默认 LRS 不会提示风险。
2. 账户创建后,Settings → Configuration → Allow blob anonymous access → Enabled。这是账户级总开关,不开后续容器设置灰色不可选。
3. Data storage → Containers → + Container,命名建议$web(自动映射到根域名)或业务语义名如 assets-2024。
4. 容器创建后,进入 Access policy → Blob anonymous access → Blob(仅读 Blob)或 Container(可列目录)。静态网站通常选 Blob,减少信息泄露。
5. Overview → Properties → Blob service → Blob soft delete → Enable,保留期21天。注意这是服务级设置,对所有容器生效。
6. 同级菜单 Blob versioning → Enable,保留策略按合规要求设。金融类业务常见 7 年,互联网产品 90 天足够。
7. 最后验证:主备 endpoint 分别测试,软删除文件恢复测试,版本历史列表测试。三项全过才能上线。
一个冷知识:RA-GRS 的备区 endpoint 格式是 -secondary.blob.core.windows.net,不是简单的 secondary 子域名。很多开发者故障切换时拼错 URL,白折腾半小时。
微软在2023年Q3把"静态网站托管"功能从 Storage 二级菜单提到了一级导航,但冗余选项、软删除、版本控制这三个关键配置仍然分散在三个不同入口。产品经理解释是"功能正交,不宜聚合"——翻译成人话:历史债务,改不动。
所以这套方案的核心竞争力,可能不在于技术多先进,而在于"知道配置在哪"本身就成了护城河。社区里有人做了 Terraform 模块一键拉起,GitHub 标星3400,Issue 区最常见的问题是:为什么我的备区访问 403?答案通常是:你选的是 GRS 不是 RA-GRS,后者才有读取权限。
现在你的存储账户容灾配置到哪一步了?是只开了本地冗余,还是已经摸过备区 endpoint 的 404?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.