分布式操作系统 - 5.分布式命名管理

news2024/11/25 6:30:28

文章目录

  • 1.基本概念
  • 2.非结构化命名管理
    • 2.1 简单的实体定位方法:广播和多播方法
      • (1)广播方法(broadcast)
      • (2)多播方法(multicast)
      • (3)问题:可伸缩性
    • 2.2 转发指针方法
      • (1)分布式对象迁移原理
      • (2)转发指针的优化策略
    • 2.3 基于原籍的方法
    • 2.4 分布式哈希表(DHT)
      • (1)概念
      • (2)指示表:
      • (3)利用网络邻近的优化策略
    • 2.5 层次方法
  • 3.结构化命名管理
    • 3.1 名字空间
    • 3.2链接 & 挂接
      • (1)链接
      • (2)挂接
      • (3)挂接方法
    • 3.3 名字空间的实现
      • (1)名字空间的分布
      • (2)名字解析的实现
    • 3.4 DNS:英特网域名系统
  • 4.基于属性的命名管理
    • 4.1 基本概念
    • 4.2 分层实现方法:LDAP
      • (1)概念
      • (2)LDAP目录项
      • (3)目录信息树(DIT)
      • (3)使用Host_Name作为RDN
      • (4)LDAP目录服务的实现
      • (5)LDAP目录服务的扩展功能
    • 4.3 非集中式实现方法

1.基本概念

实体(entity):系统中的任何对象

  • 物理资源型:主机、文件、打印机、磁盘
  • 逻辑抽象型:进程、用户、邮箱、新闻组、主页、报文

实体的名字(Name):一个数字位串或字符串,可唯一地表示一个实体

  • 如主机名、文件名、进程名、用户名

命名(Naming):赋予名字

  • 引用(Refer):如果实体X的名字为A,我们说,名字A引用(指向)实体X。

实体访问点(access point):用于访问该实体的接口,也是一个实体

  • 可以有多个访问点
  • 实体可以改变访问点
  • 访问点可以赋值给另一个实体

地址(address):实体访问点的名字,指向(引用)访问点;例如:服务器地址:IP+端口号

位置独立性

  • 实体的名字包含有地址信息,则是位置相关的
  • 实体的名字独立于地址,则是位置独立的

标识符(Identifier):特殊类型的名字

  • 一个标识符最多引用一个实体
  • 每个实体被一个标识符所引用
  • 一个标识符总是引用同一个实体(不准重用)

机器可读的名字:数字位传,如网卡地址

用户友好的名字(human-friendly name):有意义的字符串

实体定位:通过名字,找到实体所在的位置,从而找打实体

  • 名字解析:将名字映射到地址的操作过程

名称到地址的绑定:二元关系组(名字,地址),举例:域名数据库

固定实体:固定位置,实体的位置不会改变

移动实体(mobile entiny):具有可变位置,实体的位置可以改变

位置更新问题

  • 位置改变后,需查找DNS数据库,进行地址更新
  • 地址采用硬链接,如130.37.21.5,更新效率低
  • 地址采用符号链接,ftp.is.vu.nl,查找效率低

传统方法:在名字和地址之间的直接的单级映射

适合移动实体的方法

  • 采用标识符的两级映射
  • 将命名服务与定位服务分离开

在这里插入图片描述

2.非结构化命名管理

名称中不包含任何访问点的信息。例:72550(工作证号)

2.1 简单的实体定位方法:广播和多播方法

(1)广播方法(broadcast)

例: 地址解析协议(ARP ) : 由IP地址找到它的链路地址

在大规模网络环境中, 效率低

(2)多播方法(multicast)

多播组、 多播地址

定位点到点网络中的实体

定位多个实体: 同一组织

定位实体的副本: 最近的副本

(3)问题:可伸缩性

只适用于小规模网络,如局域网络

2.2 转发指针方法

当实体从A移动到B之后,在A上设置一个指向B的引用

优点:客户可利用传统的命名服务

