#882 1983 · USC Information Sciences Institute (Paul Mockapetris) · Computer networking
ARPANET 上每台计算机都活在一个手改的文件里——直到命名权被下放
问题
每台主机都写进一张由一家机构维护的全局表,更新的负荷已经逼近可管理的极限
背景
直到 1980 年代初,ARPANET 上的每台主机都在 SRI 的网络信息中心(NIC)登记,列进一张全局表——放在 SRI 一台主机上的 HOSTS.TXT 文件。站点管理员向 NIC 要一个名字,工作人员改一下文件,网上每台机器定期把整份文件下载一遍。Mockapetris 本人 1983 年的备忘录一句话就点破了这个死结:这张表的规模,尤其是它的更新频率,已经逼近可管理的极限。
直觉的修法是给中心扩容——多雇人、加快分发、搞个更大的 NIC。Paul Mockapetris 在 USC 信息科学研究所 Jon Postel 的小组里,却走了另一条路:与其让中间层更强,他于 1983 年 11 月发布 RFC 882 和 RFC 883,提议中间层干脆别再握着数据。
换别人会怎么做
给注册中心本身扩容:在 NIC 多雇人、让文件编辑自动化、把 HOSTS.TXT 发得更快更勤。每一种变体都让整份目录留在同一个地方、同一支团队手里,于是每多一台主机,就还是给同一个中心添一份活——网络变大多少,瓶颈变坏就多快。
他们看到了什么
瓶颈不是数据,而是它的归属:一份必须由一家机构编辑的目录长不大。于是编辑权被移交给早已存在的那批机构,中心只留下一张「该问谁」的地图。
那一手
Mockapetris 把域名系统(DNS)设计成一棵按区下放的树:中心只回答一个问题——树的这一部分由谁知道——而每家机构在自己划定的区里管命名。名字共用同一个顶级后缀,权限沿行政边界切开,答案带存活时间(TTL)缓存,于是系统始终很快,却没有哪一个站点握着或更新整份目录。
为什么管用
下放把全局一致性问题拆成许多小的局部问题:每个区的所有者不用问任何人,就能立刻更新自己的名字,系统其余部分只需要知道该去哪儿问。带过期时间的缓存让重复查询几乎免费,同时容忍分发带来的一时不一致。中心的工作量从此不再随网络增长——它只回答「谁知道」,这个问题的大小是固定的,跟有多少台主机无关。
值了多少
DNS 取代了 HOSTS.TXT,1986 年成为最初的互联网标准之一,直到今天,整个万维网仍然靠 1983 年这份设计解析。
什么时候会失灵
下放权限只有在你沿之切分的边界真实且稳定时才管用——在机构会变动的边界上切区,换来的是争夺归属,而不是扩容。它也牺牲了全局原子更新:系统是最终一致的,任何需要全世界在同一瞬看到一个变化的东西,都得架在它上面,而不是装进它里面。而且总得有某个谁来守着根和它的信任——中心变小了,却没有消失。
后来呢
RFC 882/883 是罕见的、主题超越了它为之而写的网络的设计文档:互联网放大了当年谁也无法预料的量级,而这份目录从未需要重建——因为中心那头从来没有人需要去维护它。把下放当成架构,成了互联网增长的方式:靠把手里的权威交出去来解决协调问题,而不是靠把注册表做大。
资料来源
- [1]RFC 882 — Domain Names: Concepts and FacilitiesRFC Editor, 1983rfc-editor.org
- [2]Internet Hall of Fame — Paul Mockapetris (documents the HOSTS.TXT bottleneck and DNS adoption)Internet Society, 2012internethalloffame.org