分布式系统

分布式系统:

1、系统的各组件分布于网络上多个计算机;

2、各组件彼此之间仅仅通过消息传递来通信并协调行动;


分布式系统存在意义:

1、向上扩展的性价比越来越低;

2、单机扩展存在性能上升临界点;

3、出于稳定性及可用性考虑,单机会存在多方面的问题;


CPU、内存、IO


多CPU:多线程编程

互不通信的线程模型

基于共享容器协同工作的模型

通过事件协调的多线程模型

A, B

A:触发事件 

B:等待事件

多进程模型


网络IO:


多进程,每个进程响应一个请求;

多线程,多进程,每进程生成多个线程,每线程响应一个用户请求

多线程,每线程直接响应多个请求


基于socket实现网络通信开发,其实现方式:

BIO:Blocking IO

一个进程或一个线程处理一个请求;

NIO:Nonblocking IO

基于事件驱动(epoll)思想,采用Reactor模式

AIO:

基于事件驱动思想,采用Proactor模式



如何把应用从单机扩展至多机?

输入设备的变化?

输出设备的变化?


控制器的变化?

实现的模式:

透明代理

lvs的nat

haproxy, nginx

旁路代理

名称服务

规则服务

Master/slave机制


运算器的变化:


存储器的变化?


分布式系统实现的难点:

缺乏全局时钟?

面对故障时的独立性

处理单点故障

事务处理

ACID


2PC、BASE、CAP、Paxos


大型网站站点的架构演进方式:

LAMT, LNMT


应用从资源占用的角度分两类:

CPU Bound

IO Bound: IO密集型


session sticky

ip based

cookie based

session replication

session server


引用MySQL主从面临的问题:

1、数据复制的问题

2、应用选择数据源的问题


引入缓存:

1、页面缓存

varnish, squid

2、数据缓存

key-value store: memcached


主库写操作压力:数据库拆分

垂直拆分:把数据库中不同的业务的数据拆分到不同的数据库服务器中

水平拆分:把一个单独的表中的数据拆分到多个不同的数据库服务器上


NoSQL: 非关系数据

文档数据库

列式数据库

... ...


DFS: 非结构化数据

TFS, MogileFS: 适用于海量小文件

HDFS, GFS:少量大文件


应用拆分:

根据业务特性拆分

根据用户拆分:

用户注册

用户登录

用户信息维护

根据对底层应用的调用进行拆分


异步:解耦

消息中间件:在分布式系统中,完成消息发送和接收的基础性软件;

MOM:Message-oriented middleware


RabbitMQ, ActiveMQ, ZMQ


数据访问层:

拆分:

垂直拆分:

单机的ACID保证被打破:要么放弃事务,要么引入分布式事务;

一些Join查询操作将变得非常困难:

原来依赖于外键实现的约束将无从保证;

水平拆分:

单机ACID保证被打破;

一些Join查询操作将变得非常困难:

原来依赖于外键实现的约束将无从保证;

自增序列的ID号的产生会有影响;

针对单张表的查询很有可能要跨库操作;


分布式事务的实现:

事务:事务参与者、支持事务的服务器、资源服务器、事务管理器


分布式事务的模型及规范:

X/Open:XA(分布式事务规范)

X/Open DTP: 定义了三个组件

AP: 应用程序,即使用DTP模型的程序

RM:资源管理器,即DBMS系统

TM:事务管理器,负责协调和管理管理条例,提供给AP应用程序编程接口并管理资源管理器



2PC:两段式提交

Two Phase Commitment Procotol


CAP:2000年7月,Eric Brewer

一致性

可用性

网络分区容错性


任何一种分布式系统最多只能同时满足上述三项中的两项;因此,分布式系统的目标:

AP:放弃C;大多数他布式系统都选择此项;

CA:放弃P; 

CP:


分布式系统的目标:加强A和P,在C上进行妥协;

BASE模型:

BA:Basically Availibale

S:Soft state: 接受一段时间内的状态不同步;

E:Eventually Consistent: 最终一致性;


回顾:

分布式系统理论基础,大型站点演化过程

CAP: 

AP,C


BASE:


ACID


N, R, W:R+W<=N

MySQL主从复制:

W=N, R=1


Vector Clock


两段式提交:分布式事务协议

2PC, Paxos


Paxos协议的使用有一个前提:不存在拜占庭将军问题

通讯网络不靠谱,无法完成可靠的消息传输;

Proposers:

Acceptors:

Leaners: 


Proposal: 议案,Value: 决议


LastTried[p]:

PreviousVote[p]:

NextBallot[p]: 

LastVote[b,v]:


Distributed FS

分布式存储:不是文件系统,不遵循POSIX规范

分布式文件系统


FUSE


Ceph


常见的分布式文件系统:

GlusterFS:适用于存储少量大文件

MogileFS:适用存储海量小文件

使用MySQL存储元数据

FastDFS

MooseFS:

Ceph:内核级别,支持PB级别存储的分布式文件系统;

HDFS:Lucene, MapReduce + HDFS = Hadoop (平台),  HBase(NoSQL)

GFS:Google FS

MapReduce 

Bigtable

TFS: 适用于存储海量小文件

Lustre: Oracle的开源的分布式文件


MogileFS:

开源的分布式存储,由LiveJournal旗下的Danga Interactive;

memcached, MogileFS, Perlbal


MogileFS的特性:

1、用户空间文件系统:无须特殊的核心组件;

2、无单点失败:

3、自动文件复制

4、比“RAID”好多了

5、传输中立,无特殊协议(HTTP,NFS)

6、命名空间较简单:每个文件对应于一个key;用于domain定义名称空间;

7、不依赖于任何共享存储设备;




MogileFS的组件:

Tracker:Mogilefsd进程;其实现的功能包括Replication,Deletion, Query, Monitor等等;

Storage Nodes: mogstored进程;文件实际存储的位置,其实质上是一个http服务器,基于WebDAV模式工作,能完成文件创建、删除、重命名等操作;

MySQL节点:用于为tracker存储元数据信息;mogilefs的名称空间及文件名;


tracker: mogilefsd

storage nodes: mogstored



perl: perl模块

cpan: 


cpan> install module::name


离线安装:

编译:

# make Makefile.PL

# make

# make test

# make install

rpm包:


安装tracker:

1、安装相关的包:

MogileFS-Server-2.46-2.el6.noarch.rpm  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm

2、授权数据库用户,并初始mysql数据库

# mogdbsetup 

3、修改配置文件

db_dsn = DBI:mysql:DBNAME:host=172.16.100.7

4、启动mogilefsd进程


安装mogstord:

1、安装相关的包

MogileFS-Server-2.46-2.el6.noarch.rpm  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm  perl-IO-AIO

2、准备存储设备

挂载至某路径下,确认此路径下存在文件devN

此路径的属主和属组为mogilefs.mogilefs

3、修改配置文件/etc/mogilefs/mogstored.conf

docRoot=

前面的挂载路径;


配置mogielfs:

1、向tracker添加各mogstored主机

mogadm --trackers=TRACKER_NODE host add 


2、向tracker添加各设备

mogadm --trackers=TRACKER_NODE device add 


3、为tracker定义名称空间domain

mogadm --trackers=TRACKER_NODE domain add 


4、为domain添加一个或多个class

mogadm --trackers=TRACKER_NODE class add

可同时副本的最少个数;


上传文件:

mogupload


查看文件信息:

mogfileinfo 



http://www.magedu.com/images/bg.png


WebDAV:


回顾:

CAP:

AP, C

BASE:

最终一致性

MogileFS:

分布式文件系统:GluserFS, HDFS, MooseFS, Ceph, FastDFS, MogileFS, Lustre, TFS

少量大文件

海量小文件


元数据的存储位置:

有专用元数据节点:HDFS, MogileFS

元专用元数据节点:GlusterFS, Ceph


Client -->API(program) --> Tracker --> Mogstored

php, mogilefs


Client --> Nginx (mogilefs) --> Tracker --> Mogstored


domain: 名称空间


每个文件通过key来标记,key在当前名称空间内必须惟一;

domain:定义名称空间

不同的domain内,其key可以相同;

同一个domain内,key不能相同;


class: 复制单元

文件不是复制单元


安装php的mogilefs扩展

libxml2-devel

neon-devel


nginx_mogilefs:

GET


GlusterFS:

TCP/IP


特性:

扩展性

高可用性

全局统一的名称空间

弹性哈希计算

弹性卷管理

基于标准协议

NFS, CIFS, FTP, HTTP, Gluster



设计目标:

弹性存储系统:

线性横向扩展:

消除了元数据服务器

高效地数据分布

通过完全分布式架构的并行化获得最大化的性能

高可靠性:


技术的特点:


多个Brick Server可以通过客户端上vol manager或者是存储网关组织成集群:

Stride(RIAD0)

Replication(RAID1)

DHT(分布式哈希)


FUSE: Filesystem in User Space


Translators: 

有多种类型的translator:

Cluster: 存储集群分布,Stride, Replication, DHT

Debug: 跟踪GlusterFS内部函数和系统调用,并输出调试信息

Encrption: 

Features: 

Mgmt: 弹性卷管理

Mount: FUSE接口的实现

Nfs: 内置的NFS服务器

Performance: 性能优化

Protocol: GlusreFS协议

Storage: 


上一篇:centos7添加阿里云的epel源


下一篇:2021.10.04pm