分布式计算环境复习要点

名词解释

概念

分布式系统:由多个计算机(IP地址)及其上软件构件(端口)所组成,通过网络互联,通过消息进行通信和协同

分布式计算:Distributed computing,围绕分布式系统的构造和运行机理展开研究。物理分布+逻辑整体

分布式计算环境:大型分布计算软件构造和运行的基石。封装分布式系统共性问题的解决方案,支持分布式系统的开发、集成、运行及管理的软件基础设施,以及中间件、应用程序框架、应用服务器、服务容器等。可重用组件+架构模式

并行计算:一般是指许多指令得以同时进行的计算模式。在同时进行的前提下,可以将计算过程分解成小部分,之后以并发方式来加以解决。紧耦合,内存共享

ARPANET:advanced research projets agency network

p2p:对等计算模型,各参与进程地位平等,有相同的性能和责任。任何两个之间可以互相发起请求和接收响应

原理

协议:协议是计算机之间事先达成的“约定” ,这种“约定”使那些由不同厂商的设备,不同CPU及不同操作系统组成的计算机之间可以实现通信。三要素:语法/语义/时序。

线程:线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。

如何跨平台?引入具体编程语言无关的IDL(Interface Definition Language,接口定义语言,用来描述产生对象调用请求的客户对象和服务对象之间的接口语言。包括常用数据类型,方法定义等,无执行逻辑)

DCE cell: 由单个组织管理的一组计算机(及其资源和用户)

RPC:Remote Procedure Call,远程过程调用是一种像调用本地过程一样调用远程机器上的过程,而不需要了解网络细节的远程过程访问支持机制。 由于基于套接字的开发方式繁琐&排错困难

面向对象的分布式计算环境

支持面向对象的客户-服务器模式的分布式应用,其中服务器应用以对象的形式定义, 客户可以以类似于访问本地对象的方式访问异地服务器上的对象。

DLL:Dynamic link library,是包含大量的只在运行时刻才与进程相连接的函数、数据以及资源的库文件。

COM:component object model,组件对象模型,一种编程语言无关的、二进制级别的应用间调用机制

DCOM:Distributed COM,COM在跨机器的分布式环境中进行同步运行的实现技术,实现不同机器之间的COM对象调用。

 .NET框架:致力于敏捷软件开发、 快速应用开发、平台无关性和网络透明化的软件框架

OMG:Object Management Group,1989年成立,分布对象技术的重要推动者和标准的制定者

CORBA:Common object request broker(代理) architecture。OMG组织制定的解决异构环境下分布对象之间互操作问题的分布对象中间件规范 ,提供了跨编程语言、跨平台、跨开发商的互操作能力

ORB:Object Request Broker,对象请求代理,ORB是CORBA的核心. 它提供了对象请求与回答的通信机制,使得对象可以透明地发出请求和接收响应。

对象引用:对于应用程序员而言,对象引用唯一的表示了分布式环境下的一个对象实例;对于中间件设计者而言,对象引用是对象定位管理基础

POA:portable object adapter,对象适配实际上就是根据对象引用查表的过程

IOR:Interoperable Object Reference。含有足够的信息可以与任何类型的ORB中的对象通信,这些信息包括: 目标对象的类型;主机的Internet地址;主机的端口号;Object key  (在server 中是唯一的ORB特定数据)

面向构件的分布计算环境

构件:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意的组装。

分布式构件:构件+分布式应用支持,在分布计算平台技术基础上,通过制定广泛为业界认可的分布式应用开发和运行规范,大量利用代码自动生成工具和运行维护工具,以辅助构造出完整的服务器端分布式应用。

EJB:Enterprise Java Bean,企业级java组件。JavaEE中面向服务的体系架构的解决方案,可以将功能封装在服务器端,以服务的形式对外发布,客户端在无需知道方法细节的情况下来远程调用方法,大大降低了模块间的耦合性,提高了系统的安全性和可维护性。

反射系统:内建了自描述数据结构的系统,这一数据结构与其描述对象因果关联(Causally Connected)

反射:反射系统基于这一自描述所实施的访问、推理和修改自身的行为。

面向服务的分布计算环境

 

SOA:Service-Oriented Architecture,面向服务的体系结构。通过连接能完成特定任务的独立功能实体,实现网络环境下业务功能集成的一种软件系统架构。真正优点体现业务集成,通过组合现有服务来开发整个或近乎整个新应用。

服务端软件架构

负载均衡服务:将用户请求分发到集群的各个服务器上,并尽量保持各个服务器负载基本一致

