分佈式系統

    分佈式系統:

            1、系統的各組件分佈於網絡上多個計算機;

            2、各組件彼此之間僅僅通過消息傳遞來通信並協調行動;


    分佈式系統存在意義:

            1、向上擴展的性價比越來越低;

            2、單機擴展存在性能上升臨界點;

            3、出於穩定性及可用性考慮,單機會存在多方面的問題;

        

    計算機組成:CPU、內存、IO

            多CPU:

                    多線程編程,(線程間共享進程的資源)

                            互不通信的線程模型

                            基於共享容器協同工作的模型

                            通過事件協調的多線程模型 

                    多進程模型


            網絡IO:

                    多進程:每個進程響應一個請求;

                    多線程、多進程:每進程生成多個線程,每線程響應一個用戶請求

                    多線程:每線程直接響應多個請求


                    基於socket實現網絡通信開發,其實現方式:

                            BIO:Blocking IO:一個進程或一個線程處理一個請求;

                            NIO:Nonblocking IO:基於事件驅動(epoll)思想,採用Reactor模式

                            AIO:基於事件驅動思想,採用Proactor模式



        如何把應用從單機擴展至多機?

                    輸入設備的變化?

                    輸出設備的變化?


        控制器的變化?

                    實現的模式:

                            透明代理

                                    lvs的nat

                                    haproxy, nginx

                            旁路代理

                                    lvs的dr、tun

                            名稱服務

                            規則服務

                            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: 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章