知识卡片

记录追加避边界

普通读书笔记卡 · 1717.a

内容

GFS 的 record append 不是普通尾部 write:当记录会跨 chunk 边界时,先填充剩余空间并让客户端到下一个 chunk 重试,保证一次记录不会被拆成多个 chunk 操作。发散:接口语义有时要主动限制自由度,才能换来可证明的原子边界。

参考来源

- 位置:《分布式系统与一致性》第2章《Google的文件系统》"2.2.2 租约"及"2.3.1 write和record append的区别"(源文件:_epub-src/OEBPS/Text/chapter6.xhtml) - 结论依据:原文明确当记录跨chunk边界时"它会把chunk剩余的空间填充满……然后再告知客户端这次写入应该在下一个chunk上重试",并总结"这样就保证了record append操作只会在一个chunk上生效,从而避免了文件操作跨越边界被分解成多个chunk操作"。 - 原始内容:首要副本收到写入请求后,会检查把这个record追加到尾部会不会超出chunk的边界,如果超出边界,那么它会把chunk剩余的空间填充满……并且让次要副本做相同的事情,然后再告知客户端这次写入应该在下一个chunk上重试……这样就保证了record append操作只会在一个chunk上生效。