什么是分布式系统



什么是分布式系统

分布式系统有多个含义:

1)表示计算机科学的一个研究领域,研究方向。这个层面的分布式系统比较学术,不是本文讨论的对象。

2)工程领域的实际使用的分布式系统。分布式系统是互联网应用的基石,是底层的支撑平台。本文讲的分布式系统指这个层面。

互联网应用的特点是:高并发,海量数据。互联网应用的用户数是没有上限的(取决于其开放特性),这也是和传统应用的本质区别。高并发指系统单位时间内收到的请求数量(取决于使用的用户数),没有上限。海量数据包括:海量数据的存储和海量数据的处理。这两个工程难题都可以使用分布式系统来解决。

简单理解,分布式系统就是把一些计算机通过网络连接起来,然后协同工作。协同工作需要解决两个问题:

1)任务分解

把一个问题拆解成若干个独立任务,每个任务在一台节点上运行,实现多任务的并发执行。

2)节点通信

节点之间互相通信,需要设计特定的通信协议来实现。协议可以采用RPC或Message Queue等方式。

架构

集群系统主要有两种风格的架构:

client server(C/S)架构

任务分解

任务分成两部分,client和server。client和server执行不同的任务,client需要调用server来实现自己的任务。

节点通信

在基于B/S架构的设计中,广泛采用HTTP作为通信协议。

三层架构(多层架构,3-tier architecture, n-tier architecture)

这个架构是C/S架构的衍生,某些server可以再运行client任务,调用其他server,形成一个层次级联。多层架构的通信协议可以有多种。

数据库系统都会提供专用客户程序,来访问数据库。这个客户程序内部实现了数据库访问协议。

peer-to-peer架构

peer-to-peer的分布式系统中,各个节点都是对等的,运行同种类型的任务。各个节点协同工作,整个分布式系统对外看来,就像一台机器,只不过性能更强。这种p2p架构的分布式系统其实就是集群

分布式系统和集群的关系

分布式系统和集群从表面上看是很类似的,都是将几台机器通过网络连接,解决某个问题或提供某个服务。

从广义上说,集群是分布式系统的一种类型,即基于P2P架构的分布式系统。

从狭义上说还是可以做一些区分:

集群:所有节点一起工作,实现同一服务。一个节点挂掉,不会对集群有任何影响。

分布式系统:系统每一个节点,都实现不同的服务,如果一个节点挂了,这个服务就不可访问了。在实际部署中,分布式系统中的每个节点都可以是一个集群,这样可以提高服务的可用性,性能等。

关于集群的介绍,可以参考之前的博文《什么是集群》

tier和layer的区别

这两个词的中文翻译都是层,而且在各种架构描述中大量使用。他们之间有什么区别?

tier用来描述系统的物理架构,或者说基础设施(infrastructure)设计。不同的tier之间是互相独立的,可以单独部署、监控。

layer用来描述系统的逻辑层次结构。针对每一个tier,可以使用layer来描述其设计实现架构。通常不同layer之间是有依赖关系的(上层依赖下层),而且运行在同一个进程空间中,比如经典的TPC/IP分层(layer)设计。

分布式系统实例

openstack架构

openstack包含了若干个组件(component),nova ,neturon,cinder,keystone等。其中的每个组件都是一个分布式系统。关于openstack的介绍可以看我的博文,有好多篇。

以nova为例来分析下这个系统

任务分解

nova中的任务分解以service为单位,每个service提供不同的功能,service也会调用其他的service。每个service可以单独部署在一台物理机器上。nova中的service介绍可以参考《openstack学习之概念篇》

nova中的service分成两类:一类似乎基于REST访问,一类是基于RPC访问。REST服务提供给外部访问,RPC服务由openstack内部使用。

简易架构图

openstack中的这些service本身是无状态的,因此理论上可以实现集群部署。openstack中有状态的服务是消息队列和数据库系统(这两个服务共整个openstack使用,其他的component同样使用)。常用的消息队列是RabbitMQ,数据库是MySQL。在大规模部署时,这两个服务可能会成为瓶颈,可以考虑集群部署。

节点通信

openstack中存在两种通信协议:REST和RPC

调用图中的Rest API service使用REST协议,其余的服务使用RPC协议。conductor service访问数据库需要相应的客户端。

openstac中RPC基于消息队列实现,具体参考博文《openstack学习之RPC》

Java EE架构

Java EE这个架构非常经典,绝大多数的Web站点都是基于这个思路搭建的。不知道3-tier architecture是谁发明的,但大家可能都是通过Java EE学到这个概念的。Java EE其实就是这个3-tier architecture的细化和规范化。

通常的3-tier architecture自然包括3个tier:

来源于http://en.wikipedia.org/wiki/3-tier_architecture

任务分解

任务分成3部分:

展现层(presentation tier, or web tier)

给用户提供操作界面GUI来使用该系统。一般是生成页面,使用HTTP协议访问,在浏览器中展现。随着移动端的流行,需要生成适合移动端访问的页面。

Java EE中在这一层,提供了很多的技术与规范,来支持应用开发。

Servlet:web tier的基石。

JSP

Unified Expression Language (EL)

JavaServer Pages Standard Tag Library (JSTL) 1.2 1.2

JavaServer Faces (JSF)

业务逻辑层(business tier, or application tier)

具体的业务代码实现。web层会调用这一层。系统中的一些通用服务(所谓的cross cutting)也可以放在这一层来实现,如安全,日志等,数据检索等服务。

Java EE在这一层的技术与规范

Java API for RESTful Web Services (JAX-RS) :开发基于rest的服务。rest是目前的主流技术了。