内容分发网络:Content Delivery Network,将内容发布到最接近用户的网络“边缘“(如各地电信机房),使用户可以就近取得所需的内容

QoS控制:Quality of service,通过对事件通道、事件设置QoS属性和其它管理属性,实现对事件传输持久性、事件队列长度、事件生命周期等服务质量的控制。

Redis:开源高性能key-value缓存数据库,支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

SAN(Storage Area Network,存储区域网络):通过光纤或TCP/IP网络将磁盘阵列等存储设备联接;“块”存储设备,不能实现数据在不同主机之间的共享。

NAS(Network Attached Storage,网络附加存储):专为文件存储设计的网络服务器

高级专题

版本控制系统:一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。(本地版本控制系统,在一台机器上,记录版本的不同变化,保证内容不会丢失;集中式版本控制,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。如svn;分布式版本控制,每一次提取操作都是一次对代码仓库的完整镜像备份,每个用户的电脑都是一台服务器,如git)

区块链:区块链实际上是一种记账方式,但是记录过的内容是无法篡改的(或者说只有50%以上的节点同意才能修改),保证无法篡改的方式是通过去中心化。

软件大数据分析:Big Data for software analytics,将各式各样的开源软件当作大数据语料库, 提取其中的“语义对象”(semantic object)视为数据(data) ,得到软件各类性质(property)的规律和推断。

MUSE:Mining and Understanding software Enclaves,软件包体的挖掘与理解。对当前软件开发(包含编写、调试、验证、维护等)的方式进行彻底地反思,以大数据的思维提出变革性的软件构造理论与方法, 支持高质量高可靠软件的自动构造与修复。

云计算与云应用

云计算:是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

基础设施即服务:IAAS(Infrastructure as a service),用户通过Internet 可以从完善的计算机基础设施获得服务,自己提供平台和软件。把硬件外包给别的地方

平台即服务:PAAS(platform as a service),提供了用户可以访问的完整或部分的应用程序开发/提供解决方案。你只需要由应用和数据就可以在我的平台上进行应用,就可以使用。

软件即服务:SAAS(software as a service),由第三方提供完整的可直接使用的应用程序

(分别对应如为了吃pizza中的买成品回家做、外卖、到pizza店吃。)

SLA(Service Level Agreement):服务级别协议,是服务提供商向服务消费者承诺的服务能力细节指标,通常为非功能属性的指标

微服务与服务治理

微服务:一种软件架构,一个复杂软件应用由多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。特点:自治系统,可独立部署;仅通过接口互相访问,低耦合;粒度小,易于开发、扩展和维护

服务治理:在面向服务的架构中,对服务执行控制相关的活动进行系统化管理和协调的过程,使得信息系统可以高效实现其目标。

边缘计算

计算卸载(Computation Offloading):将计算任务静态/动态迁移到服务端执行;突破本地能耗、计算能力、存储能力限制。包括完全卸载和部分卸载

边缘计算:核心理念是计算应更邻近数据的源头,更邻近用户。在靠近人、物或数据源头的网络边缘侧,通过融合了网络、计算、存储、应用等核心能力的开放平台。

无人系统

互操作:多机器人能够以某种方式建立连接。显式通信,即通过网络连接和分布计算技术进行互操作;隐式通信,即通过环境变化或者传感器的感知交流。是多机器人协作的基础

ROS:Robot operating system

工业化方法与开源社会化编程

软件工程:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。

软件生产:像工业化生产一样,通过严格精密的任务分解和人员组织,期望达到效率最大化。

 

填空题

概念

推动分布计算发展的动力:以“计算”为中心(如何将计算实体组合为可靠性更高或性能更优计算系统)、以“联接”为中心(如何将网络资源联接成为网络信息系统)

原理

套接字是计算机网络中进程间数据流的端点,操作系统提供的一种进程间的通信机制。(套接字地址:IP地址+端口号)

分布式系统应对并发请求的两种基本方式分别是垂直扩展(提升单机处理能力/硬件或架构优化)和水平扩展(增加服务器数量)

分布式系统的CAP定理中的CAP分别是指:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。(最多只能同时满足其中两项)

CORBA使用对象引用在分布式计算环境下唯一标识一个对象实例。(Interoperable object reference,互操作对象引用)

消息发布订阅模型可以分为基于话题的发布/订阅、基于内容的发布/订阅

负载均衡算法负责把负载合理分配到集群中的节点上,充分利用服务器资源,减少访问瓶颈并提高并发访问数量。

DCE是典型的面向过程的分布计算环境

高级专题

