一、分布式系统简介
1、定义
系统的各组件分布于网络上多个计算机,各组件彼此直接仅仅通过消息传递来通信并卸掉行动
2、分布式系统存在的意义
1)单机向上扩展的性价比越来越低
2)单机扩展存在性能上升临界点
3)出于稳定性及可用性考虑,单机会存在多方面的问题
3、多线程编程模型
互不通信的多线模式
基于共享容器协同的多线程模式
通过事件协同的多线程模型
4、网络IO
多进程:每个进程响应一个请求
多线程:每个进程生成多个线程,每线程响应一个请求
或者每线程直接响应多个请求
5、基于socket实现网络通信开发,其实现方式
BIO:Blocking IO
一个进程或一个线程处理一个请求
阻塞IO模式
每一个连接都需要占用一个socket
NIO:Nonblocking IO
基于事件驱动(epoll)思想,采用Reactor模式
socket分配1个线程,1个线程可以处理多个socket相关的工作
AIO:
异步模式
基于事件驱动思想,采用Proactor模式
6、如何把应用从单机扩展至多机
输入设备的变化?
输出设备的变化?
控制器的变化?
从计算机内部的cpu编程了节点服务器
实现的模式:
透明代理:
LVS的NAT
haproxy,nginx
旁路模式:LVS的DR模型
名称服务:DNS
规则服务:
Master/slave机制:
运算器的变化?
存储器的变化?
7、分布式系统实现的难点
缺乏全局时钟?
面对故障时的独立性?
如何处理单点故障?
事务处理
ACID:
2PC,BASE,CAP,Paxos
二、大型网站站点的架构演进方式
LAMP,LNMT
应用从资源占用的角度分两类:
CPU Bound(密集型)
IO Bound
减少同一资源的争用:
单机-->多机
引用mysql主从面临的问题:
1)数据复制的问题
2)应用选择数据源的问题
A:1-->2-->3
B: 1-->2-->3
输入设备的变化
控制器的变化:
透明代理
旁路模式
名称服务
规则服务器
运算器的变化:
存储器的变化:
代理模型
名称服务
规则服务器
Master