About Naming Service:
Name Space (命名空间):在一个特定空间内,某一资源(文件、网页、音乐、图像等)具有全局唯一的标识符URI(名字)。例如,目前的互联网(Internet)就是最大的一个Namespace.
命名的分类:Flat or Hierarchy. 前面的可以用类似于:Hash Code或者C++的某个命名空间内的变量名、类名来举例,命名中不存在目录结构层次信息。后者可以用Unix/ Linux的文件系统来举例,或者Web网页(分布式系统一个最经典的应用)的URL来举例。www.example.org/pageIdentication. 就是一个Hierarchy的例子去获取资源(网页html文件)的例子。
Naming Service v.s. Directory Service:
命名服务可以理解类似于HashTable的<K,V> pair的方式去查找调用资源的。Key就是名字,Value则是资源。命名服务是利用key去get到value的。那么目录服务则是通过描述这项资源,来得到对应的名字来调用这项服务。
通常命名服务成为白页服务而目录服务成为黄页服务。利用用户需要使用电话号码:020-5559980,但是必须通过这个电话的用户名(名字)才能使用。于是他通过目录服务寻找到这个电话的用户名是Joe,接着便用命名服务调用对应的资源。
Youtube Naming Service Example (Flat):
Youtube对于自己的系统内的视频使用Flat命名的方式命名资源。如果仔细留意Youtube视频的地址,可以发现:https://www.youtube.com/watch?v=Dkj5_7FeY5A 后面的v = "xxx". 其中"xxx"是这个视频的HashCode,是全局唯一的哈希码。所有的视频的http地址前部都是都是一致的:“https://www.youtube.com/watch?v=”。
DNS Example (Hierarchy):
而我们目前常使用的http网址则是一个经典的层次式命名例子。下面这幅图很好地解释了这样的层次式命名的好处:
(下面描述部分摘自:https://www.zhihu.com/question/34873227)
昨天,Chrome先生的老板给了他一个URL地址“joe.heinz.cmu.edu”,并对他说:“去吧,Chrome!”
首先,Chrome会检查URL是否合法,恩,如果是合法的话,Chrome就要想办法找出这个URL对应的IP地址了。
1)查找本地的host文件
一般的浏览器记录之前访问过的URL的IP地址,以便之后重复访问时加快转换速度。如果在这里找不到,转到第二步。
2)访问Local Name Server
把URL发送给Local Name Server,看看Local Name Server是否知道,如果Local Name Server也不知道的话,剩下的工作便是Local Name Server去完成的了。总之Local Name Server负责帮Chrome需要的具体的IP地址找到。那怎么找呢?
这时候,Hierarchy的优点就体现出来了。它能使其它的Name Server能“各司其职”。
3)Local Name Server访问Root Name Server
Root Name Server,顾名思义,记录Root Name,也就是最高级的域名。高级的域名越是靠后。于是Root Name Server找到了cmu.edu对应的域名服务器的IP地址。但它肯定不可能知道joe.heinz这个低级一点的域名的具体IP的,所以Local Name Server还要去查询cmu.edu的域名服务器。
4)Local Name Server访问对应的域名服务器直到直到整个URL对应的IP地址,再返回给Chrome.
正是由于层次的地址结构,使得每一个域名服务器不必存过多的映射数据。使得统一的、最大的命名空间(www,万维网)成为了可能。
常见的命名/ 目录服务:
LDAP (Directory),File System (Naming), DNS (Naming)等等... 我们最常见的是File System和DNS.
什么是JDNI(Java Naming and Directory Interface):
这是Java对各种命名/ 目录服务的抽象接口。用Java的代码使用各种命名/ 目录服务的时候,可以统一用这个接口的方法(operations)去调用各个服务提供商所提供的实现代码。
常见的operations有: