分布式系统简介

  研究生阶段学习的分布式原理与泛型几乎忘完了,当初不怎么懂。。。现在工作中发现大数据技术的底层还是分布式系统,那么重新拾起,总结下~

一、分布式系统简介

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。这个定义包含了两方面的内容,第一方面是硬件的:机器本身是独立的。第二方面是软件的:对用户来说他们就像在于单个系统打交道

  其中重要特性之一是,各个计算机之间的差别以及计算机之间的通信方式的差别对用户是隐藏的。另一个重要的特性是,用户和应用程序无论在何时何地都能够以一种一致和统一的方式与分布式系统进行交互

  为了使种类各异的计算机和网络都呈现为单个系统,分布式系统通常通过一个“软件层”组织起来,该“软件层”在逻辑上位于由用户和应用程序组成的高层与和操作系统组成的底层之间。这样的分布式系统有时又称为中间件

二、目标

1、使资源可访问

  分布式系统的最主要的目标是,使用户能够方便地访问远程资源,并以一种受控的方式与其他用户共享这些资源。

2、透明性

  将它的进程和资源实际上在多台计算机上分布这样一个事实隐藏起来,如果一个分布式系统能够在用户和应用程序面前呈现为单个计算机系统,这样的分布式系统就称为是透明的。

访问透明性:对不同数据表示形式以及资源访问方式的隐藏。

位置透明性:用户无法判别资源在系统中的物理位置。

迁移透明性:如果一个分布式系统中的资源移动不会影响该资源的访问方式,就可以说这种分布式系统能够提供迁移透明性。

重定位透明性:如果资源可以在接受访问的同时进行重新定位,而不引起用户和应用程序的注意,拥有这种资源的系统无疑会更加强壮。

复制透明性:对同一个资源存在多个副本这样一个事实的隐藏。

并发透明性:让任何一个用户都不会感觉到他人也在使用自己所使用的资源。

故障透明性:意味着用户不会注意到某个资源无法正常工作,以及系统随后从故障中恢复的过程。

3、开放性

  分布式系统还有一个重要目标。一个开放的分布式系统,它根据一系列准则来提供服务,这些准则描述了所提供服务的语法和语义。例如,在计算机网络中,其准则规定了发送和接收的消息的格式、内容及含义。对这些准则进行形式化,就产生了协议。在分布式系统中,服务通常是通过接口指定的,而接口一般是通过接口定义语言来描述的。

互操作性:刻画了来自不同厂商的系统或组件的两种实现能够在何种程度上共存并且协同工作,这种共存和协同工作只能依赖与通过双方在公共标准中规定的各自所提供的服务来完成。

可移植性:如果为分布式系统A开发了某个应用程序,并且另一个分布式系统B与A具有相同的接口,该应用程序在不做任何修改的情况下在B上执行的可行度。

4、可扩展性问题

  地域上的可扩展性问题,难以对现有的为局域网设计的分布式系统进行扩展的主要原因之一是这些系统基于同步通信。请求服务的以防(一般称为客户)在得到回应前是处于阻塞状态的。这种方法通常适用于局域网,而在广域系统中,必须考虑到进程间通信可能要比局域网慢三个数量级。

  而且,广域网中的通信从本质上说是不可靠的,而且几乎总是点对点的,相比之下,局域网一般提供高度可靠的基于广播的通信功能,使得在给予开发分布式系统要相对容易得多。 例如:服务器定位的问题,在局域网系统中,进程可以简单地向每台计算机广播一条消息,寻味每台计算机是否正运行该进程所需的服务。提供该服务的机器会做出相应,在应答消息中包含该机器的网络地址。

5、扩展技术

  基本上只有三种拓展技术:隐藏通信等待时间、分布技术 以及 复制技术

隐藏通信时间的技术对于地域扩展比较适用。其基本的想法在于尽量避免等待远程服务队请求的相应。例如:当对远程计算机的某个服务发送请求时,在发出请求端,除了等待服务器响应之外,还可以利用这段时间做其他工作。本质上,以这种方式构建的应用程序使用的是异步通信。 那么当相应到来时,应用程序产生中断,并且调用专门的处理程序对前面发出的请求进行处理。异步通信通常用于批处理系统以及并行应用系统中。另外一种选择是,启动一个新的控制线程来执行请求,虽然该控制线程因为等待响应而受到阻塞,但是进程中的其他线程可以继续执行。

   分布技术,把某个组件分割成多个部分,然后再将它们分散到各个系统中去,使用分布技术的一个例子是因特网DNS。DNS命名空间是由 域 组成的分层树状结构,域又划分为互不重叠的区。每个区内的名字都由单个域名服务器处理。在不涉及太多细节的情况下,可以把每个路径名想象成因特网上的主机名,与该主机的网络地址相关。从根本上来说,解析一个名字意味着返回与该名字相关联的主机的网络地址。

  另外一个例子,万维网(WWW),对于大多数用户来说,Web呈现给他们的是一个庞大的基于文档的信息系统,其中的每个文档都拥有以URL形式给出的唯一名字。Web在物理上是分布到非常多的服务器上的,每台服务器处理一部分Web文档。通过编码,把处理文档的服务器的名字变成该文档的URL中的一部分。正是因为对文档进行了分布处理,Web才得到扩展到现在的规模。

  考虑到可扩展性,对文件进行复制并将副本分不到系统各处,不仅能够增加可用性,也有助于各组件间的负载均衡,从而使性能得到提高。

