分布式系统概念与设计读书笔记-名字服务

Posted by keys961 on August 17, 2018

1. Overview

名字和标识符:标识资源的东西,“标识符”往往只能由程序处理

  • 纯粹而言,至是一个比特模式
  • 非纯粹而言,可能还包含对象位置信息等其它信息

地址:标识对象的位置而非对象本身(但会重定位,所以不能用于标识对象本身)

解析:名字/标识符被翻译成命名的资源或对象的数据

绑定:名字与对象之间的关联

  • 一般被绑定到对象的属性上,而非对象本身,如DNS将域名映射到主机的属性(IP地址等)

URI, URL, URN:见前几篇解释

2. 名字服务

存储<name, attr>对,并通过name查找attri

如DNS中通过域名(name),查找地址(attr

2.1. Name Space

Name space: 一个服务能识别的所有有效名字的集合

DNS中的名字即“域名”

Alias: 别名,作为另一个名字,被定义代表与名字相同的信息,类似文件系统的符号链接

Naming domain: 命名域,是仅有一个总的管理权利来管理该域中的名字分派问题的名字空间

DNS中的域是域名的集合

组合和定制名字空间:名字可属于不同的名字空间,可以是异构的,且名字空间可以定制

2.2. 名字解析

a) 名字服务器 & 导航

名字服务器:为了保证高可用和性能,需要使用复制。

如DNS规定数据库的任何一个自己都必须复制到2个不会同时失效的服务器上。

导航:从超过一个名字服务器上定位命名数据的过程

对于DNS中,包含2类导航:

  • 迭代导航:客户将名字发送到NS上,试图解析,若有这个名字则返回结果,否则返回建议的另一个NS地址,进一步导航,直到定位成功/失败为止(客户会和多个NS打交道)。替代方案如下(客户端变得只和一个NS打交道):
    • 非递归导航:客户端选中一个NS,试图解析,若有这个名字则返回结果,否则NS作为客户进行迭代/组播导航,最后将结果返回给客户
    • 递归式导航:客户端选中一个NS,试图解析,若有这个名字则返回结果,否则NS作为客户,选中另一个存储了改名字更长前缀的NS2,请求解析,如此递归下去,直到名字被解析为止
  • 组播导航:客户向一组NS组播需要解析的名字以及对象类型,只有包含对应命名的NS才会响应请求。

b) 缓存

名字服务中,客户端和服务端都会维护一个历史解析结果的缓存,以提高性能,同时在某个服务器崩溃下,维护可用性。不过需要及时清理过期的缓存。

3. 目录服务

和名字服务相反,其存储了一组nameattr的绑定,查找基于attr(而名字服务基于name

实例有:X.500, LDAP等

发现服务:自发网络环境下设备提供的服务的目录服务。

一般情况下,目录服务的地址是众所周知,且客户端是预先配置好的;而自发网络环境下,设备会随时加入,这回导致组播导航