分布式系统简述
什么是集中式系统
所有对外提供的接口都由一个计算机或设备所提供的系统。它的特点是,当设备故障后,所有的接口都不可用。
如传统的RDBMS,由一个计算机提供数据管理功能。
什么是分布式系统
多个计算机或设备组合起来一起工作的系统。它的特点是在使用者看来,所有的接口看似都是由一个系统提供的;设备之间需要使用网络通信;某个设备发生故障后,其他的设备可能是可用的。
如WEB服务,存储服务和应用服务通过网络传输数据,当存储服务宕机后,应用服务可能还会使用缓存继续提供服务。
如电话服务,系统由转机和终端共同提供服务,各个设备通过电话线通信。
网络上很多文章所说的分布式大多数互联网的WEB系统,这是由于活跃着大多是WEB系统相关开发人员。但事实上分布式系统没有那么单一,也没有那么复杂,目前我们所使用的服务基本上都是分布式系统而分布式系统也仅仅是一组设备组成的工作集合。
为什么需要分布式系统
从分布式系统的特点说起,如果需要大数据量、高可用、可扩展、高性能,那么就需要分布式系统。
如:
- 电话系统使用分布式设计,目的是实现系统的灵活性和可用性。
- WEB系统使用分布式设计,目的是提高可用性和并发以及性能。
什么是分布式技术
多个计算机组合使用时,会面临一些问题,如网络通信、设备故障、并发等问题,而分布式技术就是为了解决这些问题的。
- RPC 技术解决多个设备的通信问题。
- 复制技术解决数据的备份问题和提升性能和并发。
- 分片技术解决数据存储量问题和提升性能。
- 分布式锁解决多个计算机组合时的并发读写问题。
- 分布式缓存解决多个应用服务时本地缓存的一致性问题。
- 分布式事务解决多个设备行为的一致性和隔离性问题。
- 。。。。。。
分布式系统的演变
集中式系统
非集中式系统
混合系统
分布式系统的优缺点
优点:
- 提升系统并发、性能、可用性、扩展性、伸缩性等能力;
- 节省成本,利用有限的计算机资源提供更好的服务;
缺点:
- 多个设备的操作一致性和并发问题;用户一个操作需要多个设备的多个操作时,如何实现操作失败后各个设备的回滚和并发操作时的问题。通常使用分布式事务技术尽可能的解决,最好的方式还是避免。
- 多个设备的数据一致性问题;无状态服务的复制无需关注,但有状态服务的复制由于通信延迟和并发原因会使得多个副本上数据不一致。通常使用一致性算法解决(Raft)。
- 多个设备的通信问题;由于需要通络进行通信,因此当网络故障或波动后就会造成设备之间的通信断开问题。通常使用重试和Fullback机制等解决。
- 设备的故障率问题;集中式系统只有一台设备,可以通过优化环境减小故障率,而分布式系统中多个设备组合使用加大了故障率。通常使用复制技术提升系统高可用。
- 。。。。。。
分布式系统的类型
实际上,一个系统可能不仅仅是由某一类型的分布式系统独立实现的,很可能是多个分布式类型的系统之间的相互组合,又构成一个大的分布式系统。
如WEB服务中,本身是一个分布式信息系统,但其中可能使用了分布式存储系统中的数据管理系统和消息系统,还可能使用了分布式计算系统用于实现数据的计算与分析。
分布式存储系统
技术点:通信、故障、复制、分片
- 数据库管理系统
-
- SQL;MySQL;
- NoSQL;Redis、Etcd。
- NewSQL;TiDB。
- 文件系统
-
- 分布式文件系统;GFS。
- 消息系统
-
- Kafka。
分布式计算系统
技术点:通信、复制
- 集群计算
-
- 拆分任务为多个子任务,集群设备执行多个子任务,最终汇总结果。目的是在低廉的集群设备上提升计算效率,避免高昂计算设备的使用。
- 网格计算(边缘计算)
-
- 在终端完成计算,数据传输到云端进行汇总。
分布式信息系统
技术点:分布式事务、分布式锁、通信
- WEB/互联网系统
-
- 互联网领域最常用的WEB系统。
- 企业系统
-
- CRM、OA、OpenAPI等一些为企业服务的系统。
分布式嵌入系统
技术点:通信、嵌入式
- 智能家电
-
- 智能家电属于小型的分布式系统,家庭中的各个家电设备组合起来一起工作,如一键回家、一键出门等,对用户来说,看到的是一个设备提供的服务,而内部是多个智能设备的组合。
- 移动设备
-
- 移动设备天然是一个分布式系统,多个终端设备和多个基站设备组合起来一起提供服务。用户只需要面对一个设备即可,而内部的通信等都是由内部其他设备完成。
集群与分布式系统
集群是特殊的分布式系统。分布式系统中各个设备可能自身不同或者做的事情不同,但集群中的各个设备都是对等的,设备一样,并且做得事情也是一样。
分布式系统基础
- 进程
-
- 进程使得设备可以同时处理多个通信请求,这在分布式中是非常必须的,分布式系统下一个设备通常需要同时处理来自不同设备的通信请求。
- 通信
-
- 分布式系统中各个设备的协作或交互都是依赖于通信技术实现。
- 命名服务
-
- 各个设备之间需要交互,但前提是必须感知到其他设备,因此需要命名服务参与。
- 时钟与排序
-
- 是
- 容错性
-
- 分布式系统下故障发生的概率远远大于集中式系统,因此必须避免或解决这些故障,所以分布式系统的容错性是非常必要的。
- 复制
-
- 由于分布式系统下多个设备交互产生的通信、逻辑等开销,因此性能会弱于集中式系统,使用复制技术可以实现更高的性能。同时还可以解决设备故障后的设备不可用问题。
- 无状态服务的复制很容易,只需要重新拷贝一个服务在其他副本设备即可。有状态服务的复制包含了数据本身的复制,由于数据复制产生的一致性问题,又需要共识算法保证。
- 分片
-
- 在分布式存储系统中,数据如果都存储在一个设备上,那么由于磁盘限制、网卡带宽限制、磁盘IO限制和资源等限制,分布式系统的 并发能力/性能 非常差,而使用分片技术后,将数据分散到多个分片设备上(等同于压力分散到多个分片设备上) ,每个分片设备存储不同的数据,所有分片的数据总和就是分布式存储系统所管理的所有数据。