缺点:间址链可能会很长、链的中间节点需要维护转发信息、链容易断

目标:限制链的长度,保证链的鲁棒性

在这里插入图片描述

(1)分布式对象迁移原理

SSP链:(stub存根,scion后代) p a i r s = ( p r o x y , s k e l e t o n ) pairs=(proxy, skeleton) pairs=(proxy,skeleton)

  • proxy:客户存根
  • skeleton:服务器存根

举例:当O从A移动B后,在A上保留原来的proxy,并设立一个代表O的skeleton

在这里插入图片描述

(2)转发指针的优化策略

例:通过在proxy中存储一个捷径(shortcut),重定向转发指针

调整策略:

  • 单独:仅有请求发起人,即初始proxy建立proxy短路
  • 全部:转发链上的所有proxy建立短路

在这里插入图片描述

2.3 基于原籍的方法

可用于大规模网络

原籍(Home)位置:

  • 实体的创建位置
  • 用于跟踪实体的当前位置

举例:移动IP原理

  • 每一个主机有一个固定IP地址
  • 固定IP地址对应一个Home代理
  • 主机移动后的临时地址(care-of转交地址)在它的Home代理上登记
  • 当Home代理收到packet后,转发到转交地址

缺点:

  • 可能会舍近求远;当前位置比原籍近,增加通信开销
  • 固定的原籍位置;无法根据需要改变,如主机已永远移动后

解决方案:将原籍位置记录在传统的名字服务器中

2.4 分布式哈希表(DHT)

(1)概念

散列表(Hash table,也叫哈希表):根据关键码值(key value)而直接进行访问的数据结构

分布式哈希表(DHT)

  • 广域范围中的巨大哈希表,有若干个分布式结点共同维护
  • 散列表被划分成很多块,每个结点被分配一个标识符(id),并称为与id对应的散列块的管理者。

散列表入口项

  • 一个实体的名字或关键字,通过散列(hash)函数,被映射为128位或160位散列值k
  • 键值为k的实体位于大于k的最小标识符(k≤ id)的节点内

Chord系统

  • 结点:具有标识符id
  • 实体:具有键值k
  • k的存储节点 s u c c ( k ) succ(k) succ(k) m i n   { i d ∣ i d ≥ k } min~\{id|id≥k\} min {ididk}

在这里插入图片描述

实体k的查找(线性)

  • 为结点p建立的链表
  • $succ(p+1) $:p的后继节点
  • p r e d ( p ) pred(p) pred(p):p的前驱结点
  • 如果 p r e d ( p ) < k ≤ p pred(p) < k ≤ p pred(p)<kp,则为结点p把自己地址返回给键值为k的进程;否则,只需将该请求转发给两个邻接点。
  • 时间复杂度: O ( N ) O(N) O(N)

(2)指示表:

一种路由表

F T p [ i ] = s u c c ( p + 2 i − 1 ) FT_p[i] = succ(p+2^{i-1}) FTp[i]=succ(p+2i1),第i各实体,指向p后 2 i − 1 2^{i-1} 2i1个结点。

查找键值k,结点p立即把该请求发给p的指示标中索引为j的结点q: q = F T p [ j ] ≤ k ≤ F T p [ j + 1 ] q = FT_p[j] ≤ k ≤ FT_p[j+1] q=FTp[j]kFTp[j+1],j即为下一跳

时间复杂度: O ( l o g ( N ) ) O(log(N)) O(log(N))

新结点p到来:找到 s u c c ( p + 1 ) succ(p+1) succ(p+1)

指示表的更新

  • 检查 F T p [ 1 ] FT_p[1] FTp[1](即 s u c c ( q + 1 ) succ(q+1) succ(q+1))的一致性
  • 确定后继节点的前驱节点是否是自己
  • 后台进程完成

在这里插入图片描述

(3)利用网络邻近的优化策略

跨网路由问题:在解析一个键值时,如通过路径a-b-c。 而a-b, b-c 之间是广域通信。 即, 在因特网中产生多次广域消 息传输。

