您的位置:首页 > 其它

分布式系统基础及MogileFS

2015-12-25 18:00 417 查看
目录
一、分布式系统简介
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-->应用程序服务器和数据库分离
[b]2、-->应用程序服务器负载均衡(session保持问题)[/b]
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 ProcotolCAP:2007年,Eric Brewer C:Consistency 一致性 任何一个读操作总是能够读取之前完成的写操作 A:Availability 可用性(指的是快速获取数据) 每一次操作总是能够在确定的时间返回 P:Tolerance of network Parttion 在出现网络分区的情况下,仍然能够满足一致性和可用性任何一种分布式系统最多只能同时满足上述三项中的两项,因此分布式系统的目标AP:放弃C,大多数分布式系统都选择此项(并不是真正放弃,而是通过其它方式实现)CA:放弃pCPACID:事务的测试标准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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: