分布式系统的设计关键

分布式系统是指位于联网计算机上的组件,仅通过消息传递来通信和协调其行为的系统。

分布式系统具有以下特征:

DISTRIBUTED SYSTEM TYPES

组件具有并发性(Concurrency of components)

没有全局“时钟”( Lack of a global ‘clock’ )

允许单点故障( Independent failures of components ‘acceptable’ )

集中式系统特点(CENTRALIZED SYSTEM CHARACTERISTICS)

不具备自治能力的单一组件

用户始终共享组件

能访问所有资源

应用在单个进程中运行

单点控制

单点故障

分布式系统特性(DISTRIBUTED SYSTEM CHARACTERISTICS)

多个自治组件

用户间不共享组件

资源可能无法访问

软件运行在不同的并发进程中

处理器

多个控制点

多故障点

分布式系统的例子(EXAMPLES OF DISTRIBUTED SYSTEMS)

谷歌数据中心、局域网和内部网、数据库管理系统、自动柜员机(ATM)网络、互联网/网络、移动和普适计算、

谷歌数据中心(GOOGLE DATACENTERS)

GOOGLE DATACENTERS

局域网(LOCAL AREA NETWORK)

LOCAL AREA NETWORK

数据库管理系统(DATABASE MANAGEMENT SYSTEM)

DATABASE MANAGEMENT SYSTEM

自动柜员机网络(AUTOMATIC TELLER MACHINE NETWORK)

AUTOMATIC TELLER MACHINE NETWORK

互联网(INTERNET)

INTERNET

万维网(WORLD-WIDE-WEB)

WORLD WIDE WEB

WEB服务器和WEB浏览器(WEB SERVERS AND WEB BROWSERS)

 WEB SERVERS AND WEB BROWSERS

移动和普适计算(MOBILE AND UBIQUITOUS COMPUTING)

MOBILE AND UBIQUITOUS COMPUTING

共同特征(COMMON CHARACTERISTICS)

当我们构建一个分布式系统时,我们想要实现什么?

用于评估分布式系统的某些公共特征

异构性、开放、安全、可伸缩性、故障处理、并发性、透明度。

异构系统(HETEROGENEITY)

异构系统在以下方面表现出多样性和差异化

网络、计算机硬件、操作系统、编程语言、由不同开发人员实现

中间件作为软件层抽象,屏蔽底层网络、硬件、操作系统和编程语言的异构性。

移动代码:可以从一台计算机发送到另一台计算机,并在目标计算机上运行的代码(例如,Java applet和Java虚拟机)。

开放性(OPENNESS)

开放性涉及分布式系统的扩展和改进。

需要发布组件的详细界面。

必须将新组件与现有组件集成。

必须解决不同处理器(不同供应商)上的接口数据表现差异。

安全(SECURITY)

在分布式系统中,客户端发送请求来访问服务器管理的数据、网络中的资源,需要安全认证:

隐藏的消息内容:正确标识远程用户或代理

新的挑战:拒绝服务攻击、移动码的安全性

可伸缩性(SCALABILITY)

分布式系统的适应性

容纳更多用户

反应更快(这是艰难的)

通常通过添加更多和/或更快的处理器来完成。

当系统规模增加时,不需要更改组件。

设计组件可扩展!

故障处理(容错) FAILURE HANDLING (FAULT TOLERANCE) 

即使在低水平的硬件/软件/网络下,分布式系统也必须保证可用性。

容错:恢复(recovery)、冗余(redundancy)

并发性(CONCURRENCY)

分布式系统中的组件在并发进程中执行。

组件访问和更新共享资源(例如变量,atabases,设备驱动程序)。

如果不协调并发更新,则可能违反系统的完整性:

丢失修改

不一致分析

透明度

用户和开发人员应该把分布式系统看作一个整体,而不是协作组件的集合。

透明度有不同的层面。

透明度是分布式系统应具有属性。

访问透明度

允许使用相同的操作访问本地和远程信息对象。

如:NFS中的文件系统操作。 如:在Web中导航。 如:SQL查询。

位置透明性

不知道信息对象位置的情况下仍能访问信息对象。

如:NFS中的文件系统操作。

如:网页。

如:分布式数据库中的表。

并发的透明度

允许多个进程同时使用共享信息对象,而互不产生干扰。

如:NFS。

如:自动柜员机(ATM)网络。

如:数据库管理系统。

复制透明度

允许使用多个信息对象实例来提高可靠性和性能,而用户和应用程序无需了解副本。

如:分布式DBMS。

如:镜像网页。

失败的透明度

能够隐藏故障

尽管其他组件发生故障,仍允许用户和应用程序完成其任务。

如:数据库管理系统。

移动透明度

允许在系统内移动信息对象,而不会影响用户或应用程序的操作。

如:NFS。

如:网页。

性能透明

允许在负载变化时重新配置系统以提高性能。

如:分布式。

扩展透明度

允许系统和应用程序按比例扩展,而无需更改系统结构或应用程序算法。

如:万维网。

如:分布式数据库。

常见设计问题

通用软件工程原理包括严谨和正式,关注点分离、模块化、抽象、变更预期。

分布式系统的具体问题:命名、沟通、软件结构、系统架构、工作负载分配、一致性维护。

NAMING

翻译成可解释的资源引用形式。

通信标识符(IP地址+端口号)

名称解析涉及多个翻译步骤

设计注意事项

为每种资源类型选择名称空间

名称服务,以将资源名称解析为comm. id。

命名服务包括命名上下文解析、层次结构、资源保护。

通讯

分离的组件使用发送过程和接收过程进行通信,以进行数据传输和同步。

消息传递:发送和接收原语(primitives)

同步或阻塞

异步或非阻塞

抽象定义:channels、sockets、ports。

通信模式:客户端 - 服务器通信(例如,RPC)和组播。

集中式系统中软件结构的分层

集中式系统

分布式系统中的软件结构分层和依赖项

分布式系统中的软件结构分层和依赖项

系统架构

客户端-服务器(Client-Server)、点对点(Peer-to-Peer)、由多个服务器提供的服务、代理服务器和缓存、移动代码和移动代理、网络计算机、瘦客户端和移动设备。

客户端调用独立服务器

CLIENTS INVOKE INDIVIDUAL SERVERS

点对点系统

 PEER-TO-PEER SYSTEMS

由多个服务器提供的服务

A SERVICE BY MULTIPLE SERVERS

WEB代理服务器

WEB PROXY SERVER

WEB小程序

WEB APPLETS

a)客户端请求导致下载applet代码

b)客户端与applet交互

瘦客户端和计算服务器

 THIN CLIENTS AND COMPUTE SERVERS