DHT系统的优化设计:减少因特网中的广域消息传输

考虑底层物理网络的三种设计:

1、基于拓扑的结点表示符赋值

  • 两个邻近结点所赋给的标识符是靠近的
  • 但不适合Chord系统:到因特网映射繁琐、关联失效导致标识符空当

2、邻近路由(proximity routing)

  • 每个结点维护一个转发请求的可选列表。例如,每个结点有r个后继者
  • 当转发请求时,选择离它最近的后继者,减少广域通信
  • 单个结点失效时,可使用其他结点

3、邻近邻居结点选择(proximity neighbor selection)

  • 优化路由表,选择距离最近的结点为邻居结点
  • 对于Chord,Finger表中的每个表项包含r个后继者时,相当于该方法

2.5 层次方法

将一个定位服务分层组织成域(domain)

  • 每个域拥有相关的目录节点
  • 根节点:最顶层的目录结点

叶子域对应于局域网(LAN)

在这里插入图片描述

定位记录:

  • 叶子域目录结点: < 实 体 I D , 当 前 地 址 > <实体ID,当前地址> <ID>
  • 上层域目录结点: < 实 体 I D , 下 层 目 录 结 点 地 址 > <实体ID,下层目录结点地址> <ID>

根节点:

  • 包含域中所有的实体的定位记录

一个实体E可以拥有n个地址A1,A2

  • 每个地址,保存在一个叶子域上,共有n个叶子域
  • 在n个叶子域的最小共同祖先域上,保留n个子域指针

定位记录举例:具有两个地址的实体E的目录信息

  • D1,D2叶子域
  • M最小公共祖先

在这里插入图片描述

查找操作举例:在层次型定位服务中,查找实体E的位置

  • 局部性原则:从最小的域开始,自底向上查找

在这里插入图片描述

插入操纵举例:自下而上的插入方法

在这里插入图片描述

3.结构化命名管理

简单的、可读的名称。例如:ftp.neu.edu.cn(URL地址)

3.1 名字空间

分布式系统中名字集合的组织形式

例:文件目录系统(目录名,文件名)

一个名字空间可表示为带标号的有向图:

  • 叶子节点:命名实体的信息(地址、状态)
  • 目录结点: < 边 标 号 , 结 点 标 识 符 > <边标号,结点标识符> <>,目录表
  • 根节点:只有出边,没有入边。通常只有一个

在这里插入图片描述

路径名:对应于边的标号序列

  • N:<标号1,标号2,…,标号n>
  • 绝对路径名:从根节点开始
  • 相对路径名:从非根节点开始

路径的表示:/home/steen/mbox

名字的种类:

  • 全局名(global),绝对名,适用于整个系统
  • 局部名(local),相对名,与具体目录有关

名字解析(Resolution)

  • 找到名字所对应实体, 进而可访问关于实体的信息

闭合机制(Closure)

  • 知道如何以及从何处开始名字解析
  • 从名字空间中选择开始名字解析的初始节点
  • 例: 02483683113

命名系统

  • 实现命名和名字解析

3.2链接 & 挂接

(1)链接

别名(alias):同一个实体的其他名字

别名的实现方法:链接(link)

  • 硬链接(hard):存储结点标识。用目录结点标识

在这里插入图片描述

  • 符号链接(symbolic):存储路径别名。用叶子节点表示

在这里插入图片描述

(2)挂接

挂接(mount) : 合并两个不同的名字空间

外地名字空间(foreign name space)

在这里插入图片描述

挂载托(mount point):存储外地节点标识符的本地目录节点

挂载件(mounting point):需安装的外地名字空间的目录节点

(3)挂接方法

分布式系统中挂接的实现

  • 访问协议的名字
  • 服务器的名字
  • 外地名字空间中挂接件的名字

名字的表示

  • 例: URL名, 如ftp://ftp.neu.edu.cn//home/pub2/yuge
  • 访问协议: ftp
  • 服务器: ftp.neu.edu.cn
  • 安装点: home/pub2/yuge

