分布式:分布式计算环境

1,基本术语

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

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

  • 分布式系统应对并发请求的两种基本方式分别是垂直扩展(提升单机处理能力/硬件或架构优化)和水平扩展(增加服务器数量)
  • 分布式系统的CAP定理中的CAP分别是指:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。(最多只能同时满足其中两项)

分布式计算:分布式计算以多个独立的计算机及其上软件构件所组成的系统为研究对象,它们通过网络互联,通过消息进行通信和协同。分布式计算围绕此类系统的构造和运行机理展开研究。

推动分布式计算发展的动力:

  • 以“计算”为中心(如何将计算实体组合为可靠性更高或性能更优计算系统)。
  • 以“联接”为中心(如何将网络资源联接成为网络信息系统)。

分布式计算的特点:

  • 物理分布:物理世界的分布性映射到信息空间。
  • 逻辑整体:展现给用户的是一个统一的整体系统。
  • 可扩展性:添加计算结点即可提高系统的能力。
  • 高可靠性:通过结点和资源的冗余实现高度容错。
  • 高性价比:通过联接和协同来构建系统。
  • 高灵活性:能够兼容不同硬件厂商的产品。

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

  • 支持多个独立结点的协同:时钟与一致性问题/协同方式与交互模型/成员管理和可信问题。
  • 适当屏蔽“分布性”:访问透明性/位置透明性/迁移透明性/复制透明性/并发透明性/失效透明性。
  • 系统的开放性:互操作性/可组装性/可演化性。
  • 系统的可伸缩性:能力可伸缩/地理可伸缩/管理可伸缩。

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

并行计算分布计算
任务粒度细粒度粗粒度
耦合程度紧耦合,内存共享松散耦合,消息通信
问题对象相对完整的问题,计算密集现实世界中业务问题,流程复杂
追求目标提高性能和吞吐量有效管理数据和流程,实现协同
关键技术任务并行分解联接网络资源、数据和软件实体
地域界限超级计算机地理分布

分布式计算环境:已经突破信息空间范畴 正在成为支撑社会和经济运转的基础设施。

  • 内涵:封装分布式系统共性问题的解决方案。
  • 形态:支持分布式系统的开发、集成、运行及管理的软件基础设施。
  • 外延:中间件、应用程序框架、应用服务器、服务容器...

大型分布式计算软件构造和运行的基石:联接和重用。

分布式计算环境中的事务处理服务和目录服务的作用:属于支撑服务端软件的计算环境中的公共服务。

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

2,计算模型

基本模型

消息传递模型:分布式应用的最基本模型,核心要素:消息M、发送者Sender和接收者Reveiver。所需要的基本操作包括:Send、Receive、Connect/Disconnect。例如Sockert。

按角色划分

客户-服务器模型:由客户(Client)和服务器(Server)两个角色构成,技术特点为:

  • Server扮演服务提供者角色,被动等待请求的到达,部署数据管理逻辑和事务处理逻辑。
  • Client扮演服务使用者角色,主动发送请求等待应答,部署表现逻辑。
  • 一个Server通常支持多个Client,例如HTTP、FTP。

对等计算模型:对等计算模型,各参与进程地位平等,有相同的性能和责任。任何两个之间可以互相发起请求和接收响应。例如:即时消息、P2P文件传输、视频会议、协同工作等。

按交互方式划分

异步消息模型:信息系统构成要素:发送者(Sender)、接收者(Receiver)、消息系统(Message System)。

  • 消息系统充当一些独立的进场之间的中介,即充当进程间消息传递的一种交换开关。
  • 进程之间没有耦合关系,异步交换信息,如QQ。

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

面向过程模型:面向过程的分布式计算环境 以支持远程过程调用为核心特点。如Apache Thrift,OSF DCE。

分布式对象模型:支持面向对象的客户-服务器模式的分布式应用,其中服务器应用以对象的形式定义, 客户可以以类似于访问本地对象的方式访问异地服务器上的对象。面向对象在分布式系统中的自然扩展,远程过程向远程对象的自然扩展。

