GeekBand C++系統(tǒng)設(shè)計(jì)與實(shí)踐 第二周

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

4.png

如何檢測(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.

5.png

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)用拆分

6.png
  • 系統(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


7.png

異步通信

RPC

8.png

有效利用Cache

9.png

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

10.png

  • 良好的分布式哈希臀规,應(yīng)該具有單調(diào)性消恍,在服務(wù)器節(jié)點(diǎn)的增減,不應(yīng)該造成哈希的重定位以现。

一致性hash算法

11.png

  • 將服務(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ò)展性

12.png

  • 當(dāng)Server3 宕機(jī)后,對(duì)原數(shù)據(jù)A,B,C都不會(huì)造成影響纪吮,只有數(shù)據(jù)D又影響俩檬。
13.png
  • 當(dāng)增加一臺(tái)Server4,只影響了數(shù)據(jù)B碾盟,其他也不會(huì)造成影響棚辽,具有較好的容錯(cuò)性和擴(kuò)展性。

虛擬節(jié)點(diǎn)

14.png

  • 如圖所示冰肴,Server1和Server2分布不均勻屈藐,導(dǎo)致Server1的壓力非常大。
15.png
  • 一種解決辦法熙尉,對(duì)一臺(tái)Server多次hash联逻,形成多個(gè)虛擬節(jié)點(diǎn),這樣可以均衡負(fù)載检痰。

一致性hash案例

16.png

  • Cassandra
  • Amazon's Dynamo
  • HBASE
  • MongoDB

NoSQL Database

  • 水平分區(qū)
  • gets() sets()
  • key/value
  • 不支持jion等
  • 億級(jí)的數(shù)據(jù)

Cassamdra

17.png

Write Data Flows

18.png

分布式系統(tǒng)設(shè)計(jì)模式

19.png

20.png

Scalability Principle

21.png

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

22.png
  • 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ù)

MapReduce

23.png

Big Table

24.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慨削,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子套媚,更是在濱河造成了極大的恐慌缚态,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堤瘤,死亡現(xiàn)場(chǎng)離奇詭異玫芦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)本辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門桥帆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來医增,“玉大人,你說我怎么就攤上這事老虫∫豆牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵祈匙,是天一觀的道長(zhǎng)忽刽。 經(jīng)常有香客問我,道長(zhǎng)夺欲,這世上最難降的妖魔是什么跪帝? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮些阅,結(jié)果婚禮上伞剑,老公的妹妹穿的比我還像新娘。我一直安慰自己扑眉,他們只是感情好纸泄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腰素,像睡著了一般聘裁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弓千,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天衡便,我揣著相機(jī)與錄音,去河邊找鬼洋访。 笑死镣陕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姻政。 我是一名探鬼主播呆抑,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼汁展!你這毒婦竟也來了鹊碍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤食绿,失蹤者是張志新(化名)和其女友劉穎侈咕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體器紧,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耀销,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铲汪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熊尉。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡罐柳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帽揪,到底是詐尸還是另有隱情硝清,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布转晰,位于F島的核電站,受9級(jí)特大地震影響士飒,放射性物質(zhì)發(fā)生泄漏查邢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一酵幕、第九天 我趴在偏房一處隱蔽的房頂上張望扰藕。 院中可真熱鬧,春花似錦芳撒、人聲如沸邓深。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芥备。三九已至,卻和暖如春舌菜,著一層夾襖步出監(jiān)牢的瞬間萌壳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工日月, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袱瓮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓爱咬,卻偏偏與公主長(zhǎng)得像尺借,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子精拟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 分布式文件系統(tǒng)的主要功能有兩個(gè):一個(gè)是存儲(chǔ)文檔燎斩、圖像、視頻之類的Blob類型數(shù)據(jù)串前;另外一個(gè)是作為分布式表格系統(tǒng)的持...
    olostin閱讀 3,104評(píng)論 1 5
  • 分布式系統(tǒng)面臨的第一個(gè)問題就是數(shù)據(jù)分布瘫里,即將數(shù)據(jù)均勻地分布到多個(gè)存儲(chǔ)節(jié)點(diǎn)。另外荡碾,為了保證可靠性和可用性谨读,需要將數(shù)據(jù)...
    olostin閱讀 4,550評(píng)論 2 26
  • 眾所周知,Hadoop的存儲(chǔ)基礎(chǔ)坛吁,HDFS分布式文件系統(tǒng)劳殖,是按照GFS的思想實(shí)現(xiàn)的铐尚。本文參考:Google Fil...
    SmileySure閱讀 1,089評(píng)論 0 1
  • 有底線,有道德哆姻,體諒對(duì)方 這是楊老師告訴我們的擇偶標(biāo)準(zhǔn)宣增。本來覺得好像不止這些吧?但想了想矛缨,好像也只需要這么多爹脾,但回...
    真的更好嗎閱讀 321評(píng)論 0 0
  • 新樂社區(qū)現(xiàn)有一支由黨員,社區(qū)志愿者箕昭,網(wǎng)格員組成的隊(duì)伍灵妨,他們利用休息日對(duì)轄區(qū)的居民點(diǎn)進(jìn)行煤煙污染治理大巡查,...
    孫俠俠閱讀 279評(píng)論 0 0