使用专门访问协议, 挂接远程名字空间

  • 例: SUN NFS系统,
  • 协议:nfs ; 服务器:flits.cs.vu.nl; 目录:/home/steen

在这里插入图片描述

例: DEC Global Name Service的结构

  • 增加一个新根节点, 形成新的名字空间
  • 建立映射表(子根节点ID, 新名字)

在这里插入图片描述

3.3 名字空间的实现

名字服务:添加、删除和查找名字

名字服务器:实现名字服务的软件系统

名字空间的分布方式:

  • 区域(zone):水平划分
  • 三层结构:垂直划分

(1)名字空间的分布

名字空间的层次:

  • 全局层(global):根节点,稳定不变
  • 行政层(administrational):目录结点,很少改变
  • 管理层(managerial):底层节点,可能会经常改变

区域(zone):

  • 不相交的子空间
  • 每个区设有一个名字服务器,负责本区的名字服务

DNS名字空间的三层划分

在这里插入图片描述

(2)名字解析的实现

名字解析器(NR):客户端执行名字解析程序

迭代式方法:名字解析器从根名字服务器开始, 逐个与名字服务器交互, 实现名字的解析

递归式方法:名字解析器委托根名字服务器, 由各个名字服务器之间交互, 实现名字的解析

在这里插入图片描述

优化:解析中的缓存作用

举例: 递归式名字解析 < n l , v u , c s , f t p > <nl, vu, cs, ftp> <nl,vu,cs,ftp>

在这里插入图片描述

3.4 DNS:英特网域名系统

DNS(domain name system) :

  • Internet中查找主机
  • 和email服务器地址

DNS名字空间

  • 一个带边标号的有向树
  • 根节点: 无入边的节点, 用dot表示
  • 节点: 入边的标识符数为1, 也可作为该节点的名称
  • 域(domain) :一个子树
  • 域名: 从根节点开始的路径名
  • 区域(zone) : 域的划分, 对应一个名字服务器
  • 资源纪录: 节点包含的内容

资源记录

在这里插入图片描述

4.基于属性的命名管理

4.1 基本概念

基于属性的命名:

  • 一个实体拥有一个相关的属性集
  • 例: 一个人, 名字, Alice
  • 用(属性, 值) 来描述实体

目录服务:

  • 基于属性的命名系统
  • 可使用实体的属性查找实体

资源描述框架(RDF) : 描述资源的统一方法

  • <资源, 属性, 属性值>或<主体, 谓语, 客体>
  • 例: <Person, name, Alice>

4.2 分层实现方法:LDAP

(1)概念

轻量级目录访问协议(LDAP)

  • OSI X.500目录服务
  • 国际电信联盟(ITU) 关于目录服务的建议标准

LDAP目录项

  • 目录项: 由多个记录(属性, 值) 组成。
  • 多值属性:用数组或链表表示

目录信息库(DIB)

  • 所有目录项的集合。
  • 相对区分名(RDN) : 命名属性
  • 每个目录项具有全局唯一的记录名: RDN值序列

(2)LDAP目录项

如: /c=NL/O=Vrije University/OU=Comp.Sc.=nl.vu.cs

在这里插入图片描述

(3)目录信息树(DIT)

用于描述目录项集合的层次结构, 命名图

举例: 局部的目录信息树

在这里插入图片描述

(3)使用Host_Name作为RDN

在这里插入图片描述

(4)LDAP目录服务的实现

目录服务代理(DSA) :管理子DIB的服务器

目录用户代理(DUA) :代表用户访问目录

目录访问协议(DAP) :DSA与DUA之间通信

目录系统协议(DSP) :DSA之间通信

应用: .Net, Novel, Oracle

在这里插入图片描述

(5)LDAP目录服务的扩展功能

例: 搜索main server

Answer=search(“&(C=NL)(O=Vrije University)(Ou= * ) (CN=Main server)”)

LDAP森林

  • 允许多个目录树共存并相互链接
  • 全局索引服务器