基本目标:一切皆对象,对象软总线是将对象连接到一起的软件总线,访问远程对象就像访问本地对象一样简单。如CORBA(联合国模式),JAVA EE(英联邦模式),.NET(帝国主义)

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

  • 如何表示对象:对象引用
  • 如何保持客户方调用方式不变:Stub
  • 如何实现“控制流←→数据流”转换? ORB对象请求代理
  • 如何在在服务端定位要调用的对象及其方法?对象定位(POA可移植对象适配器),方法定位(Skeleton)
  • 如何设计一个平台无关的通信协议?GIOP协议
  • 如何支持不同的编程语言?CORBA IDL接口定义语言

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

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

POA(Portable Object Adapter):对象适配实际上就是根据对象引用查表的过程。

IDL(Interface Definition Language):描述服务方对外提供、客户方可以访问的接口。

GIOP(Gerneral Inter-ORB Protocol):定义了ORB发送和接收的各种消息的格式及其含义。GIOP并不是可直接用于ORB之间进行通信的具体协议,IIOP协议则是GIOP在TCP/IP协议上的一个具体映射。

分布式构件-容器模型:基础服务支持,生命周期管理,维护构建之间的关系。如Spring Bean。

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

开发时构件
重用级别大粒度二进制重用通过继承等实现代码重用
接口类型功能接口,规范的管理接口功能接口
抽象方式黑盒抽象白盒抽象
运行时构件
单元类别独立部署单元实例单元,具有惟一标志
状态访问没有可见状态,只能通过接口访问具有可访问的状态

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

面向构件的分布计算环境的关键技术:构件动态装载、构件运行时管理、构件远程访问支持、构件远程部署和配置、面向服务端构件的公共支撑。

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

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

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

服务和构件的区别和联系:具有较高的抽象级别;更大的粒度;更强的独立性与可用性;更加便于使用者直接使用。

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

(1)服务提供者:

  • 一个可通过网格寻址的实体,接受和执行来自使用者的请求。
  • 将自己的服务和接口契约发布到服务注册中心,以便服务使用者可以发现和访问该服 务。

(2)服务使用者:

  • 一个应用程序、一个软件模块或需要一个服务的另一个服务。
  • 它发起对注册中心中的服务的查询,通过传输绑定服务,并且执行服务功能。
  • 服务使用者根据接口契约来执行服务。

(3)服务注册中心:

  • 服务发现的支持者。
  • 包含一个可用服务的存储库。
  • 允许感兴趣的服务使用者查找服务提供者接口。

服务端软件架构:

  • 消息服务:为分布式应用提供高效、灵活的消息传输机制, 以及基于消息的交互支持。消息服务交互模型分为点对点模型、发布订阅模型(基于话题/内容)。如Apache Kafka。
  • 负载均衡服务:把负载合理分配到集群中的节点上,并尽量保持各个服务器负载基本一致,充分利用服务器资源,减少访问瓶颈并提高并发访问数量。
  • 分布式缓存服务:缓存用于存储部分数据的硬件或软件,以使得后续更快访问这些数据。将高频访问的数据,放入缓存中,可以大大提高系统整体的承载能力。分类方式(位置、访问/维护方式、与服务器应用耦合程度、介质)。案例:memcached、Redis。

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

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

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

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

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

  • 至少一次意思是一个消息至少传递一次以上,当然会造成消息内容重复冗余,但是可靠性提高了。
  • 而至多一次是服务器的消息最多传递一次,如果再传递一次,就会造成负面影响。
  • 精确一次是通过消息接收方发送确认收到的方式试图保障每次消息传递都能可靠传递完成,这是不可能的,因为这个发送、收到和确认的过程中一旦出现问题,就无法保证传递完成。(代价最高)

Topic松耦合中:消息的发布者不需要知道有哪些订阅者,订阅者无需了解消息是由谁发布 的,发布者和订阅者也无需同时在线。

负载均衡算法:

(1)静态算法:

  • 轮询:可能服务器并不完全一样,导致实际负载并不均衡。
  • 加权轮询:根据服务器配置和性能在轮询过程中增加权值。
  • 随机:相比轮询法性能略优,但需要大量请求才能均衡。
  • 加权随机:根据服务器配置和性能在随机分配过程中增加权值。

