什么是分布式系统


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

2)project领域的实际使用的分布式系统。

分布式系统是互联网应用的基石,是底层的支撑平台。

本文讲的分布式系统指这个层面。


互联网应用的特点是:高并发,海量数据。

互联网应用的用户数是没有上限的(取决于其开放特性),这也是和传统应用的本质差别。

高并发指系统单位时间内收到的请求数量(取决于使用的用户数),没有上限。海量数据包含:海量数据的存储和海量数据的处理。

这两个project难题都能够使用分布式系统来解决。


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

协同工作须要解决两个问题:

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


2)节点通信
节点之间互相通信,须要设计特定的通信协议来实现。协议能够採用RPC或Message Queue等方式。


架构
集群系统主要有两种风格的架构:
client server(C/S)架构

任务分解

任务分成两部分,client和server。

client和server运行不同的任务,client须要调用server来实现自己的任务。


节点通信

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


三层架构(多层架构。3-tier architecturen-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訪问数据库须要对应的client。


openstac中RPC基于消息队列实现,详细參考博文《openstack学习之RPC》


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

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

任务分解

任务分成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訪问接口。


原文地址:https://www.cnblogs.com/gccbuaa/p/6749791.html