LDAP分层结构

  • 根节点采用DNS命名系统管理

UDDI:

  • Web 服务中的目录服务

4.3 非集中式实现方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图形API学习工程(30):尝试使用panorama来代替Cubemap作为全景图

工程GIT地址&#xff1a;https://gitee.com/yaksue/yaksue-graphics 前言 为了能得到全方位的光照数据&#xff0c;我之前学习了使用CubeMap作为全景图。CubeMap包含六张贴图对应了上下左右前后六个方向的数据。但是最近在下载全景图的资源时&#xff0c;看到很多并非是CubeM…

Python基于Django的毕业设计论文提交过程管理系统

项目介绍 在各学校的教学过程中&#xff0c;django过程管理系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的django过程管理系统的平台&#xff0c;这…

c#入门-访问基类成员

调用基类构造器 在构建派生类前&#xff0c;会首先构建出完整的基类。 即便是派生类无权访问的成员&#xff0c;也会存在。 因此才能保证派生类能完全地当作基类来使用。 因此&#xff0c;在执行派生类的构造器前&#xff0c;首先需要先调用基类的构造器。 而如果基类没有&am…

017 | 精准扶贫视野下非遗传承的研究与启示——以三峡皮影为例 | 大学生创新训练项目申请书 | 极致技术工厂

&#xff08;一&#xff09;研究目的 百年党建视域下&#xff0c;全面建成小康社会的历史目标已成功达成&#xff0c;但东西部经济发展的不平衡、不平均依旧是新时代发展中亟需解决的问题。坚持党的领导&#xff0c;响应西部大开发的战略号召&#xff0c;本团队深入探访于2018…

S2SH药膳馆会员管理系统计算机专业毕业论文java毕业设计开题报告

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设之S2SH药膳馆会员管理系统-IT实战营_哔哩哔哩_bilibili项目资料网址: http://itzygogogo.com软件下载地址:http://itzygog…

基于jsp+mysql+ssm足球新闻发布网站-计算机毕业设计

项目介绍 同完成整个足球新闻发布系统的设计开发。系统实现的功能主要包括&#xff1a;前台浏览足球新闻的功能&#xff1b;后台用户在成功登录该系统的后台时&#xff0c;可以对用户、足球新闻类别、足球新闻、留言进行添加、修改和删除等功能&#xff1b;以及对用户名密码等…

Arthas(Java 应用诊断利器)

文章目录Arthas使用背景Arthas&#xff08;阿尔萨斯&#xff09;能做什么&#xff1f;Arthas Spring Boot StarterArthas Arthas 是由Alibaba开源的Java监控诊断工具&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情…

Pytorch中的损失函数

L1损失函数&#xff1a;又称&#xff0c;L1 范数损失、最小绝对值偏差&#xff08;LAD&#xff09;、最小绝对值误差&#xff08;LAE&#xff09; MAE也是指L1损失函数。 把目标值 yi 与模型输出&#xff08;估计值&#xff09; f(xi) 做绝对值得到的误差。 通常用于回归任务、…

uniapp实战仿写网易云音乐(二)—promise接口请求的封装和主页功能的实现,组件封装

文章目录前言promise请求接口的封装主入口功能的实现&#xff1a;推荐歌单模块新碟新歌模块精选视频模块最后前言 本篇文章继续完成上篇文章的部分&#xff0c;主要实现prromise接口的封装和首页主入口的实现 promise请求接口的封装 在上篇文章中请求我们是这样写的&#xf…

(详细及解决方法)关于Vue.prototype中定义的变量不是响应式

目录 一、背景 二、原因 三、解决方法 四、扩展 当时第一眼看到下面的图&#xff0c;就想这个不会是写错了吧&#xff0c;咋还能这样写&#xff0c;在这里我承认&#xff0c;我以前说话确实很大声了 一、背景 在项目中需要将全局变量存放到Vue的实例对象上面 Vue.protot…