Enterprise JavaBeans (EJB) :ejb的服务。早起的EJB过于复杂和笨重,不知ejb lite是否会好点。

Java Transaction API (JTA):事物处理API,支持XA协议。

Java Persistence API (JPA) :OR mapping API,源于Hibernate的API。

数据层

用来保存系统中的持久化数据。数据层的存储方式可以是:

关系数据库 + SAN storage

分布式文件系统(根据文本的描写,应叫文件系统集群)

NoSQL系统:NOSQL的数据模型,各不相同,产品也多种多样,根据业务特点选择。

Amazon的 S3

mongo

缓存

目前的web系统都会使用缓存来提高系统性能,传统的三层架构中没有谈到缓存。

缓存可以分成

数据缓存:比如memcached

页面缓存:如CSN系统

节点通信

Web层广泛采用HTTP作为通信协议。

业务逻辑层使用web service(REST).

数据层,不同产品有不同的协议。针对关系数据库,Java提供了JDBC访问接口。

什么是分布式系统,布布扣,bubuko.com

时间: 06-17

什么是分布式系统的相关文章

分布式系统中的CAP原理

分布式系统中的CAP原理,布布扣,bubuko.com

分布式系统定义及特点

一.分布式系统定义 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统. 二.特性 1.副本(Replica)是分布式系统最常见的概念之一,指分布式系统对数据和服务提供的一种冗余方式.在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理. 1)数据副本指在不同节点上持久同一份数据,当某一个节点上存储的数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题的有效手段. 2)服务副本指多个节点提供同样的服务

分布式系统领域有哪些经典论文

0 个回答 默认排序 知乎用户 机器学习 话题的优秀回答者 901 人赞同了该回答 谢邀!五一快乐!分布式系统在互联网时代,尤其是大数据时代到来之后,成为了每个程序员的必备技能之一.分布式系统从上个世纪80年代就开始有了不少出色的研究和论文,我在这里只列举最近15年范围以内我觉得有重大影响意义的15篇论文(15 within 15).1. The Google File System: 这是分布式文件系统领域划时代意义的论文,文中的多副本机制.控制流与数据流隔离和追加写模式等概念几乎成为了分布式

基于Dubbo的分布式系统架构完整教程

1课程介绍20分钟2使用Dubbo对传统工程进行服务化改造的思路介绍15分钟3使用Dubbo对传统工程进行服务化改造55分钟4ZooKeeper注册中心安装29分钟5使用Dubbo对传统工程进行服务化改造后的服务调用测试19分钟6使用Dubbo进行规模服务化前的工程结构优化35分钟7Dubbo管理控制台的安装21分钟8使用Maven构建Dubbo服务的可运行jar包46分钟9在Linux操作系统上手工部署Dubbo服务50分钟10构建Dubbo服务消费者Web应用的war包并在Tomcat中部署

大型网站架构系列:缓存在分布式系统中的应用(三)

本文是<缓存在分布式系统中的应用>第三篇文章. 上次主要给大家分享了,缓存在分布式系统中的应用,主要从不同的场景,介绍了CDN,反向代理,分布式缓存,本地缓存的常规架构和基本原理. 因为时间关于,原计划分享<缓存常见问题>的内容,没有讲.本次主要针对缓存的常见个问题,做一个介绍.主要有以下议题: 一.分享大纲 分享大纲 数据一致性 缓存高可用 缓存雪崩 缓存穿透 参考资料 分享总结 二.数据一致性 缓存是在数据持久化之前的一个节点,主要是将热点数据放到离用户最近或访问速度更快的介质

玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理

背景 在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出.当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力.日志存储多以文本文件形式存在,当有需求需要对日志进行分析挖掘时,这个处理起来也是诸多不便,而且效率低下. 为了方便对这些日志进行统一管理和分析,我们可以将日志统一输出到指定的数据库系统中,再由日志分析系统去管理.由于这里是mongodb的篇章,所以主观上以mongodb来做日志数据存储:客观上,一是

【D】分布式系统的CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP.之后,CAP理论正式成为分布式计算领域的公认定理. CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项. CAP的定义 Consistency 一致性 一致性指"all no

分布式系统---2 图灵奖获奖者Leslie Lamport的贡献

图灵奖牛人LeslieB. Lamport介绍 英文原文链接https://en.wikipedia.org/wiki/Leslie_Lamport Leslie B. Lamport,生于1941年,美国著名的计算机科学家,以发明分布式关键技术(特别是PAXOS).LATEX.TLA+知名,于2013年获得图灵奖.他1960年在MIT获得数学学士学位,1972年从Brandeis大学获得数学Ph.D,1970~1977在Massachusetts Computer Associates从事计算

分布式系统的事务处理【转】

转:http://coolshell.cn/articles/10910.html 当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题: 1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求. 2)我们总是害怕我们的这台服务器停机,造成服务不可用或是数据丢失. 于是我们不得不对我们的服务器进行扩展,加入更多的机器来分担性能上的问题,以及来解决单点故障问题. 通常,我们会通过两种手段来扩展我们的数据服务: 1)数据分区:就是把数据分块放在不同的服务器上(如:uid %

分布式系统(Distributed System)资料

这个资料关于分布式系统资料,作者写的太好了.拿过来以备用 网址:https://github.com/ty4z2008/Qix/blob/master/ds.md 希望转载的朋友,你可以不用联系我.但是一定要保留原文链接,因为这个项目还在继续也在不定期更新.希望看到文章的朋友能够学到更多. <Reconfigurable Distributed Storage for Dynamic Networks> 介绍:这是一篇介绍在动态网络里面实现分布式系统重构的paper.论文的作者(导师)是MIT