《分布式与云计算课程笔记》——2.1 分布式系统体系结构

Architectural styles更偏向于理论、逻辑上,关注对系统的分解

System architectures更偏向于实践,实际中


目录

 

一、体系结构的样式 Architectural styles

1、分层体系结构

2、基于对象的体系结构

3、Resource-based

4、Publish-subscribe架构

二、MiddleWare Organization

1、使用遗留应用建立中间件

2、截取控制流 Intercept the usual flow of control

三、系统体系结构 System architectures

1、集中式体系结构

2、非集中式体系结构:P2P系统(重点,2.2讲)

3、混合体系结构


一、体系结构的样式 Architectural styles

根据组件、组件之间相互的连接方式、组件之间的数据交换以及这些元素如何集成到一个系统中来定义。

  • 组件Component:一个模块单元,可以提供良好定义接口,在其环境中是可替换的。
  • 链接器Connector:在组件之间传递通信、使组件相互协调和协作。

通讯对于分布式系统的架构的影响非常大,不同的通讯方式导致不同的架构,通讯的花费占据了很大的比例。

架构类型:分层、面向对象

根据组件和连接器的使用,划分成不同体系结构

1、分层体系结构

分层架构是最常见的,大部分企业级应用都是分层的,比如OSI七层协议。分层最大的好处是能够使系统构造简单,与分层相对应的架构就是面向对象的,两者区别在于分层架构的通讯比较少,因为标准分层架构中,只有在相邻的两层之间才会发生connector,而且connector一般体现为downcall,上层调用下层(下层向上层提供服务),所以如果n层,connector只有n-1层。系统容易构建,分层逻辑清晰。但如果面向对象,ncomponents可能n*(n-1)connector。比如javaEE开发的应用也是分层的。

分层架构不仅简单,而且系统灵活性更高,因为下层对上层是黑盒的,很容易一层一层替换。比如TCP/IP可以在有线或者无线网上跑。

分层架构不足:

1. 调错不容易(黑盒是双刃剑,底层系统是黑盒,出错不报错,没有暴露)

2. 性能损失,因为调用耗时,系统分层越多性能损失越大,所以就有跨层调用

跨层调用理论上不符合分层调用的原则,但对整个分层协议负面影响不大,实际跨层是很常用的提高性能的手段,比如无线传感网。

注意:第三种(upcall)尽量避免,会有非常负面的影响,是对整个分层协议的颠覆,尽量避免。因为除非特别特殊的情况,一般不用。因为分层协议的本质是黑盒的,上层只知道下层提供的服务,下层完全不知道上层,而如果upcall,对整个系统破坏性非常大。

总之,组件组成了不同的层,其中上层中的组员可以调用下面的层。

2、基于对象的体系结构

每个对象都对应一个组件,这些组件是通过(远程)过程调用机制来连接的。

面向对象的架构 对比分层使用的概率小得多,因为是网状结构,较为复杂。注意面向对象的架构不是面向对象的语言,不是具体实现,而是架构风格(面向对象语言使用非常多)

3、Resource-based

Restful architectureView a distributed system as a collection of resources, individually managed by components.

核心:和CS架构相似,把数据放在后端。不同之处是把web作为数据库,通过web协议对数据进行操作。CS架构使用JDBC等数据驱动,用sql语句对数据操作,CS架构的问题是不能在广域网进行操作,只能在局域网,但web架构肯定是广域网。

RestfulHTTP协议的四个请求,对应数据的增删改查操作,把前端的GET请求解析成对数据的query(主要取决于后端解析)。把HTTP协议转化为对资源进行操作的协议。所以理论上就是对数据对象进行操作,用面向对象的架构也可以,通过URI区分数据对象。

Restful协议是最简单的协议,写程序也很简单,用URI映射。

通过改造WEB服务器,HTTP协议之间都是web服务器解析。而现在web的服务器都支持rest,实际就加了一个几百K的包,rest架构开发较为简单,下一个demo一天搞定,因为只有对资源的增删改查。

例如亚马逊的简单存储服务S3也是使用URI进行资源定位,也是用HTTP操作。