(2)动态算法:

  • 最小连接:把请求调度到连接数量最小的服务器上。
  • 加权最小连接:给每台服务器一个权值,调度器会尽可能保持服务器连接数量与权值之 间的平衡。
  • 源地址散列:通过散列函数将源IP与服务器建立映射关系;在服务器列表不变的情况下,每次客户端访问的服务器都是同一个服务器. 利用这个特性可以有状态的session会话。

缓存算法:

  • 关键指标:命中率=返回正确结果数/请求缓存次数。
  • FIFO(first in first out):最先进入缓存的数据会被优先被清除掉以释放空间。
  • LFU(less frequently used):使用次数较少的数据会被优先被清除掉以释放空间。
  • LRU(least recently used):根据数据最后一次被使用的时间戳,清除最远使用时间戳的释放空间。
  • 过期时间、随机清理、关键字清理等。

缓存风险:

  • 缓存穿透:大量查找不存在的数据。
  • 缓存击穿:单个热点数据不再缓冲中。
  • 缓存雪崩:大批量数据在短时间失效。
  • 缓存污染:缓存中数据与实际数据不一致。

ACID:

  • Atomicity(原子性):要么全部完成,要么全部不成。
  • Consistency(一致性):事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
  • Isolation(隔离性):事务之间是隔离的,一个事务不应该影响其它事务运行效。
  • Durability(持久性):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中。

3,分布式应用

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

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

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

  • 软件工程大数据/开源生态大数据类型:代码仓库、Web语义、开发历史库、运行时日志。
  • 软件开发群体化方法三个关键要素是:大众化协同、开放式共享、持续性评估。

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

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

云计算的特点:按需自助服务、随时随地的网络访问、资源共享、快速的可伸缩性、可度量的服务。

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

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

软件即服务:SAAS(software as a service),由第三方提供完整的可直接使用的应用程序。(分别对应如为了吃pizza中的买成品回家做、外卖、到pizza店吃。)

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

SOA和微服务:

区别SOA微服务
组件大小大块业务逻辑,粗粒度单独任务或小块业务逻辑,细粒度
业务划分方式水平多层纵向业务划分
耦合通常松耦合总是松耦合
管理着重中央管理着重分散管理
通信方式使用重量级通信方式,ESB充当服务之间通信的角色使用轻量级通信方式,如HTTP RESTful
应用场景庞大、复杂、异构的企业级系统快速、轻量级系统

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

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

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

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

ROS:Robot operating system

4,其他内容

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

  • 联接信息系统:云计算、微服务、区块链、软件演化等。
  • 联接物理世界:移动和普适计算、智能无人系统、边缘计算等。
  • 联接人类社会:支持群体开发、群体智能等的分布式计算环境。

【问题】谈谈你对互联网环境下软件开发方法的认识。

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

  • 众包指的是一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的 (而且通常是大型的)大众网络的做法。特点:降低生产成本,用人而不养人;提升核心竞争力---大众创新;激励用户深度参与---循环生态;
  • 群体化方法:两个联接一个转换,大众参与的需求创意和软件开发的生产任务结合;大众参与的创意代码和软件开发的高质量代码结合;大众参与的开源创作资源和可复用的高品质软件资源结合;大众参与的代码语义标注与细粒度复用的软件资源结合

【问题】服务端软件架构演化?

  • 经典架构:View-Service。
  • 分层和独立部署:MVC/LAMP。
  • 引入服务器集群:负载均衡。
  • 数据库读写分离。
  • 引入缓存服务。
  • 引入分布式数据库、文件系统和缓存。
  • 内容分发网络:将内容发布到最接近用户的网络“边缘“(如各地电信机房),使用户可以就近取得所需的内容;反向代理;前端缓存;
  • 业务拆分
  • 多数据中心

【问题】分布式是“无本万利”吗?

  • 学习成本:精通一个GUI框架通常需要6-12个月;分布式计算环境的成本更高;学习成本与框架的灵活性往往呈反比关系。
  • 运行成本:分布式计算环境可能带来额外的运行开销。
  • 维护成本:维护上层应用的代码需要理解底层原理;底层更新升级后上层应用可能需要修改。