请写出三种软件工程大数据:代码仓库、Web语义、开发历史库、运行时日志

基于“群愚生智”,去中心化、 由大量简单机器人组成的系统称为群机器人

软件开发群体化方法三个关键要素是大众化协同、开放式共享、持续性评估

基础设施即服务中的虚拟化四大特性:分区(在单一物理服务器上同时运行多个虚拟机)、隔离(在同一服务器上的虚拟机之间相互隔离)、封装(整个虚拟机都保存在文件中,而且可以通过移动和复制这些文件的方式来移动和复制该虚拟机)、相对于硬件独立(无需修改即可在任何服务器上运行虚拟机)。

 

判断

IDL是所有分布计算环境的基本组件(错,CORBA标准中定义了OMG IDL来描述对象访问接口.具体编程语言无关的IDL(interface definition language,接口定义语言),用来解决跨语言的问题。用 RPC / COM /CORBA 技术来编写分布式系统时都需要IDL,但应该不是所有都需要

在分布计算环境支持下,访问远程对象完全可以做到像访问本地对象一样(对,这是分布对象模型的基本目标,如CORBA)

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。(对,如何才能实现软件开发的摩尔定律。)

分布式缓存的命中率是指请求缓存总次数中返回正确结果数所占的比例。(对,是缓存性能的关键指标,命中率=返回正确结果数/请求缓存次数 )

分布式系统的两阶段提交协议存在单点失效问题。(对,因为要保持一致性,当单点失效,其余的会永恒等待。两阶段提交协议还存在同步阻塞问题。)

面向过程、面向对象、面向构件等代表了分布计算环境发展的不同阶段,每个阶段实现都实现都完全推翻了前一阶段。(错)

在分布式计算环境中,同步调用和阻塞调用描述的是同一种调用模式(错,概念不相同&修饰的对象不相同,阻塞/非阻塞主要针对S端,调用应用程序,不能立即得到结果的时候,是否立即返回;同步主要针对C端,访问数据的机制,主动请求完数据后是否等待)

同步调用,很多时候当前线程还是激活的,只是从逻辑上当前函数还没有返回而已。当前线程还会继续处理各种消息

阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有得到结果之后才会返回

在分布式系统中,系统软总线是将对象连接到一起的软件总线(对)

Openstack是一种云计算“平台即服务”层基础设施(错,是云计算“基础设施即服务”)

数据库分库分表的目的是将数据库进行拆分,从而达到提升查询性能、提高并发吞吐率等目的。(对,分库主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。)

 

简答

分布式计算涉及的关键问题

1)支持多个独立结点的协同:时钟与一致性问题/协同方式与交互模型/成员管理和可信问题

2)适当屏蔽“分布性”:访问透明性/位置透明性/迁移透明性/复制透明性/并发透明性/失效透明性

3)系统的开放性:互操作性/可组装性/可演化性

4)系统的可伸缩性:能力可伸缩/地理可伸缩/管理可伸缩

与并行计算的区别

最大的区别在于目的——并行计算是同时使用多种计算资源解决计算问题的过程,主要目的是为了能更快地完成任务,这就要求多个子任务同时运行,支撑技术如任务的划分、负载平衡、简单的轻量通信协议、零拷贝、高速通信设备、并行文件系统、并行算法等等等。分布计算的应用不一样,如应用本质是分布的(银行系统,远程监控…) ,对通信量、计算量、时间的要求以及安全方面的特点和并行计算都有不一样的地方,所产生的技术也就不尽相同。

  • 并行计算突出的是时间上的同步性:同时进行计算

  • 分布计算突出的是空间上的分布性:计算在不同的位置进行

  • 分布式计算在很多情况下也是并行计算:在网络的不同位置同时进行,两者之间有交叉的技术,如单一系统映像、容错、网络技术…。 分布系统也可以用来做粗粒度的并行计算

进程与线程的实现区别(ppt03)

• 当Win32创建一个新的进程时,它只是在内存中建立一个映象文件把Exe文件或DLL文件、Active X文件中的内容复制到内存中。

• 进程是不活动的,而实际操作是由线程来进行的,线程是工作者。

• 运行代码是线程的,而进程为线程提供地址空间和运行所需要的数据。

 

什么是线程池模型?请简述其优缺点(ppt05)

是一种多线程处理形式,每个请求使用一个线程处理,所有线程预先创建,并发请求数大于线程数时排队等待。

优点:无线程创建开销,线程池大小需要根据硬件性能、负载情况等适当设置

优点:

1、避免重复创建线程,减少在创建和销毁线程时所花时间,及系统的整体开销

2、避免系统创建大量线程而消耗系统资源

3、用户提交的数据能够及时得到处理,响应速度快

4、能够更好的监控和管理线程

缺点:

1.线程池不支持线程的取消、完成、失败通知等交互性操作。

2.线程池不支持线程执行的先后次序排序。

3.不能设置池化线程(线程池内的线程)的Name,会增加代码调试难度。

4.池化线程通常都是后台线程,优先级为ThreadPriority.Normal。

5.池化线程阻塞会影响性能(阻塞会使CLR错误地认为它占用了大量CPU。CLR能够检测或补偿(往池中注入更多线程),但是这可能使线程池受到后续超负荷的印象。Task解决了这个问题)。

6.线程池使用的是全局队列,全局队列中的线程依旧会存在竞争共享资源的情况,从而影响性能(Task解决了这个问题方案是使用本地队列)。

服务端通信级+请求级并发

软件开发工程化方法的本质是什么?(ppt13)

建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。

类似流水线的方式,通过严格精密的任务分解和人员组织,期望达到效率最大化。

软件危机、软件生产、瀑布模型、软件产品线

 

开源软件及开源方法有什么特点

版本控制、社交化编程(如在github上面,be social模块,不仅可以将项目开源,还可以将开发者都联接起来。但是绝大多数的开发者使用社会化开发机制的程度有限)、群体协同(如何高效地汇聚贡献,贡献审查机制)

 

软件工程大数据及分析方法

量化度量、群体化方法、智能化方法

类型:代码仓库、开发历史库、Web语义、运行时日志

数据驱动的研究方法:从研究问题出发,经过数据探索和元数据选取,进行度量设计;再经过数据组合和原始观测进行数据预处理;再经过过滤标准和无偏数据,进行建模与分析

软件大数据分析的思路:将各式各样的开源软件当作大数据语料库,提取其中的“语义对象”(semantic object)视为数据(data),得到软件各类性质(property)的规律和推断

分布式计算环境中的事务处理服务和目录服务分别起什么作用?(ppt07)

属于支撑服务端软件的计算环境中的公共服务。

消息服务:为分布式应用提供高效、灵活的消息传输机制, 以及基于消息的交互支持。消息服务交互模型分为点对点模型、发布订阅模型(基于话题/内容)。

负载均衡服务: 将任务分配到后端多个服务器上,实现最佳化资源使用、最大化吞吐率、最小化响应时间、避免过载 。静态算法:轮询、加权轮询、随机、加权随机;动态算法:最小连接、加权最小连接、源地址散列。基于代理、重定向、DNS、IP、数据链路层修改mac地址

分布式缓存服务:缓存用于存储部分数据的硬件或软件,以使得后续更快访问这些数据。将高频访问的数据,放入缓存中,可以大大提高系统整体的承载能力。分类方式(位置、访问/维护方式、与服务器应用耦合程度、介质)。案例:memcached、Redis

事务处理服务:事务是由一组操作构成的可靠、独立的工作单元,该服务使事物的处理具有ACID特性。包括两阶段提交协议和三阶段提交协议( 为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法)。

• Atomicity(原子性):要么全部完成,要么全部不完成                                                                 

• Consistency(一致性):事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

• Isolation(隔离性):事务之间是隔离的,一个事务不应该影响其它事务运行效                          

• Durability(持久性):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中

目录服务:通过名字检索属性的公共服务,将现实世界中事物的信息存储为具有描述性属性的对象(如计算资源、软件资源、用户等等),用户可以按名称查找对象属性 。实例:DNS、Windows Active Directory、X.500、LDAP

共享存储服务:大数据和云计算的发展使得存储远超单机能力;共享存储可以为容错、性能、容量等专门优化;集群化之后逻辑服务和物理实现的分离;需要逻辑层面上的存储服务支持。

大数据计算框架:大数据处理需要利用分布计算能力,需要合理的架构和高效的实现。如Hadoop的MapReduce模型(“分而治之”,使之可以通过线性增加资源来提升性能)、Apache Storm

 

请结合某一种分布计算环境,简述Stub的作用

存根(Stub)是客户应用与ORB之间的媒介。客户应用通过Stub机制将请求传递给ORB内核,而后由ORB内核将请求发送给服务器方。

1) 调用者调用本地stub中的一个过程(开始远程过程调用请求). 

2) 这个stub过程把有关的参数组装成一个消息包或一组消息包, 形成一条消息. 运行此执行过程的远程场点的IP地址和执行该过程的进程ID号也包含在这条消息中.

3) 将这条消息发送给对应的RPC runtime(RPC运行库)子程序, 由这个子程序将消息发送到远程场点.  

4) 在接收到这条消息时, server端的RPC runtime子程序引用与被调用者对应的stub中的一个子程序, 并让它来处理消息.

5) 与被调用者对应的stub中的这个子程序撤卸消息, 解析出相关参数, 并用本地调用方式执行所指定的过程.

6) 返回调用结果, 调用者对应的stub子程序执行return语句返回到用户, 整个RPC过程结束.

如在j2ee里面的stub是这样说的:为屏蔽客户调用远程主机上的对象,必须提供某种方式来模拟本地对象,这种本地对象称为存根(stub),存根负责接收本地方法调用,并将它们委派给各自的具体实现对象

或者举例在CORBA中,作用见上面解释ORB的图。

每个CORBA对象均有根据其IDL生成的Stub和Skeleton,接口的一致性是Stub能够成为远程对象的“本地替身”的前提,Skeleton主要负责接口中方法的适配

 

请简述消息传递的“至多一次”、“至少一次”和“精确一次”语义

至少一次意思是一个消息至少传递一次以上,当然会造成消息内容重复冗余,但是可靠性提高了;

而至多一次是服务器的消息最多传递一次,如果再传递一次,就会造成负面影响;

精确一次是通过消息接收方发送确认收到的方式试图保障每次消息传递都能可靠传递完成,这是不可能的,因为这个发送、收到和确认的过程中一旦出现问题,就无法保证传递完成。

 

服务和构件的区别和联系

具有较高的抽象级别;更大的粒度;更强的独立性与可用性;更加便于使用者直接使用

 

虚拟化的好处

实现资源整合利用,消减IT成本;提升管理性与可用性

基础设施即服务的举例:OpenStack、Docker Swarm(Docker是新一代虚拟化技术,实现轻量级的进程、网络和文件系统隔离。Docker Swarm是容器集群管理工具,使得Docker集群暴露给用户时相当于一个虚拟的整体)

平台即服务:阿里飞天平台

 

如何构造超大规模软件系统

设计演化(经济与工业结构、构造计算环境的社会活动、合法性问题)

协同与控制(在线修改、服务质量的维护、适应用户和环境、支持用户控制的协同)

监测与评价(定义监测器、测量人的因素、监测器的优先级、处理变化和不完整信息)

 

为什么“云”是不够的?

举例云机器人SLAM,在建立新地图模型或者改进已知地图的同时,在该地图模型上定位机器人。

计算复杂性(SLAM是一个持续迭代的过程;每个迭代周期是高度计算密集型;计算量随需求增长而增长)

网络带宽、时延和远程“云”端不确定性的束缚

 

云计算的优缺点

优点:资源集约化(规模化运营,降低系统管理和运维的代价);按需提供服务( 通过虚拟化等手段细粒度分割资源;以服务化的方式通过互联网访问)

缺点:访问延时;可伸缩性;数据隐私;单点失效

 

为什么边缘计算的邻近很重要

计算:更快的服务响应速度(网络相对可控,资源相对可控)

数据:更好的可扩展性(数据在“边缘”处理或预处理;减少数据中心带宽消耗;减少数据中心处理能力消耗)

隐私:提升数据安全性(原始数据被存储在靠近用户的服务器)

可用:应对单点失效

 

无人系统的研究挑战

技术挑战:1)行为挑战:在非结构、不可预知动态环境中完成使命,任务目标及指标更加多样、 操作灵活性及柔性要求更高、任务过程复杂多变。2)交互挑战:要求具备多信息源综合的交互手段,具有人类意图理解能力,机器人与人状态信息能实时双向传递。3)安全挑战:在行为过程中确保人-机-物的安全

政策和伦理

 

论述

请结合“联接信息系统”、“联接物理世界”或“联接人类社会”三者之一,阐述你对分布式计算发展的认识

 

请对比传统软件工程和开源方法,谈谈你对软件开发群体化方法的认识

众包指的是一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的 (而且通常是大型的)大众网络的做法。

特点:降低生产成本,用人而不养人;提升核心竞争力---大众创新;激励用户深度参与---循环生态;

群体化方法:两个联接一个转换

大众参与的需求创意和软件开发的生产任务结合;大众参与的创意代码和软件开发的高质量代码结合;大众参与的开源创作资源和可复用的高品质软件资源结合;大众参与的代码语义标注与细粒度复用的软件资源结合

 

posted @ 2019-07-10 09:07  闲不住的小李  阅读(1738)  评论(1编辑  收藏  举报