Rest被几乎所有云计算支持,分布式系统有很多种,但最成熟的是分布式存储系统,所以云计算首先提供的服务就是云存储,即对资源增删改查。但是云存储有很多种,比如亚马逊S3存储和谷歌的完全不同。谷歌是专用的(虽然开源),亚马逊是通用的,更专注通用性。

多提一嘴:

亚马逊的简单存储服务就是采用分布式键值存储比如数据结构 hash、map就是,非常常用的存储方式)有一类特殊的P2P系统就是采用分布式key-value,非常常用的存储方式,也归类于面向对象的架构,即value就是object。

另外还有总线结构,也比较常用:

和前面最主要的区别就是通讯。前面分层和面向对象架构,component之间的关系是调用,调用属于同步通讯,即客户在得到服务之前会阻塞,关系比较紧密,可扩性差。异步通讯比较松散。从可扩性的角度,松散的系统可扩展性更强。所以异步系统component更多,系统更大。但是异步系统难管理(通讯不知道什么时候回来,需要事件驱动),编程不确定高,测试什么都很困难。

所以现实中引入总线结构:event-bus

由component之间相互发变成component发给总线,总线处理后再发给相对应component(就好像写信的邮局)。把m*n转换为m*1和1*n的。数据库也是,表和表多对多很难。总线结构既有异步的好处,又降低管理的复杂性,系统更简单,更容易构造。

4、Publish-subscribe架构

即星型结构,部分规模大的异步系统,往往都是实现总线或者星型结构。

先注册后通知,再来查询,变成点状结构,星型结构,也是常用的方式来实现异步。

二、MiddleWare Organization

1、使用遗留应用建立中间件

遗留应用:各种信息化系统不相通,即非统一开发系统,语言、数据库、平台都不一样,为了信息化如何整合到一切:能不能互操作、安全问题,最早只能开放数据库。

解决办法:Wrapper

设计模式:适配器模式(偏代码级,往代码底层去的)
在 Enterprise Application Integration EAI 企业应用集成 :一旦想要开放哪个功能,把功能封装成web service提供调用。
虽然web服务性能很差,但最大的优点就是可以遗留应用集成,web service语言独立(传递返回都是xml格式),打破信息孤岛。

图中Wrapper就是在外面包裹了一层web service。这个架构也可以通过一个broker来实现,broker设计模式。

2、截取控制流 Intercept the usual flow of control

一个非常重要的编程模式,AOP Aspect Oriented Programming,面向切面编程。面向切面中一个很重要的概念就是拦截flow of control。
AOP一定要有容器的支持,例如web是基于web容器 ,javaEE的应用服务器也是一个容器,容器可以拦截用户的请求。

三、系统体系结构 System architectures

从系统实现的角度讨论架构。

分类:中心化Centralization和去中心化Decentralization

区别:去中心化有多个服务器(但也是有服务器的)

  • Centralized集中式:单个服务器
  • decentralized:多个服务器(企业中更常见)
  • distributed:无服务器的

服务器最大的坏处是容易导致瓶颈(单点),但是最大的好处就是系统简单,管理容易很多。没有服务器就是可扩展性好得多,但系统非常复杂,不管是算法还是系统的管理。

需要服务器的例子:QQ联系需要IP地址(建立链接),但每次上线IP地址可能会变(不同地方)。所以需要注册服务器,服务器的IP地址是固定的,上线后和先服务器建立联系,然后把自己IP注册进去,后续查找很容易。所以有服务器会容易很多,性能也高。哪怕单点失败,性能瓶颈。P2P查找难度大很多。

在云平台也面临架构的选择,节点很多进行大规模计算,也需要面临大规模节点如何组织的问题。首要决策就是要不要服务器,比如谷歌的云计算是集中式系统(即有服务器),亚马逊是非集中式。

1、集中式体系结构

客户-服务器的交互方式,又被称为请求-回复行为。

客户-服务器模型分为三层:

  1. 用户接口层,用于与用户交互;
  2. 处理层,包含应用程序;
  3. 数据层,管理要使用的实际数据。

多层体系结构:

分层架构从实现的角度也是有很多不同的,即分割方式不一样。

(a)类似javaEE的JSP,用户界面有一部分在后台,JSP是用来在服务器端设计界面。

(d)则是最基本的CS架构。

2、非集中式体系结构:P2P系统(重点,2.2讲)

3、混合体系结构

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日光沉寂的半海21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值