目录
一、分布式系统简介
1、分布式系统的定义
2、分布式系统存在的意义
二、大型网站站点演进方式
三、分布式系统
四、MogileFS
一、分布式系统简介
1、定义
系统的各组件分布于网络上多个计算机,各组件彼此直接仅仅通过消息传递来通信并协调行动
2、分布式系统存在的意义
1)单机向上扩展的性价比越来越低
2)单机扩展存在性能上升临界点
3)出于稳定性及可用性考虑,单机会存在多方面的问题
3、多线程编程模型
多cpu,多线程编程:
互不通信的多线模式 (性能最好,开销最少)
基于共享容器协同的多线程模式(COW:Copy On Write)
通过事件协同的多线程模型
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(2段式提交),BASE,CAP,Paxos
二、大型网站站点的架构演进方式
LAMP,LNMT,LAMT
应用从资源占用的角度分两类:
CPU Bound(密集型):mysql查询
IO Bound
减少同一资源的争用:
单机-->多机
1、单机LNMT-->应用程序服务器和数据库分离
2、-->应用程序服务器负载均衡(session保持问题)
session 保持三种解决方案:
1)session sticky 绑定
ip based
cookie based
2)seession replication 复制
3)session server 服务器
3、-->mysql主从
引入mysql主从面临的问题:
1)数据复制的问题
数据不一致:从节点落后于主节点
主节点可以多CPU读写可以并行,而二进制日志只能串行记录,从节点从主节点串行复制二进制日志
2)应用选择数据源的问题
4、-->构建搜索引擎(本质上是一个读库)
5、-->缓存服务器
一致性哈希
1)页面缓存
varnish,squid
2)数据库缓存
key-value store:memcached
6、-->mysql主库写操作压力:数据库拆分
1)垂直拆分:把数据库中不同的业务的数据拆分到不同的数据库服务器中
单机的ACID保证被打破:要么放弃事务,要么引入分布式事务
一些join(连表)查询操作将变得非常困难
原来依赖外键实现的约束将无从保证
2)水平拆分:把一个单独的表中的数据拆分到多个不同的数据库服务器上
将需要使用规则服务器
单机的ACID保证被打破:要么放弃事务,要么引入分布式事务
原来依赖外键实现的约束将无从保证
自增序列的ID号的产生会产生影响
针对单张表的查询很有可能要跨库操作
分布式事务的实现
事务:事务参与者、支持事务的服务器,资源服务器,事务管理器
1、分布式事务的模型及规范
X/Open:XA(分布式事务规范)
X/Open DTP(分布式事务处理参考规范)定义了三个组件
AP:应用程序,即使用DTP模型的程序
RM:资源管理器,即DBMS系统
TM:事务管理器,负责协调和管理事务条例,提供给AP应用程序编程接口并管理R
2PC:两段式提交
Two Phase Commitment Procotol
CAP:2007年,Eric Brewer
C:Consistency 一致性
任何一个读操作总是能够读取之前完成的写操作
A:Availability 可用性(指的是快速获取数据)
每一次操作总是能够在确定的时间返回
P:Tolerance of network Parttion 在出现网络分区的情况下,仍然能够满足一致性和可用性
任何一种分布式系统最多只能同时满足上述三项中的两项,因此分布式系统的目标
AP:放弃C,大多数分布式系统都选择此项(并不是真正放弃,而是通过其它方式实现)
CA:放弃p
CP
ACID:事务的测试标准
BASE:
BA:Basically Availibale 基本可用
S: Soft state 接受一段时间内的状态不同步
E:Eventually Consisstent 最终一致性
服务器一致性
N:节点的个数
w:更新的时候需要确认已经被更新的节点个数
R:读数据的时候读取数据的节点个数
W+R>N 强一致性
W=N,R=1 最佳读
W=1,R=N 最佳写
W+R<=N 弱一致性
7、-->CDN
gslb(全局服务负载均衡系统)
8、-->应用拆分
根据业务特性拆分,
根据用户拆分:
用户注册
用户登录
用户信息维护
根据对底层应用的调用拆分:
异步:解耦
消息中间件:MOM(Message-Oriented Middleware)
在分布式系统中,完成消息发送和接收的基础性软件
RabbitMQ,ActiveMQ,ZMQ
NoSQL:非关系型数据库
文档数据库
列式数据库
。。。
DFS(分布式文件系统):非结构化数据
TFS,MogileFS:适用于存储海量小文件
HDFS,GFS:少量大文件
三、分布式存储(文件系统)
1、分布式系统挑战
节点间通信
数据存储
数据空间平衡
容错
文件系统支持
2、分布式文件系统设计目标
访问透明
位置透明
并发透明(加锁)
失效透明(冗余)
硬件透明
可扩展性
复制透明:
迁移透明:
3、分布式文件系统或存储解决方案
GFS:Google File System
HDFS:Hadoop Distributed File System (分布式文件系统)
namenode:名称节点 中心节点(存储元数据) 元数据存储在内存中
datanode:数据节点
使用场景:数量不太多的大文件。百万级没问题,通常所说的海量指亿级别
TFS:Taobao FS 将元数据存储于关系型数据库或其它高性能存储中,从而能维护海量文件元数据
使用场景:海量小文件
GlusterFS: 去中心化的设计模式 (越来越流行)
ceph:linux内核级实现的文件系统,已经被直接收录进Linux内核(现在还不稳定,BUG较多)
轻量级文件系统(也可以达到千万):
MooseFS:mfs
MogileFS:
FastDFS:
四、MogileFS
1、MogileFS结构
tracker:追踪器,追踪元数据, http协议
mogilefsd(守护进程),它的主要职责包括:
replication:节点间文件的复制
deletion:删除文件
queryworker:响应客户请求的文件元数据访问请求
reaper:在存储失败后将文件复制请求重新放置于队列中
monitor:监测主机和设备的健康状态
database:存储元数据
一般使用mysql,建议使用冗余方案以保证七可用性
mogilefs专门提供了数据管理工具mogdbsetup;
storage:存储数据, http协议,nfs协议
mogstored(进程名),一个准备好的mogstored节点可通过mogadm命令添加至现在的集群中,存储节点需要定义“设备”用作存储空间,每个设备在当前集群中都需要通过唯一的DevID来标识
client:客户端用于与mogilefs建立通信,完成数据存取
2、Mogilefs特性
1)工作于应用层:http,nfs
2)无单点故障
3)自动完成文件复制
4)传输无需特殊协议
5)名称空间(完成复制)
6)不共享任何数据
3、常用术语
Domain:name space 命名空间 一个mogilefs可以有多个Domain,用来存放不同文件,同一个Domain内key必须唯一
不同mogilefs内,key可以相同
class:最小复制单元
定位文件:Domain+fid
4、安装Mogilefs
node5:192.168.100.175 mysql tracker
node6:192.168.100.179 storage
node7:192.168.100.180 storage