系统模型
- 系统模型
- 简介(概念)
- 物理模型(概念)
- 体系结构模型
- 体系结构元素
- 通信实体
- 对象
- 组件
- Web服务
- 通信范式
- 进程间通信
- 远程调用
- 请求-应答协议
- 间接通信
- 角色和责任
- 客户 - 服务器(CS)
- 对等体系结构(P2P)
- 放置(部署)
- 系统结构模式
- 重点思想:分层:
- 功能分解
- 一些关键技术
- 基础模型
简介(概念)
分布式系统的三个重要且互补的解释方法:
-
物理模型:
考虑组成系统的计算机和设计的类型以及他们的互连,不涉及特定的技术细节
-
体系结构模型:
从系统的计算元素执行的计算和通信任务方面来描述系统
计算元素指单机或通过网络互联的多机集合。
-
基础模型:
采用抽象的观点描述大多数分布式系统面临的单个问题的解决方案
而分布式系统存在三个问题:
- 没有全局时间,不同机器上的时钟未必给出相同的时间
- 进程间的通信是通过消息完成的
- 计算机网络上的消息通信会受到延迟的影响,遇到多种故障,对安全方面的攻击很脆弱
这些问题则通过以下模型论述:
-
交互模型:
考虑系统元素之间通信的结构和顺序
处理分布式系统的性能问题并解决分布式系统中设置时间约束的困难
-
故障模型:
考虑一个系统能不能正确操作的方式
试图给出进程和通信通道故障的一个精确的规约
定义可靠的通信和正确的进程
-
安全模型:
考虑如何保护系统使其不受到不正确操作的干扰,防止被窃取数据
讨论对进程和通信通道的各种可能的威胁,引入了安全通道的概念(安全通道能保证在上述威胁下的通信安全)
分布式系统的困难和威胁:
- 使用模式的多样性:系统组件会承受各种工作负载,有些部分可能断线或连接不稳定
- 系统环境的多样性:系统必须能容纳异构的硬件,操作系统和网络
- 内部问题:非同步的始终,冲突的数据更新,各种软硬件故障模式
- 外部威胁:对数据完整性、保密性的攻击,服务拒绝攻击
物理模型(概念)
- 基线物理模型:一组可拓展的计算机结点,这些结点通过计算机网络相互连接进行所需的消息传递
三代分布式系统
-
早期的分布式系统:通过局域网互联的10-100个结点组成,与互联网的连接有限,支持很少量的服务
单个系统大部分是同构的
-
互联网规模的分布式系统:一个可拓展的结点集合,通过一个“网络(企业内部网)的网络”(互联网)相互连接
包含大量结点
为全球化组织提供分布式系统服务、跨组织提供分布式系统服务
异构性突出
开放标准和相关中间件技术重要性不断增加,采用额外的服务提供端到端的服务质量特性
-
当代的分布式系统:
移动计算——导致结点可以从一个位置移动到另一个位置,导致对诸如服务发现(服务发现,即消费端自动发现服务之地列表的能力)这样的新增功能的需要和对自发互操作的支持
无处不在计算——导致体系结构从分立结点转向计算机被嵌入到日常物品和环境中(智能设备)
云计算,集群体系结构的出现——导致从自治结点完成任务转向一组结点一起提供一个给定的服务
最终出现异构性很大增加的物理体系结构,这些系统部署不断增加的不同的网络服务,提供广泛的应用服务,涉及成百上千结点
体系结构模型
体系结构元素
通信实体
在一个分布式系统中通信的实体通常是进程
但一些原始环境中(如传感器网络),操作系统可能不支持进程抽象,此时是结点
在大多数分布式系统环境中,用线程补充进程,所以严格来说通信末端是线程
对象
在分布式面向对象的方法中,一个计算由若干个交互的对象组成,这些对象代表分解问题的自然单元
对象通过接口被访问,通过IDL(接口定义语言)来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流(定义在一个对象上的方法的规约)
组件
组件类似于对象,为构造分布式系统提供面对问题的抽象(比对象更高级的抽象),也是通过接口访问
组件不仅指定其接口而且给出关于其他组件/接口的假设,其他组件/接口是组件完成其功能必须有的,也就是说组件使得所有依赖显式化了,为系统的构造提供一个更完整的合约
这个合约化的方法鼓励和促进第三方开发组件,也通过去除隐含的依赖提升了一个更纯粹的组合化方法来构建分布式系统
Web服务
也是采取基于行为封装和通过接口访问的方法。但是利用Web标准表示和发现服务。(被集成到了万维网上)。
通信范式
进程间通信
常见的非分布式系统中进程间通信方式
- 管道pipe
- 命名管道FIFO
- 消息队列MessageQueue。
- 共享存储SharedMemory
- 信号量Semaphore
- 套接字Socket:套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信(其中一台上面运行服务端程序,另一端运行客户端程序,客户端程序的IP地址改为服务端的机器IP,两个机器在同一个路由器下面,能够被分配IP就行了)
- 信号 (Signal )
但是现在考虑的是分布式系统中实体的通信
而这里的进程间通信指的是用于分布式系统进程之间通信的相对底层的支持。
包括:消息传递原语、直接访问由互联网协议提供的API(Socket编程)、对多播通信的支持
重点掌握Socket编程技术,详见《四、分布式架构基础》.
远程调用
分布式系统中最常见的通信范式
请求-应答协议
该协议基于三个通信原语:doOperation getRequest sendReply
底层的请求-应答交换支持两种方法
- 远程过程调用(RPC)
- 客户端(Client):服务调用方
- 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端
- 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
- 服务端(Server):服务的真正提供者
- Network Service:底层传输,可以是 TCP 或 HTTP
RPC中通过网络服务协议向远程主机发送请求,请求包含了一个参数集和一个文本值,通常形成“classname.methodname(参数集)”的形式。RPC远程主机就去搜索与之相匹配的类和方法,找到后就执行方法并把结果编码,通过网络协议发回。
RPC是网络服务协议,与操作系统和语言无关。
(网上声称python有自带rpc demo,反正我没找到,自己尝试实现的时候Client端报错OSError: unsupported XML-RPC protocol,有遇到过的友友教教我/哭)
-
远程方法调用(RMI )
(RMI 用于不同虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主机上)
非常类似于RPC,但应用于分布式对象的环境
RMI 能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。是 Java 领域创建分布式应用的技术基石
RMI中通过在客户端的Stub对象作为远程接口进行远程方法的调用。客户端只有接口,并没有实现类,因此,客户端获得的接口方法返回值实际上是通过网络从服务器端获取的
服务器端的网络服务类称为skeleton,它会真正调用服务器端的对象,获取结果,然后把结果通过网络传递给客户端。整个过程由RMI底层负责实现序列化和反序列化
间接通信
上述技术共同点:通信代表发送者和接收者之间的双向关系,大多数情况下双方必须同时存在
间接通信则通过第三个实体在发送者和接收者之间进行深度解耦合
- 发送者不需要知道他们发送给谁(空间解耦合)
- 发送者和接收者不需要同时存在(时间解耦合)
间接通信关键技术:
-
组通信:
组通信依赖组抽象,一个组在系统中用一个组标识符表示。
接收方加入组,选择性接收发送到组的消息。
发送者通过组标识符发送消息给组
-
发布 - 订阅系统:
共享同一个关键的中间服务,确保生产者信息被路由到消费者
-
消息队列:
发布 - 订阅系统提供一对多风格的通信,消息队列提供了点对点服务
其中生产者进程能发送消息到一个指定的队列,消费者进程能从队列中接收消息
队列是生产者和消费者进程的中介
-
元组空间:
提供进一步的间接通信服务,支持进程把任意结构化数据项(元组)放到一个持久的元组空间,其他进程可以指定模式在元组空间读或删除元组
因为元组空间是持久的,读操作者和写操作者不需要同时存在。
也被称为生成通信
-
分布式共享内存(DSM):
系统提供一种抽象,用于支持在不共享物理内存的进程间共享数据。
必须确保及时的方式提供副本,也必须处理于数据同步和一致性相关的问题。
角色和责任
客户 - 服务器(CS)
进程扮演着服务器和客户的角色。
为了访问服务器管理的共享资源,客户进程可以与不同主机上的服务器进程交互
对等体系结构(P2P)
涉及一项任务或活动的进程扮演相同的角色,作为对等方进行协作交互,不区分客户和服务器或运行他们的机器。
放置(部署)
诸如对象或服务这样的实体是怎样映射到底层的物理分布式基础设施上的?
-
将服务映射到多个服务器
Web就是一个常见的数据分区的例子,每个Web服务器管理自己的资源集,用户用浏览器访问任一服务器上的资源。 -
缓存
缓存用于储存最近使用的数据对象。当客户进程需要一个对象时,缓存服务先检查缓存,如果缓存中有最新的拷贝可用就提供缓存中的对象;如果没有可用对象才去去一个最新拷贝。
Web浏览器维护客户的本地缓存。
Web代理服务器为一个或多个地点的客户提供共享的缓存,目的在于减少广域网和web服务器的负载。
-
移动代码
将代码下载到本地运行。能够提供良好的交互响应,因为不受网络通信影响
-
移动代理
一个运行的程序从一台计算机移动到网络上的另一台计算机,代表某人完成任务最后返回结果。
通过本地调用替换远程调用而降低了通信开销和时间
系统结构模式
重点思想:分层:
分层方法中,一个复杂的系统被分为若干层,每层利用下层提供的服务
一个给定的层提供一个软件抽象,更高的层不清楚其实现细节,也不清楚它下面的其他层
分布式系统中软件和硬件服务层:
应用、服务 |
---|
中间件 |
操作系统 |
计算机和网络硬件 |
功能分解
- 表示逻辑:设计处理用户交互,应用视图
- 应用逻辑:涉及与引用相关的具体处理
- 数据逻辑:涉及应用的持久储存,通常在一个数据库管理系统中
以CS技术实现一个应用为例:
两层解决方案通过分隔应用逻辑完成划分。一些应用逻辑放在客户端,剩下的放在服务器端
好处是交互低延迟
缺点是一部分逻辑(应用逻辑)不能被另一部分使用
三层解决方案中有从逻辑元素到物理服务器的一对一映射
好处是能提高软件可维护性,每层都有定义明确的角色
缺点是增加了管理三个服务器的复杂性,增加了与每个操作相关的网络流量和延迟
注意这个方案可以推广到n层(多层)的解决方案
一些关键技术
- AJAX
- 瘦客户端
- 中间件
基础模型
略
最后
以上就是重要洋葱最近收集整理的关于系统模型系统模型的全部内容,更多相关系统模型系统模型内容请搜索靠谱客的其他文章。
发表评论 取消回复