分布式系统概念和设计——命名服务设计和落地经验

分布式系统概念和设计

通过命名服务,客户进程可以根据名字获取资源或对象的地址等属性。
被命名的实体可以是多种类型,并且可由不同的服务管理。

命名服务

命名是一个分布式系统中的非常基础的问题,名字在分布式系统中代表了广泛的资源,名字方便了通信与资源共享。
在计算机系统需对资源进行访问的情况下就需要名字。

  • 名字,地址和其它属性

    • 任何请求一个资源的进程必须拥有该资源的名字或标识,例如文件名/etc/passwd
    • 选择标识的一个重要指标是软件存储与查询标识的效率
    • 与名字完全相反的是对象的地址,改值识别了对象的位置而不是对象本身,地址通常可以访问对象,但是对象有时候会被重定位,地址并不足以作为标识的方法
    • 当一个名字被翻译成被命名的资源或对象数据,称一个名字被解析,解析名字的目的通常是为了在对象上调用的一个动作。
    • 名称和对象之间的关系称为绑定
  • 在这里插入图片描述

  • 名字与服务

    • 分布式系统使用的许多名字专用于特定的服务,客户使用名字请求特定服务在被命名的对象或资源上执行某个操作
    • 例如:删除一个文件,需要将文件名传送给文件服务;如果需要向特定进程发送信号,该进程的标识会被传送到进程管理服务
    • 在基于对象的中间件中,名字指向提供了服务或应用的远程对象,考虑到全球范围内对命名服务的需求,因为命名服务必须是能够理解的
  • 统一资源标识符

    识别web资源的主要方法,主要特性是对无限的web资源具有可伸缩性,是资源访问的高效句柄。不足之处是如果一个web资源被移动或者删除,会发生404,悬挂链接,也就是资源未找到

    URL (Uniform Resource Locator) 和 URI (Uniform Resource Identifier) 都是用于标识互联网上某个资源的字符串。它们的主要区别在于范围和含义。

    URI 是一个字符序列,用于唯一地标识某个抽象或物理资源。URI 有两种形式:URL 和 URN (Uniform Resource Name)。URL 是 URI 的子集,它指定了资源的位置和访问方式。例如:https://www.example.com/index.html 就是一个 URL,其中 https 表示协议,www.example.com 是主机名,index.html 是文件名。

    相比之下,URI 是更通用的概念,因为它可以标识任何类型的资源,包括但不限于互联网上的资源。比如,一个 urn:isbn:978-1-491-90005-6 就是一个 URN,它标识了一本书的国际标准书号(ISBN)。

    因此,URL 是一个特殊的 URI,用于定位互联网上的资源,并且包含标识该资源所需的信息。而 URI 则是更广泛的概念,用于标识各种类型的资源,包括但不限于互联网上的资源。

命名服务和域名系统

  • 一个命名服务存储了一个或多个命名上下文——有关用户,计算机,服务以及远程对象等对象的文本名字与属性之间的绑定的集合
  • 命名服务支持的主要操作是名字解析——根据一个给定的名字查询相应的属性
  • 其他操作如生成新的绑定,删除绑定,列表绑定的名字以及增删上下文
名字管理从其他服务中分离出来的主要原因在于分布式系统的开放性:
  • 一致性:不同服务管理的资源使用相同的命名机制带来的方便,URL是一个很好的例子。
  • 集成性:在分布式系统中并不总能预测共享的范围。如果在不同管理域中创建的资源,如果没有一个公共的命名服务,管理域会使用完全不同的命名约定
通用命名服务的需求
  • 最初设计的简单用来满足名字与单个管理域中的地址绑定的需求,而单个管理域对应于单个LAN/WAN,然而国际互联和分布式系统的不断扩展带来了一个更大的映射问题
  • Grapevine
    • 处理任意数量的名字,为任意数量的管理组织提供服务:系统尤其需要能处理全世界计算机用户的电子邮件地址
    • 长生命周期:在生命周期中,名字集组织,实现服务的组件都会发生变化
    • 高可用性:很多系统依赖命名服务,命名服务一旦崩溃,系统无法工作
    • 故障隔离:局部故障不会带来整个服务的崩溃
    • 不信任零容忍:一个大的开放系统很难拥有被系统中所有客户都信任的组件
  • Globe命名服务和handle系统都将目标集中于命名服务在大规模对象情况下的可伸缩性
    • 提供服务能力需要极大的依赖于名字数据的复制与缓存
名字空间

一个名字空间是一个特定服务所能识别的有效名字的集合,所谓的有效就是服务将试图查询之,即使该名字并不对应于任何对象——未绑定

名字空间需要预发定义,需计算机的DNS能够接收可解释的方式

  • 在unix文件系统中,名字有一个内部结构标识它们在层次型名字空间中的位置,层次型名字空间最重要的好处在于名字的每个部分总是相对独立的上下文进行解析,而相同的名字在不同的上下文中有不同的含义。比如(/etc/passwd和/usr/passwd),不同的上下文解析不同的目的