【问题】分布式带来的挑战?

  • 同步:指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪。
  • 异步:异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(异步的特点就是通知)。
  • 阻塞:所谓阻塞方式的意思是指,当试图对该文件描述符进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,直 到有东西可读或者可写为止。
  • 非阻塞:非阻塞状态下,如果没有东西可读,或者不 可写,读写函数马上返回,而不会等待。

【问题】CAP(帽子定理)

由于对系统或数据进行了拆分,此时系统不再是单机系统,而是分布式系统,针对分布式系统的CAP原理包含如下三个元素:

  • C:Consistency,一致性。在分布式系统中所有数据备份,在同一时刻具有同样的值,所有节点在同一时刻读取的数据都是最新的数据副本。
  • A:Availability,可用性,好的响应性能。完全的可用性指的是在任何故障模型下,服务都会在有限的时间内处理完成并进行响应。
  • P:Partition tolerance,分区容忍性。尽管网络上有部分消息丢失,但系统仍然可继续工作。

CAP原理证明,任何分布式系统只可同时满足以上两点,无法三点兼顾。

  • 由于关系型数据库是单节点无复制的,因此不具有分区容忍性,但是具有一致性和可用性之间进行权衡。
  • 如果在网络上有消息丢失,也就是出现了网络分区,则复制操作可能会被延后,如果这时我们的使用方等待复制完成再返回,则可能导致在有限时间内无法返回,就失去了可用性。
  • 如果使用方不等待复制完成,而在主分片写完后直接返回,则具有了可用性,但是失去了一致性。

分布式CAP定理和事务中的ACID中的一致性区别:

一般事务ACID中的的一致性是有关数据库规则的描述,如果数据表结构定义一个字段值是唯一的,那么一致性系统将解决所有操作中导致这个字段非唯一性的情况,如果带有一个外键的一行记录被删除,那么其外键相关记录也应该被删除。

CAP理论的一致性是保证同一个数据在所有不同服务器上的拷贝都是相同的,这是一种逻辑保证,而不是物理,因为网络速度限制,在不同服务器上这种复制是需要时间的,集群通过组织客户端查看不同节点上还未同步的数据维持逻辑视图。

【问题】两阶段提交协议和三阶段提交协议

两阶段提交协议把分布式事务分为两个阶段(事务管理器-协调者,资源管理器-参与者):

  • 准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,则会写redo或undo日志,然后锁定资源,执行操作,但是并不提交。
  • 提交阶段:如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,则协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,则协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源。

两阶段提交协议在准备阶段锁定资源,这是一个重量级操作,能保证一致性,但是实现起来复杂、成本较高、不够灵活,更重要的是有3个致命问题:

  • 阻塞:对于任何一次指令必须收到明确的响应,才会继续进行下一步,否则处于阻塞状态,占用的资源被一直锁定,不会被释放。
  • 单点故障:如果协调者宕机,参与者没有协调者指挥,则会一直阻塞,尽管可以通过选举新的协调者替代原有协调者,但是如果协调者在发送一个提交指令后宕机,而提交指令仅仅被一个参与者接收,并且参与者接收后也宕机,则新上任的协调者无法处理这种情况。
  • 脑裂:协调者发送提交指令,有的参与者与参与者收到并执行了事务,有的参与者没有接收到事务就没有执行事务,多个参与者之间是不一致的。

上面三种情况虽然很少发生,但都需要人工干预处理,没有自动化的解决方案,因此两阶段提交协议在正常情况下能保证系统的强一致性(必须同时执行)和持久性(一旦确定则不能调整),但是在出现异常情况下,当前处理的操作处于错误状态,需要管理员人工干预解决,因此可用性不够好,这也符合CAP协议的一致性和可用性不能兼得的原理。

