用户切到从区域后读到的是两小时前的图片,主区域已经是新版本。复制指标里待复制对象数一直在涨,最多时 12 万。日志里能对上时间点,这种反而好排。
跨区域复制是异步的,写入主区域成功不代表从区域已经拿到。对象多、单对象大时队列会积压,延迟按分钟甚至小时算。读请求不会等复制完成,自然读到旧版本。这一点先确认清楚,后面就不用反复试。
aws s3api get-bucket-replication --bucket b aws cloudwatch get-metric-statistics --namespace AWS/S3 --metric-name BytesPendingReplication aws s3api head-object --bucket b-replica --key a.jpg
这次卡住的地方就在「跨区域复制延迟」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:用复制指标看待复制对象数和延迟;复制规则加复制时间控制 设分钟级目标;读多写少的场景改为双区域写 别只靠复制;切换前确认目标区域的对象版本和主区域一致。
结果对不对很好判断,待复制对象数回到个位数,从区域 head-object 的 LastModified 与主区域一致。
