分布式概念
定义
将不同的组件分布在不同的服务器上,给用户提供一个可靠、统一的服务。
分布式系统的基本原则
- C 一致性
- A 可用性
- 在多机部署的基础上,使用负载均衡、服务注册等技术,保证对用户提供的服务是可用的,不会因为某个服务器的出错、或者服务的出错,使得整个系统不可访问。
- P 分区容错性
- 通过服务拆分进行多机部署
- 通过服务拆分进行多机部署
实现一致性
- 强一致性
- 弱一致性
- 如买票系统用户可能看见一个中间结果,即付款了但是票还没有买到,但是等个一小会业务就会完成。
- 最终一致性
BASE理论
- Basically Available 基本可用
- Soft state 软状态
- Eventually consistent 最终一致性
相当于CAP原则中的一致性和可用性的权衡结果
分布式系统构建
几种分布式系统
多数据源
这种结构就是分布式系统的基本单元
多服务
SOA
访问多个服务时需要进行服务的配置、编排。十多年前流行,现在过时了,因为太复杂。
微服务架构
现在用的最多的就是微服务架构
分布式系统需要考虑的问题
- 服务拆分
- 数据拆分
- 计算拆分
- 服务状态以及异常处理
微服务架构的组成
- 服务发现与注册
- 每个服务都需要在服务注册中心注册,调用时通过服务网关获取服务的地址
- 服务网关与负载均衡
- 当一个服务注册了多个实例时,可以通过负载均衡的方式去调用
- 监控与熔断机制
- 监控一个服务的多个实例,如果出错了怎么处理
- 配置、消息等
- 提供一个统一的配置中心,修改配置的时候直接在配置中心修改然后通过某种方式刷新服务即可,而不用重启所有服务
- 提供一个统一的配置中心,修改配置的时候直接在配置中心修改然后通过某种方式刷新服务即可,而不用重启所有服务
Spring Cloud 微服务架构
RPC
概述
分布式系统与单处理机系统的最重要的区别时进程间的通信,单机处理系统的通信可利用共享存储器。要完成进程间通信就必须遵守规则即协议。
协议的发展:OSI模型、ATM模式、客户-服务器模型、RPC(远程过程调用)、WEB服务。
尽管客户-服务器模式为分布式系统提供了一种便利的方法,但它存在无法克服的缺陷:**其所有的通信建立的基础都是输入/输出,**以它为基础构建分布式会产生应用问题。
RPC(remote Procedure Call)是一种分布式系统的构造技术,RPC操作一般在本地进程进行过程调用,而在异地计算机上执行调用。采用RPC技术简化了分布式程序的设计,设计者可不必考虑程序间的通信问题,只须考虑程序单元间的同步和出错等问题。
RPC的设计问题
- RPC的基本原理
- 让本地计算机中的某个过程调用远地计算机的另外一个过程。
- 执行过程
- 本地过程通过消息传递机制将过程调用请求消息传送到远程的一个进程,该过程收到此调用消息,执行被调用过程,然后通过应答消息返回执行结果给调用过程。
- 与传统的过程调用不同的是参数调用;原因是两台机器的操作系统管理自己不同的地址空间
事务的ACID性质
概述
- 是什么是事务(本地事务)
- 对同一个数据源,进行一组相关的sql操作(至少两个,增删改),要么全部成功,要么全部失败(原子性)
- 事务的四个特性ACID:
- 原子性(Atomicity):同生共死(要么全部成功,要么全部失败)
- 一致性(Consistency):相互匹配(买方-200,卖方+200;支付状态0->1时,订单状态0->1)
- 隔离性(Isolation):并行不扰:理论上,并行的两个事务,相互之间是不干扰的。
- 持久性(Durability):落子无悔(不可逆)