分布式系统意义:
- 升级单机处理能力的性价比越来越低
- 单机处理能力存在瓶颈
- 稳定性和可用性
基础理论
多进程
- 多线程共享了进程的内存空间,多进程内存空间是独立的。
- 多进程的单个进程出现问题,有可能不会造成整体不可用(取决于实现)
多线程
- 基于共享容器协同的多线程模式
- 使用线程安全的容器和对象
- 使用锁
通过事件协同的多线程模式
- A线程需要等待B线程传递消息或事件
- A线程与B现成获取锁的顺序有问题产生了死锁
网络IO实现方式
BIO 阻塞
Socket套接字需要使用一个线程来处理,若要支持更多的并发,就需要更多的线程。
NIO 非阻塞
基于事件驱动思想,采用Reactor模式(反应堆)
通过 Reactor 对所有的客户端Socket做处理,分发到不同的线程中处理。
AIO 异步IO
采用Proactor模式,
NIO的通知是发生在动作之前,比如可读可写的时候,进行读写
AIO的通知发生在动作之后,比如读写已经完毕,发出通知
如何从单机扩展到分布式
业务拆分,业务分层,多业务多机
服务化
透明代理,比如负载均衡
非透明代理,服务提供者
名称服务模式,收集处理服务器的调用列表,提供给请求服务器,由请求服务器进行负载均衡工作
规则服务模式,不仅仅收集处理服务器的调用列表,还提供请求服务器应该请求哪个具体的处理服务器
master->worker 模式,这种方式刚多的关注任务的分发与管理
分布式系统的难点
- 全局时钟
- 单点
- 分布式事务
最终一致性
ACID 事务具有的属性,原子性,一致性,隔离性,持久性
CAP 一致性,可用性,分区容错性。分布式系统无法实现 CAP
BASE 基本可用,柔性事务,最终一致性
服务框架
业务拆分,应用之间没有交互,或者很少交互
数据访问层
分布式事务:分布式事务规范->XA,事务参与者,支持事务的服务器,资源服务器,事务管理器
两阶段提交,传统是提交,或者回滚。两阶段提交在提交之前增加了准备阶段。问题比较多。必要的情况下建议使用。
比两阶段提交更轻量的是Paxos协议
其他
ID 发号器
消息中间件