别名

一个方便的名字代替一个更加复杂的名字的设计需求,DNS允许的别名使用方法是,定义一个域名来表示另一个。提供别名的原因是为了提供透明性。

命名域

仅仅通过一个总的管理权威管理有关该域中的名字指派问题的名字空间,该权威机构完全控制哪些名字可以被绑定到域中,也可以将这个任务委托。

  • DNS的域名域名的集合。
    • 语法上,一个域的名字是该域中所有域名的公共后缀,除了公共后缀这个特点,域名很难与其他名字如计算机名区分开。
    • yahoo.com是域yahoo.com中的一台web服务器
    • 域的管理可以被移动到子域中进行管理
组合与定制名字空间
  • DNS提供了一个全局的,同构的名字空间,在DNS上,无论是哪台计算机上的哪个进程查询,同一个名字总是指向同一个实体。
  • 某些命名服务允许不同的名字空间——甚至是异构的名字空间嵌入其中
  • 有些是定制化的,满足用户甚至进程的需要
  • 合并:在unix与nfs中安装文件系统的实践提供了个名字空间的一部分被方便的嵌入到另一个空间的实例,考虑如何合并两个或多个完整的unix文件系统,这两个系统分别在不同的计算机上,每台计算机都有自己的根,具有重叠的文件名。

    • 合并过程最明显的方法是用一个超级根代替原来每台计算机上的根,然后将每台计算机的文件系统安装到该超级根目录下,带来根的兼容性问题
  • 异构性:分布式计算环境(DCE)的名字空间允许嵌入异构名字空间,DCE名字包含结合点,和unix中的安装点类似

    • 在这里插入图片描述
  • 定制:用户偏爱于构造自己的名字空间,另一个动机是同一个名字在不同的计算机上可以指向不同的文件

命名解析

名字解析通常是一个迭代的过程,通过该过程,名字被反复地发送到命名上下文。

一个命名上下文或者直接地将一个给定的名字映射到一组简单属性中。

或者将之映射到一个更深的命名上下文中,同时将一个派生名送到该上下文。

  • 在解析一个名字,该名字首先被送到某个初始命名上下文中,随着更深的命名上下文以及派生名的输出,解析过程不断进行。
  • 解析过程的另一个迭代特性是别名的使用
    • 例如当请求DNS服务器解析,服务器首先将该别名解析到另一个域名,然后这个域名进一步解析到一个IP地址
    • 别名的使用可能会导致名字空间带有循环,这种解析会发生死循环,需要处理阈值放弃解析和管理禁用处理
命名服务器和导航
  • 诸如DNS这样的命名服务,存储一个巨大的数据库,并由众多用户访问,通常不会将所有的名字信息放在单个服务器上
  • 如果只使用一台服务器存放名字信息,那么这台服务器会成为一个瓶颈以及故障的临界点
  • 任何重负载的命名服务都应该使用复制提高可用性,在DNS规定数据库的任何一个子集都必须复制到至少两个不会同时失效的服务器
缓存
  • 在DNS以及其它命名服务中,客户端的名字解析软件以及服务器维护了一个以往名字解析结果的缓存
  • 当客户发出一个名字查询请求时,客户的名字解析软件就查询它的缓存,最近访问原则。
  • 缓存也是命名服务的性能关键,即时在命名服务器崩溃的时候,缓存也可以帮助维护命名服务网的可用性。
  • 作用非常清晰:即通过约定与命名服务器的通信时间提高响应速度。
  • 也有可能在缓存中的数据解析得到的数据是过时的数据,这个需要单独处理缓存最新数据一致性的问题,back write.
  • 回写:回写机制设计的主要目的是确保缓存中的数据与主存中的数据保持一致性。当缓存中的数据被修改后,这些数据并不会立即写回到主存中,而是在缓存中暂时保存。为了确保数据的一致性,缓存需要根据一定的策略将修改过的数据周期性地或在特定条件下回写到主存中,从而保证缓存中的数据与主存中的数据的一致性。
域名系统

在这里插入图片描述

目录服务和发现服务

目录服务

存储了一组名字和属性的绑定,条目的查询基于属性规范。

有时也是基于属性的命名服务

发现服务

发现服务是一种目录服务,注册了自发网络环境下提供的服务。

在自发网络中,设备倾向于在不发出警告,未做管理预备工作的情况下接入网络。

自发网络的目标是客户于服务的集合可以动态改变,并且无需用户干预即可集成。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业官方网站怎么申请?

在数字化时代,企业官方网站是展示企业形象、宣传产品和服务的重要窗口。那么,企业官方网站怎么申请呢?下面是一些简单的步骤。 1、选择合适的网站建设平台 目前市面上有许多网站建设平台,企业需要根据自己的需求和预算选择适合自…

公司新来个卷王,让人崩溃...

最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的软件测试技术栈,非常珍贵&#x…

