分布式系统基础及MogileFS

目录

一、分布式系统简介

   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


你可能感兴趣的:(分布式)