三阶段提交协议是两阶段提交协议的改进版本。它通过超时机制解决了阻塞的问题,并且把两个阶段增加为三个阶段:

  • 询问阶段:协调者询问参与者是否可以完成指令,参与者只需要回答是或不是,而不需要做真正的操作,这个阶段超时会导致中止。
  • 准备阶段:如果在询问阶段所有参与者都返回可执行操作,则协调者向参与者发送预执行请求,然后参与者写redo和undo日志,执行操作但是不提交操作;如果在询问阶段任意参与者返回不能执行操作的结果,则协调者向参与者发送中止请求,这里的逻辑与两阶段提交协议的准备阶段相似。
  • 提交阶段:如果每个参与在准备阶段返回准备成功,也就是说预留资源和执行操作成功,则协调者向参与者发起提交命令,参与者提交资源变更的事务,释放锁定的资源;如果任何参与者返回准备失败,也就是说预留资源或者执行操作失败,则协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源,这里的逻辑与两个阶段提交协议的提交阶段一致。

三阶段提交协议与两阶段提交协议有两个不同点:

  • 增加了一个询问阶段,询问阶段可以确保尽可能早地发现无法执行操作而需要中止的行为,但是它并不能发现所有这种行为,只会减少这种情况的发生。
  • 在准备阶段以后,协调者和参与者执行的任务中都增加了超时,一旦超时,则协调者和参与者都会继续提交事务,默认为成功,这也是根据概率统计超时后默认为成功的正确性最大。

5,计算机网络

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

  • 语法:规定信息格式,包括数据及控制信息格式、 编码方式等。
  • 语义:说明通信双方应当如何做,用于协调与差错 处理时的控制信息。
  • 时序:对事件发生顺序的详细说明,包括何时进行 通信、先讲什么、后讲什么、讲话的速度等。

TCP与UDP:

TCPUDP
是否连接面向连接无连接
传输方式面向字节流面向报文
通信方式点对点一对一,一对多
传输顺序保证不保证
丢包重传
消耗系统资源多(维护连接)
效率

Socket(套接字):是计算机网络中进程间数据流的端点,操作系统提供的一种进程间的通信机制。(套接字地址:IP地址+端口号)是实现进程间通信的手段,使得网络读写数据(或者服 务调用)和读写本地文件一样容易。

6,线程

进程:是程序的一次动态执行过程,它需要经历从代码加载、代码执行道执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。多进程操作系统能同时运行多个线程,由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片。

线程:是比进程更小的执行单位,线程是在进程的基础之上进行的进一步划分。所谓多线程是指一个在执行过程中可以产生多个更小的程序单元,这些更小的单位称为线程。

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

线程池优点:

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

  • 避免系统创建大量线程而消耗系统资源。

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

  • 能够更好的监控和管理线程。

线程池缺点:

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

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

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

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

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

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

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要搭建分布式并行计算环境,您可以按照以下步骤进行操作: 1. 确定需求:首先,明确您的计算任务和要求。了解您需要处理的数据量、计算复杂度、并行计算的规模等因素。 2. 选择框架:根据需求选择合适的分布式计算框架,例如Hadoop、Spark、MPI等。这些框架提供了分布式计算的基本功能和工具。 3. 构建集群:为了实现分布式计算,您需要构建一个包含多个计算节点的集群。可以选择云服务提供商(如AWS、Azure)来创建虚拟机实例,或者使用本地服务器。 4. 安装和配置框架:根据所选框架的要求,安装和配置相应的软件和组件。这包括设置主节点和工作节点、配置网络通信和文件系统等。 5. 分配任务和数据:将您的计算任务划分为可并行执行的子任务,并将数据划分为适当的分块。确保任务和数据能够在集群中进行分发和处理。 6. 编写代码:根据选择的框架,编写相应的程序代码。使用适当的API和函数来实现并行计算和数据传输。 7. 测试和调试:在集群上运行计算任务,检查程序是否按预期工作。如果有错误或性能问题,进行调试和优化。 8. 执行并监视:启动并行计算任务,监视其进展和性能。根据需要,定期检查日志和结果输出。 以上步骤只是一个概览,实际搭建过程可能因框架选择和需求差异而有所变化。确保仔细阅读框架的文档,并参考相关文献和教程来获取更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值