分布式系统是建立在网络之上的软件系统,此定义包含了两个关键点
本文以具备多个功能模块的业务软件为例,介绍分布式系统的相关知识。数据库软件、中间件软件可以认为是具备一个功能模块的业务软件。
一般情况下,软件系统包含多个功能模块,这些功能模块相互协调合作,向用户提供各类服务。
在单体系统中,这些功能模块在一个工程中,模块之间的调用都在本地完成,不经过网络,最终单体系统经过编译打包后,部署在一台服务器上。
分布式系统同样也是一个软件系统,它同样包含了多个功能模块。不同的是,这些功能模块被部署在不同的服务器节点上(分布式,即分布在不同的服务器节点上),这些模块之间的交互需要通过网络完成。
为何要使用分布式系统?
S: 用户请求量大或数据量大,单体系统无法有效响应请求或处理数据。
T: 单体系统问题实质是物理层面单台服务器的性能不够问题,其根本解决办法是提高服务器性能。
A:对单体系统的切分是功能模块层面,这些功能模块可以认为是一项任务,这些任务分布在不同的服务器上。常见三种切分方式
S: 以具备A、B、C三个模块的单体系统为例,单体系统的部署情况为 服务器1(A、B、C)
水平切分
服务器1(A、B、C) <----> 服务器2(A、B、C)<----> 服务器3(A、B、C)
箭头表示存在交互关系
垂直切分
服务器1(只有A) <----> 服务器2(只有B)<----> 服务器3(只有C)
箭头表示存在交互关系
混合切分
服务器1(只有A) <----> 服务器2(只有B1) <----> 服务器3(只有B2)<----> 服务器4(只有C)
A B C垂直切分,B1、B2水平切分
箭头表示存在交互关系
分布式系统实质是分布式部署系统,其特点是功能模块部署在不同的服务器上,通过网络交互。
微服务是一种软件架构设计思想,强调在业务层面将大的功能拆分为小的服务模块,是上文的切分过程。而分布式是在系统切分完成之后,强调系统部署包分布在不同的服务器上面。