4.搭建大規(guī)模可擴(kuò)展系統(tǒng)
大綱
- 分布式系統(tǒng)
- 數(shù)據(jù)庫系統(tǒng)
- 經(jīng)典架構(gòu)
- 設(shè)計(jì)原則:CAP理論
- 一致性介紹
- 關(guān)系型數(shù)據(jù)庫
- ACID vs. BASE
- sharding 分片
- MYSQL數(shù)據(jù)庫
- Cassandra
- 實(shí)時(shí)系統(tǒng):Kafka恩敌,Storm
** What is Scalability **
擴(kuò)展性,當(dāng)遇到許多用戶的同時(shí)訪問刻诊,不影響原有性能逼泣。平衡負(fù)載。性能是單個(gè)的用戶體驗(yàn)倒戏,可擴(kuò)展是在系統(tǒng)的層面,整體的訪問效果恐似,更在乎一個(gè)統(tǒng)計(jì)量峭梳,例如一個(gè)網(wǎng)站,90%用戶訪問時(shí)的響應(yīng)時(shí)間蹂喻。
Distributed System
Classic Master/Slave
如何檢測(cè)一臺(tái)機(jī)器是否宕機(jī)?
- 第一種情況捂寿,Slave工作節(jié)點(diǎn)宕機(jī)口四,這個(gè)時(shí)候Master節(jié)點(diǎn)需要能檢測(cè)出來,并把該Slave的工作遷移到另外一臺(tái)機(jī)器上秦陋。
- 一般是由于某個(gè)時(shí)段過于繁忙蔓彩,造成機(jī)器的“假死”,假死后,Master節(jié)點(diǎn)已經(jīng)把工作遷移到別的工作節(jié)點(diǎn)上赤嚼,而它本身確認(rèn)為還可以繼續(xù)提供服務(wù)旷赖,多個(gè)節(jié)點(diǎn)服務(wù)于同一份數(shù)據(jù),這個(gè)時(shí)候就容易造成數(shù)據(jù)不統(tǒng)一更卒。
- 一種解決辦法是使用一種lease等孵,當(dāng)工作節(jié)點(diǎn)擁有l(wèi)ease時(shí),才能提供服務(wù)蹂空,否則則會(huì)主動(dòng)下線俯萌,避免了數(shù)據(jù)不統(tǒng)一。當(dāng)工作節(jié)點(diǎn)的lease快到期的時(shí)候上枕,則會(huì)主動(dòng)向Master節(jié)點(diǎn)申請(qǐng)lease咐熙,Master會(huì)檢查是否合法,如果失效辨萍,則進(jìn)行服務(wù)遷移棋恼。
- 第二種情況,Master節(jié)點(diǎn)宕機(jī)锈玉,此時(shí)需要備用的Master節(jié)點(diǎn)能夠加測(cè)到爪飘,以替換該Master節(jié)點(diǎn)對(duì)外繼續(xù)服務(wù)。
- 主備節(jié)點(diǎn)可以維持一種heartbeat嘲玫,這樣的話當(dāng)heartbeat中斷后悦施,備用節(jié)點(diǎn)就可以提升為主節(jié)點(diǎn),繼續(xù)服務(wù)去团。
- 分布式的一致性問題抡诞,分布式鎖
- Chubby
- Zookeeper
CAP Theorem
- Consistency 不同的客戶端對(duì)同一份數(shù)據(jù)總是擁有同樣的view,一致性土陪。
- Availability 所有的客戶端總是可以讀寫昼汗,高可用。
- Partition tolerance 分區(qū)的可容忍性鬼雀,跨全球物理網(wǎng)絡(luò)的分區(qū)顷窒,系統(tǒng)扔工作良好,分布式源哩。
Pick any two. You can't have all three.
Real world examples of CAP
- Amazon's Dynamo. AP: Data become consistent over time.
- Google's BigTable. CP
- Hbase. CP
- DynamoDB. AP
- CA 一般應(yīng)用于事物鞋吉,高可用,強(qiáng)一致性励烦。
Database System
Relational DBMS
傳統(tǒng)系統(tǒng)的事物必須擁有如下特性:
Earlier System were designed for ACID properties:
- A Atomic谓着,原子性,要不操作完成坛掠,要不什么都不操作
- C Consistent赊锚,一致性治筒,由數(shù)據(jù)庫內(nèi)部保障或應(yīng)用保障
- I Isolated,隔離性舷蒲,每個(gè)事務(wù)之間都隔離耸袜,每個(gè)事務(wù)都不能看到別的事務(wù)的中間狀態(tài)
- D Durable,持久性
ACID vs. BASE
"Basically Available, Soft state, Eventually consistent"
在微博系統(tǒng)中牲平,A發(fā)了一個(gè)消息堤框,他自己馬上可以看到,但是關(guān)注A的人欠拾,只要在一定時(shí)間能可以看到就可以了胰锌,并不是要求馬上就可以看到。
應(yīng)用拆分
- 系統(tǒng)拆分藐窄,盡量保障子系統(tǒng)的功能的垂直
- 要十分小心循環(huán)依賴资昧,有可能啟動(dòng)失敗
數(shù)據(jù)庫拆分
- Horizontal Scaling(Sharding)
- 當(dāng)某個(gè)表數(shù)據(jù)量非常大時(shí),則需要水平分表荆忍,對(duì)應(yīng)用的影響較大
- 使用 Database Access Layer來屏蔽底層數(shù)據(jù)的存儲(chǔ)對(duì)應(yīng)用的影響
- Functional Scaling(Scale out)
Stateless
Session Vs. Cookie
異步通信
RPC
有效利用Cache
Consistency & Replication
- 為了達(dá)到可靠性格带,需要把數(shù)據(jù)復(fù)制到多個(gè)數(shù)據(jù)源。
- 當(dāng)需要修改某個(gè)數(shù)據(jù)刹枉,就帶來了問題叽唱,是否能保障同時(shí)修改。
- 讀取的時(shí)候微宝,讀多份棺亭,當(dāng)超過一半的數(shù)據(jù)源一致,則認(rèn)為其可靠蟋软。
- 寫入的時(shí)候可以寫入到日志镶摘,最終通過異步方式寫入。
一致性
- 強(qiáng)一致性 系統(tǒng)中某個(gè)數(shù)據(jù)被更新后岳守,后續(xù)任何對(duì)該數(shù)據(jù)的操作凄敢,都應(yīng)該拿到是該數(shù)據(jù)更新過的數(shù)據(jù)。傳統(tǒng)關(guān)系型數(shù)據(jù)庫湿痢。
- 弱一致性 系統(tǒng)中某個(gè)數(shù)據(jù)被更新后涝缝,后續(xù)對(duì)該數(shù)據(jù)的操作,不一定拿到的是更新后的值譬重,有一個(gè)窗口期拒逮。
- 最終一致性 屬于弱一致性的一種。
Consistent Hashing
Distributed Hash Table
- 良好的分布式哈希臀规,應(yīng)該具有單調(diào)性消恍,在服務(wù)器節(jié)點(diǎn)的增減,不應(yīng)該造成哈希的重定位以现。
一致性hash算法
- 將服務(wù)器和數(shù)據(jù)都記性hash計(jì)算狠怨,假設(shè)分布在一個(gè)連續(xù)的hash環(huán)上,對(duì)數(shù)據(jù)進(jìn)行hash后邑遏,定位在hash環(huán)上的一個(gè)點(diǎn)佣赖,然后就行順時(shí)針移動(dòng),把它交由在hash環(huán)上遇到的第一個(gè)服務(wù)器去處理记盒,不會(huì)因?yàn)榉?wù)器節(jié)點(diǎn)的變化引起哈希重定位憎蛤。
容錯(cuò)性和擴(kuò)展性
- 當(dāng)Server3 宕機(jī)后,對(duì)原數(shù)據(jù)A,B,C都不會(huì)造成影響纪吮,只有數(shù)據(jù)D又影響俩檬。
- 當(dāng)增加一臺(tái)Server4,只影響了數(shù)據(jù)B碾盟,其他也不會(huì)造成影響棚辽,具有較好的容錯(cuò)性和擴(kuò)展性。
虛擬節(jié)點(diǎn)
- 如圖所示冰肴,Server1和Server2分布不均勻屈藐,導(dǎo)致Server1的壓力非常大。
- 一種解決辦法熙尉,對(duì)一臺(tái)Server多次hash联逻,形成多個(gè)虛擬節(jié)點(diǎn),這樣可以均衡負(fù)載检痰。
一致性hash案例
- Cassandra
- Amazon's Dynamo
- HBASE
- MongoDB
NoSQL Database
- 水平分區(qū)
- gets() sets()
- key/value
- 不支持jion等
- 億級(jí)的數(shù)據(jù)
Cassamdra
Write Data Flows
分布式系統(tǒng)設(shè)計(jì)模式
Scalability Principle
4.大數(shù)據(jù)系統(tǒng)
大綱
- 大數(shù)據(jù)系統(tǒng):Hadoop
- MapReduce包归,BigTable,GFS三篇Paper
- Spark入門
- 海量數(shù)據(jù)處理技巧
- 聊天系統(tǒng)設(shè)計(jì)
- 估算機(jī)器
Hadoop 理念的產(chǎn)生
Google三輛馬車
- MapReduce:簡(jiǎn)易的數(shù)據(jù)處理在大型的集群
- Google File System
- BigTable:結(jié)構(gòu)化書分布式存儲(chǔ)
GFS
- GFS msater 主服務(wù)器
- 維護(hù)File namespace
- 創(chuàng)建chunk的64位唯一句柄
- 維護(hù)GFS到chunk的映射信息铅歼,chunk的位置信息
- 整個(gè)系統(tǒng)的全局控制公壤,租約的管理,lease
- 垃圾回收
- chunk的復(fù)制谭贪,備份
- 與chunkserver維持heartbeat
- GFS chunkserver 數(shù)據(jù)塊服務(wù)器
- GFS的文件被劃分為固定大小的數(shù)據(jù)塊
- GFS client 客戶端
- 首先訪問master節(jié)點(diǎn)境钟,獲得chunk handle,chunk locations
- 然后訪問chunkserver俭识,獲得數(shù)據(jù)