电力系统储能调峰、调频模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

算法修炼之练气篇——练气二十一层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

程序员面试金典16.*

文章目录 16.01 交换数字16.02单词频率16.03交点16.04 井字游戏16.05 阶乘尾数16.06 最小差16.07 最大数值16.08 整数的英文表示16.09 运算16.10 生存人数16.11 跳水板16.13 平分正方形16.14 最佳直线(待定)16.15珠玑妙算16.16部分排序16.17连续数列16.1…

10:00面试,10:04就出来了 ,问的实在是太...

从外包出来,没想到竟然死在了另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以我也就忍了。没想到12月一纸通知,所有人都不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个…

OpenPCDet系列 | 6.PointPillars模型分类、回归、角度损失的构建

文章目录 模型损失计算1. 分类损失构建1.1 分类损失函数:SigmoidFocalClassificationLoss 2. 回归损失构建2.1 回归损失函数:WeightedSmoothL1Loss 3. 角度损失构建3.1 角度损失函数:WeightedCrossEntropyLoss 4. 总结 模型损失计算 在进行a…

如何判断CRM软件的好坏?2023年CRM系统排行榜前三名是什么?

CRM客户管理系统经过20余年的发展,收获了越来越多企业的认可,成为企业数字化转型必不可少的一环。很多企业都有上线CRM软件的计划,但精准的找到一款适合自身的产品十分不易,今天我们就来盘点2023年CRM软件排行榜。 一、CRM的含义…

【跟着陈七一起学C语言】今天总结:初识C语言

友情链接:专栏地址 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的错误&#x…

Speech and Language Processing之word2vec

1、介绍 事实证明,在每一个NLP任务中,密集向量都比稀疏向量工作得更好。虽然我们不能完全理解其中的所有原因,但我们有一些直觉。首先,密集向量可以更成功地作为特征包含在机器学习系统中;例如,如果我们使用100维…

如何高清视频录制?您只需要这样操作!

案例:如何录制画质高清的视频? 【我录制了一个视频课程,上传到网上,但是我录制的视频画质不好,影响观感。有没有支持高清录制的录屏工具?有没有小伙伴可以推荐一下!在线等!】 无论…

BM61-矩阵最长递增路径

题目 给定一个 n 行 m 列矩阵 matrix ,矩阵内所有数均为非负整数。 你需要在矩阵中找到一条最长路径,使这条路径上的元素是递增的。并输出这条最长路径的长度。 这个路径必须满足以下条件: 对于每个单元格,你可以往上&#xff…

数组的应用

数组的应用 一、数组的定义二、切片替换删除数值元素 二、数组追加元素三、数组与函数相结合 一、数组的定义 相当于一串数据的集合,以空格相间隔的字符串列表,两边用括号括起来 echo ${shuzu[]}中的代表着显示所有的下标内容,当然&#…

【C++】关联式容器——mapset的使用

文章目录 1.关联式容器和键值对1. 关联式容器2. 键值对 2. 树形结构的关联式容器——set1. 模版参数列表2. 默认成员函数3. 迭代器4.容量相关操作5.modify6.其他操作接口 3. 树形结构的关联式容器——map1. 默认成员函数2. 迭代器3. 容量与数据访问4.数据修改5. 其他操作接口 1…

初识C语言

1. 初识C语言 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。 C语言是一门面向过程的计算机编程语言&#xff0c;它与C,Java等面向对象的编程语言有所不同。 第一个C语言程序&#xff1a; #include<stdio.h>int main(void) {printf("hello worl…

MyBatis基础知识点总结

MyBatis了解 MyBatis 是什么&#xff1f; MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和Java的 POJO&#x…

JVM-内存结构

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;JVM &#x1f96d;本文内容&…

Mybatis一级缓存详解

目录 一级缓存 一级缓存的组织 一级缓存的生命周期 一级缓存的工作流程 Cache接口的设计以及CacheKey的定义 一级缓存的性能分析 一级缓存与Spring 事务一级缓存存在的弊端 官方文档分析 Spring通过Mybatis调用数据库的过程 一级缓存 对于会话&#xff08;Session&am…

chanmama响应数据解析

0x00目标url aHR0cHM6Ly93d3cuY2hhbm1hbWEuY29tL2F1dGhvckRldGFpbC85OTI0MjExODcxOC9wcm9tb3Rpb24 0x01接口分析 简单的get 但是返回数据被加密了 这里我们就来想想怎么解密这些数据。首先后端发来的数据是加密的&#xff0c;但是我们在前端看到的可不是加密后的数据。前端…

什么是零拷贝?

零拷贝 什么是零拷贝 零拷贝指的是&#xff0c;从一个存储区域到另一个存储区域的copy任务无需CPU参与就可完成。零拷贝的底层是 通过DMA总线技术实现的。零拷贝与具体的编程语言无关&#xff0c;完全依赖于OS&#xff0c;OS支持就可使用&#xff0c;不支持 设置了也不起作用…