这是我参与[第五届青训营]伴学笔记创作活动的第10天。
什么是分布式系统:
简单的来说,一个分布式系统是一组计算机系统一起工作,在终端用户看来,就像一台计算机在工作一样。这组一起工作的计算机,拥有共享的状态,他们同时运行,独立机器的故障不会影响整个系统的正常运行。我们现在举个例子,传统的数据库是存储在一台机器的文件系统上的。每当我们取出或者插入信息的时候,我们直接和那台机器进行交互。
相对官方的解释是,分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
分布式系统分类:
分布式计算机系统的体系结构可用处理机之间的耦合度为主要标志来加以描述。耦合度是系统模块之间互联的紧密程度,它是数据传输率、响应时间、并行处理能力等性能指标的综合反映,主要取决于所选用体系结构的互联拓扑结构和通信链路的类型。
按地理环境衡量耦合度,分布式系统可以分为机体内系统、建筑物内系统、建筑物间系统和不同地理范围的区域系统等,它们的耦合度依次由高到低按应用领域的性质决定耦合度,可以分成三类:
第一种是面向计算任务的分布并行计算机系统和分布式多用户计算机系统,它们要求尽可能高的耦合度,以便发展成为能分担大型计算机和分时计算机系统所完成的工作。
第二种是面向管理信息的分布式数据处理系统。耦合度可以适当降低。
第三种是面向过程控制的分布式计算机控制系统。耦合度要求适中,当然对于某些实时应用,其耦合度的要求可能很高。
特征及优缺点
特征:
- 系统中涉及的各个节点并行地工作。
- 这些节点的宕机事件是独立的。
- 这些节点之间没有一个全局时钟,也就是说各个节点的本地物理时钟是有偏差的。
优点:
- 可用性(容错性):分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器,仍可以正常对外提供服务。
- 可扩展性:可以通过线性的增加机器资源,来应对不断增长的外部需求。
- 资源共享:共享数据是必不可少的应用,如银行,预订系统。
- 灵活性:由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。
- 更快的速度:多地部署,将用户请求按地理路由到最近机房处理。拥有多台计算机的计算能力,使得它比其他系统有更快的处理速度。
- 开放系统:由于它是开放的系统,本地或者远程都可以访问到该服务。
- 更高的性能:相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
缺点:
分布式系统最大的问题是复杂性。
- 数据的一致性:考虑到大量的机器故障:宕机、重启、关机,数据可能丢失、陈旧、出错,如何让系统容纳这些问题,对外保证数据的正确性,需要相当复杂的设计。
- 网络和通信故障:网络的不可靠,消息可能丢失、早到、迟到、Hang住,这给机器间的协调带来了极大的复杂度。像TCP等网络基础协议,能解决部分问题,但更多的需要系统层面自己处理。更不用说,开放式网络上可能存在的消息伪造。
- 管理复杂度:机器数量到达一定数量级时,如何对他们进行有效监控、收集日志、负载均衡,都是很大挑战。
- 延迟:网络通信延迟要比机器内通信高出几个数量级,而组件越多、网络跳数越多,延迟便会更高,这些最终都会作用于系统对外服务质量上。