【历史上的今天】12 月 13 日:时代杂志将“你”评为年度人物;苹果发布 AirPods;互联网传出欧洲

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2022 年 12 月 13 日&#xff0c;国家公祭日。从 2014 年开始&#xff0c;12 月 13 日被定为缅怀先烈的国家公祭日&#xff0c;网站也会在这一天变为全灰色&#xff0c…

墙裂推荐c++的学习网站(OJ)

目录 墙裂推荐OJ 墙裂推荐学习软件 墙裂推荐线上编辑器 墙裂推荐OJ 要想学好c,更好的OJ少不了啊!!! 为了让诸多小白们有更好的学习测试环境,特此准备了一下几个OJ, 1.Openjudge 网站: OpenJudge openjudge网站中储存着大量的题目,而且还提前帮你们把板块分好了,就问你们…

[Java] HashMap是如何实现的?扩容机制是什么?树化机制知道吗?结合源码带你理解HashMap的原理。

文章目录前言HashMap是什么&#xff1f;Map接口散列表&#xff08;HashTable&#xff09;HashMap的扩容机制扩容机制&#xff1f;扩谁的容&#xff1f;HashMap的容量&#xff08;Capacity&#xff09;属性HashMap的扩容因子&#xff08;load factor&#xff09;属性HashMap的树…

【js逆向基础】crypto 之 hash和hmac

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ hash对象创建Hash常见方法例封装成 stream 实例封装成管道流&#xff08;piped stream)2️⃣ hmac对象创建Hmac常见方法例封装成 stream 实例封装成管道流&#xff08;piped stream)&#x1f6ec; 文章小结&#x1f4d6; 参考资…

mysql学习---流程控制函数(条件判断)case when ,if使用

文章目录流程控制函数流程控制函数的介绍流程函数的使用流程控制函数 流程控制函数的介绍 if(value,value1,value2) 解释&#xff1a;如果value的结果为true &#xff0c;返回value1,否则返回value2 例如&#xff1a; select if(1>0,正确,错误) ->正确ifnull(value1,val…

Babel快速入门

一、简介 Babel是一个广泛使用的转码器&#xff0c;可以将ES6代码转为ES5代码&#xff0c;从而在现有环境执行执行。 这意味着&#xff0c;你可以现在就用 ES6 编写程序&#xff0c;而不用担心现有环境是否支持。 二、安装 安装命令行转码工具 Babel提供babel-cli工具&#xff…

Mysql调优(三)——通过索引进行优化、 查询优化

接上&#xff1a;Mysql调优&#xff08;二&#xff09;——schema与数据类型优化、执行计划 本篇文章在一定程度上与下面两篇文章重合&#xff0c;笔者建议优先读下面两篇文章&#xff0c;本文偏向概念&#xff0c;而它们偏向原理&#xff1a; Mysql索引的本质深入浅出&#x…

全栈Jmeter接口测试(五):json提取器元件及jsonpath介绍,响应断言元件

Jmeter(10)&#xff1a;json提取器元件及jsonpath介绍 json提取器元件介绍&#xff1a; json提取器与正则表达式提取器功能类似&#xff0c;也是用来截取响应信息的部分保 存到指定的变量中去&#xff0c;不同的是&#xff0c;它只能用来处理响应正文&#xff0c;并且响应正文…

ITE Super IO 学习 – 串口

串口都算是一个比较古老的功能了,也就是比较成熟了。Super IO中的大部分是硬件已经做好的,BIOS这边只需做小小的改动甚至默认便可以工作了。 串口寄存器 串口有关的寄存器总的来说有4个,两个用来设置IO资源的地址,一个是中断号选择,还有一个特殊配置寄存器。 Seri…

高级路由期末命令配置

文章目录前提要求(1)拓扑图搭建及IP地址规划拓扑图配置&#xff1a;IP地址表规划表1网络连接规划表表2 网络设备明细表表3 IP规划表&#xff08;2&#xff09;OSPF&#xff08;3&#xff09;BGP&#xff08;4&#xff09;路由引入&#xff08;5&#xff09;路由选择&#xff08…