分布式系统
分布式系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。
加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。Brewer认为在设计一个大规模的分布式系统时会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partition-tolerance),而一个分布式系统最多只能满足其中的2项。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。
本博文主要参考资料:
- 《分布式系统概念与设计》
- “分布式系统 MIT”课程
- 对于靠前的内容主要学习概念,靠后的内容关注具体技术
分布式系统的重要理念
- 并行
- 容错
- 解决物理问题
- 解决安全问题
分布式系统的主要挑战
- 异构型:计算机和网络存在异构型
- 开放性:系统组件的关键接口是否开放
- 安全性:系统内信息的机密性、完整性和可用性
- 可伸缩性:能够面对不同规模高效运转
- 故障处理:故障检测、容错、故障恢复等
- 并发性:要在并发环境中保证操作正确
- 透明性:对用户和应用程序员屏蔽分布式系统组件的分离性
- 服务质量:保证可靠性、安全、性能等
分布式体系结构
- 通信实体:对象、组件、web服务
- 通信泛型:进程间通信、远程调用(RPC)、间接通信
进程间通信
进程间通信基于传输层TCP和UDP协议,体现为套接字、消息传递、组播、覆盖网络等内容。其中组播指发送方将IP数据包传送给组成组播组的一组计算机;覆盖网络的概念指在已有网络的基础上构造不同的虚拟网络,对应特定的分布式应用。
远程调用
远程调用,是进程间函数的相互调用,是进程间通信 IPC(Inter-Process Communication)的一种方式。通过远程调用,一个进程可以看到其他进程的函数、方法等。从这一角度,根据进程是否部署在同一台机器上,远程调用可以分为如下两类:本地过程调用(Local Procedure Call,LPC),是指运行在同一台机器上的进程之间的互相通信,即在多进程操作系统中,运行的不同进程之间可以通过 LPC进行函数调用。远程过程调用(Remote Procedure Call,RPC),是指不同机器中运行的进程之间的相互通信,某一机器上运行的进程在不知道底层通信细节的情况下,就像访问本地服务一样,去调用远程机器上的服务。
最基础的请求-应答协议基于套接字实现,两种常用的远程调用机制为远程过程调用 RPC(Remote Procedure Call) ;以及远程方法调用 RMI(Remote Method Invocation)。
请求-应答协议
远程过程调用 RPC
RPC 就是调用方采用参数传递的方式,通过调用本机器上的一个函数或方法,去执行远程机器上的函数或方法(可以统称为服务),并返回结果。在整个过程中,RPC 会隐藏具体的通信细节。
注意HTTP通讯就是RPC的一个实例,后端服务器之间可以直接采用HTTP协议进行通讯,但是定制RPC可以设计更加符合应用场景的高效通讯方式。
远程方法调用 RMI
与 RPC的区别:RMI支持对象应用作为参数传递。远程一旦接收对象引用,就能够使用远程调用方法访问该对象,而不是通过网络传输对象。
间接通信
中间件
分布式文件系统
名字服务
时间和全局状态
协调和协定
事务和并发控制
关键词
- 微服务
- 集群
- RPC