缓存是复制的一种特殊形式,与复制不同的是,是否进行缓存是由要访问资源的客户决定的,而不是由资源拥有者决定的。 不过不论是缓存还是复制,由于资源存在多个副本,修改其中一个会导致它与其他副本不相同,从而导致一致性方面的问题。

6、分布式系统的类型

集群计算系统:通过在高速网络上挂接相对简单的计算机集,就可以构建成一个超级计算机,集群计算系统都可用于并行程序设计,即单个程序可以在多台计算机上并行地运行。主节点实际上运行的是程序运行和集群管理所需的中间件,而计算节点往往只需要一个标准的操作系统。

 网格计算系统:集群中的计算机都是相同的,它们都具有相同的操作系统,都通过同一网络连接起来。而网格计算系统则具有高度的异构性:其硬件、操作系统、网络、管理域和安全策略等都不尽相同。那么如何把不同计算机组织的资源集中起来,使一组人或机构进行协调工作,这种协调是以虚拟组织的方式来实现的。网格计算的分层体系结构如下:

  该体系结构由4层组成。

  最低的光线层:在特定站点提供对局部资源的接口,此为定制化接口,以允许在某个虚拟组织中实现资源共享。通常,他们还提供查询资源状态和容量功能,以及用于进行实际的资源管理(如加锁资源)的功能。

  连接层:由通信协议组成,用于支持网格事物处理,衍生多个资源的使用。

  资源层:负责管理单个资源,直接调用光线层可用的接口,如生成一个进程或读取数据等。因此,资源层可以看做是负责访问控制,因而依赖于连接层的认证功能。

  汇集层:该层负责处理对多个资源的访问,通常由资源分派、把任务分配和调度到多个资源以及数据复制等服务组成。

  应用层:由应用程序组成,这些应用程序在虚拟组织中运行,它们可以充分利用网格计算环境。

参考文献:《分布式系统原理与泛型》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

啥,又要为表增加一列属性?

需求缘起 产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计: user(uid, name, passwd, nick) 第二版,产品经理增加了年龄,...

53390
来自专栏程序人生

再谈 API 的撰写 - 架构

在 再谈 API 的撰写 - 总览 里我们谈到了做一个 API 系统的基本思路和一些组件的选型,今天谈谈架构。 部署 首先要考虑的架构是部署的架构。部署的方案往...

50270
来自专栏吴生的专栏

水平分库分表的关键问题及解决思路

关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量、连接数、处理能力等都很有限,数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展。在互联...

517110
来自专栏Golang语言社区

Go 语言构建高并发分布式系统实践

你知道互联网最抢手的技术人才有哪些吗?最新互联网职场生态报告显示,最抢手的十大互联网技术人才排名中Go语言开发人员位居第三,从中不难见得,Go语言的渗透率越来越...

41940
来自专栏吉浦迅科技

菜鸟如何顺利用JetPack3.0刷机?(第一部分)

最近Lady遇到不少Jetson TK1的新手,在用JetPack刷机的过程遭遇到各种问题,于是Lady特意召唤东莞理工学院Robot Pioneer战队,请他...

41080
来自专栏后端技术探索

携程异步消息系统实践

今天会跟大家分享一下我们在携程,现在应该是正在推广的一个新的消息系统,主要会偏重于讲一些架构和实现方面的内容。目前我在携程大概一年多都在做新的消息系统Herme...

17130
来自专栏Golang语言社区

Go 语言构建高并发分布式系统实践

你知道互联网最抢手的技术人才有哪些吗?最新互联网职场生态报告显示,最抢手的十大互联网技术人才排名中Go语言开发人员位居第三,从中不难见得,Go语言的渗透率越来越...

45940
来自专栏云技术

性能超前,详解腾讯云新一代Redis缓存数据库

当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,...

656160
来自专栏大数据文摘

[揭秘]基于磁盘数据的电子取证过程详解

31580
来自专栏EAWorld

微服务的持续集成,四步“构建”一个代码世界

大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天...

35150

扫码关注云+社区

领取腾讯云代金券