Azure Blob存储中并发读取与覆盖写入的机制及一致性问询
Azure Blob存储中并发读取与覆盖写入的机制及一致性问询
我来给你拆解下Azure Blob存储里Put Blob操作的底层逻辑,还有你关心的并发读写一致性问题——毕竟一边持续读、一边后台覆盖更新,最怕的就是中间出现“断档”或者读到脏数据对吧?
首先你完全不用怕“先删原Blob再创建空文件再传新内容”这种情况——Azure Blob的Put Blob操作是原子性的。具体来说,当你用它覆盖现有块Blob时,整个操作是作为一个单一事务完成的:
- 它不会先删除原Blob,也不会先创建一个空占位符
- 新的Blob内容会先被上传到Azure的后台存储节点,等全部内容确认写入成功后,才会原子性地替换掉原Blob的指针。
官方对这个操作的定义也明确了它的覆盖特性:
Put Blob操作会创建新的块、页或追加Blob,或更新现有块Blob的内容。Put Blob操作将覆盖具有相同名称的现有Blob的所有内容。
当你更新现有块Blob时,你将覆盖该Blob上的任何现有元数据。现有Blob的内容将被新Blob的内容覆盖。
这种原子替换的逻辑,就能完美保证你场景下的一致性:
- 如果你在覆盖操作执行的过程中发起读取请求,要么读到完整的原Blob内容,要么读到完整的新Blob内容,绝对不会读到空Blob或者半上传的不完整数据
- 覆盖操作完成后,所有后续的读取请求都会立刻拿到新的内容,不会有新旧内容混读的情况
简单说就是,你的持续读取进程永远不会遇到“Blob消失了”或者“读到半截内容”的尴尬,Azure的原子性替换机制已经把这个问题给兜住了,完全符合你要的“直接覆盖、无间隙”的需求。
备注:内容来源于stack exchange,提问作者GoldieLocks
相关产品推荐
相关产品推荐

