分布式其他

分布式

分布式其他

1. 談談業(yè)務中使用分布式的場景

分布式是將一個業(yè)務拆分不同的子業(yè)務陪拘,分布在不同的機器上執(zhí)行。有些人會認為分布式=集群茬底。然而集群本意是指多臺服務器幾種在一起克婶,實現(xiàn)同一業(yè)務,可以視為一臺計算機扛芽。分布式的組織松散,不像集群有著極強的組織性积瞒,一臺服務器宕機川尖,其他的可以代替其進行功能處理,而分布式的每一個節(jié)點都完成不同的業(yè)務茫孔,一個節(jié)點宕機了這個業(yè)務就無法訪問了叮喳。
分布式的每一個節(jié)點都可以用作集群,而集群卻不一定是分布式银酬。

分布式是在服務應用層隨著用戶量的增加嘲更,并發(fā)量增加,但項目難以承受如此巨大的并發(fā)請求而導致的性能瓶頸揩瞪。而對于底層數(shù)據(jù)庫層而言,隨著業(yè)務的發(fā)展篓冲,數(shù)據(jù)庫存儲信息過多李破,多大,也會導致數(shù)據(jù)庫壓力變大壹将,從而引起性能瓶頸嗤攻。
分布式是對于以上的解決方案。我們可以綜合使用分布式和集群來進行高并發(fā)高可用系統(tǒng)的開發(fā)诽俯。

參考:
《面試題:談談業(yè)務中使用分布式的場景》
《分布式和集群區(qū)別妇菱?什么是云計算平臺?分布式的應用場景?》

2. Session 分布式方案

在集群/分布式環(huán)境下必須要考慮用戶訪問所產(chǎn)生的session如何處理闯团。如果不做任何處理的話辛臊,如果用戶兩次訪問請求分別被不同服務器處理,則會導致分別有兩個session被創(chuàng)建房交,而且第二次無法通過session域獲取可能需要的數(shù)據(jù)彻舰,這將會成為系統(tǒng)設計的致命缺陷。

因此在分布式系統(tǒng)中候味,我們必須通過一定的策略來確保一個session必須能夠被不同的服務器獲取或者一個用戶的所有請求必須被同一臺服務器處理刃唤。

  1. 粘性session
    將用戶鎖定到某一服務器上。當一個服務器接收了用戶第一次請求白群,則以后該用戶所有請求都將由這臺服務器處理尚胞。這種方案不需要對session做任何特殊處理但缺乏容錯性:如果服務器故障,用戶被迫轉移到另一臺服務器帜慢,或不同服務器實現(xiàn)不同功能辐真,用戶所請求的功能只能由另一臺服務器實現(xiàn)時,都會導致session失效崖堤。此功能可以通過在Nginx配置而輕易達成侍咱。
  2. 服務器session復制
    任何一個服務器上的session發(fā)生改變,該節(jié)點會把這個session的所有內(nèi)容序列化密幔,然后廣播給其他節(jié)點而不管其他服務器需不需要session楔脯,以此來保證session同步。
    該方案容錯率高胯甩,各個服務器間的session更夠實時響應昧廷。但會對網(wǎng)絡負荷造成壓力,如果session量大的話可能造成網(wǎng)絡堵塞偎箫,拖慢服務器性能木柬。此方案可通過tomcat開啟集群后配置網(wǎng)絡廣播實現(xiàn)。
  3. session共享機制
    使用分布式緩存方案例如memcached淹办,redis眉枕。但要求其必須是集群。
    此方案容錯高怜森,session實時響應速挑。
    使用相應的開源插件可以達成此方案。
  4. session持久化到數(shù)據(jù)庫
    使用一個數(shù)據(jù)庫專門存儲session信息以保證session的持久化副硅。
    此方案當服務器出現(xiàn)問題時姥宝,session不會丟失。但本身數(shù)據(jù)庫的訪問速度就是很多系統(tǒng)的業(yè)務場景恐疲,都應該降低查詢數(shù)據(jù)庫的次數(shù)腊满,此方法會導致增加數(shù)據(jù)庫的訪問套么,當訪問量很大時甚至會拖垮數(shù)據(jù)庫。
  5. terracotta實現(xiàn)session復制
    terracotta的基本原理是對于集群鍵共享的數(shù)據(jù)碳蛋,當一個節(jié)點發(fā)生變化的時候胚泌,terracotta只把變化的部分發(fā)送給terracotta服務器,然后由服務器把它轉發(fā)給真正需要這個數(shù)據(jù)的節(jié)點疮蹦≈畛伲可以認為是第二種方案的優(yōu)化。
    此方案對網(wǎng)絡的壓力很小愕乎,也不比浪費CPU時間和內(nèi)存進行大量的序列化操作阵苇。把這種集群間數(shù)據(jù)共享的機制應用在session同步上,既避免了對數(shù)據(jù)庫的依賴感论,又能達到負載均衡和災難恢復的效果绅项。

參考:
《【Linux運維-集群技術進階】集群/分布式環(huán)境下5種session處理策略》

3. Session 分布式處理

我沒分清楚此題跟上面那題有什么區(qū)別,請參見2題比肄。

4. 分布式鎖的應用場景快耿、分布式鎖的產(chǎn)生原因、基本概念

在分布式場景下很多情況都需要實現(xiàn)最終一致性芳绩。在設計遠程上下文的領域事件的時候掀亥,為了保證最終一致性,在通過領域事件進行通訊的方式中妥色,可以共享存儲搪花,做全局XA事務,也可以借助消息中間件嘹害,和采用分布式鎖撮竿。
基于分布式鎖的解決方案都是相較于持久化方案提供了高可用性,并且支持豐富化的使用場景笔呀。

參考:
《分布式鎖》

5. 分布式鎖的常見解決方案

  1. 數(shù)據(jù)庫鎖表
    數(shù)據(jù)庫鎖能實現(xiàn)一個簡單的避免共享資源被多個系統(tǒng)操作的情況幢踏,在并發(fā)量不高的情況下身隐,數(shù)據(jù)庫鎖的性能時可以依賴的燃乍,而且由于數(shù)據(jù)庫的數(shù)據(jù)具有持久化的特性绘盟,可以滿足一般的應用需求晤碘。
    但數(shù)據(jù)庫鎖實現(xiàn)智能是非阻塞鎖,如果無法獲得會返回失敗喊递,且沒有過期時間袭艺,導致如果程序異常會無法釋放鎖庸诱,表將會被鎖導致鎖表情況產(chǎn)生敛助。且這把鎖無法重入而且無法解決數(shù)據(jù)庫宕機的問題。如果宕機屋确,會使整個應用無法工作纳击。
  2. 緩存鎖
    使用緩存作為分布鎖续扔,性能非常強大,redis可以達到每秒100k的操作次數(shù)焕数,足以滿足絕大部分應用的鎖定需求纱昧。
    redis鎖定的原理是利用setex命令,即只有在某個key不存在的情況下才能set成功該key堡赔,這就達到了多個進程并發(fā)去set同一個key识脆,只有一個進程能夠set成功。且redis自帶expire功能可以讓我們無需主動去產(chǎn)出鎖善已。且在2.6.12版本之后灼捂,redis的set命令直接設置NX和EX屬性,一個命令就能完成原子性的加鎖和設計過期時間换团。
    緩存鎖的性能優(yōu)異悉稠,但由于數(shù)據(jù)保存于內(nèi)存,一旦緩存服務宕機艘包,數(shù)據(jù)將丟失的猛。
  3. 分布式緩存鎖——Redlock
    redis作者鑒于單點redis作為分布式鎖的可能出現(xiàn)的鎖數(shù)據(jù)丟失問題,提出了Redlock算法想虎,該算法實現(xiàn)了比單一節(jié)點更安全卦尊、可靠的分布式鎖管理(DLM)。
    使用Redlock算法舌厨,可以保證在掛掉最多2個節(jié)點的時候岂却,分布式鎖服務仍然能工作,這相比之前的數(shù)據(jù)庫鎖和緩存鎖大大提高了可用性邓线,由于redis的高效性能淌友,分布式緩存鎖性能并不比數(shù)據(jù)庫鎖差。
  4. zookeeper
    zookeeper實現(xiàn)了類似paxos協(xié)議骇陈,是一個擁有多個節(jié)點分布式協(xié)調(diào)服務震庭。對zookeeper寫入請求會轉發(fā)到leader,leader寫入完成你雌,并同步到其他節(jié)點器联,直到所有節(jié)點都寫入完成,才返回客戶端寫入成功婿崭。它支持watcher機制拨拓,這樣實現(xiàn)阻塞鎖,可以watch鎖數(shù)據(jù)氓栈,等到數(shù)據(jù)被刪除渣磷,zookeeper會通知客戶端去重新競爭鎖。zookeeper的數(shù)據(jù)也支持臨時節(jié)點的概念授瘦,即客戶端寫入的數(shù)據(jù)是臨時數(shù)據(jù)醋界,在客戶端宕機后竟宋,臨時數(shù)據(jù)會被刪除,這樣就實現(xiàn)了鎖的異常釋放形纺。使用這樣的方式丘侠,就不需要給鎖增加超時自動釋放的特性了。

參考:
《分布式鎖》

6. 分布式事務的常見解決方案

分布式事務的處理一直以來都是個難題逐样。

  1. 2PC方案--強一致性
    數(shù)據(jù)更新成功后蜗字,,任意時刻所有副本中的數(shù)據(jù)都是一致的脂新,一般采用同步方式實現(xiàn)挪捕。
    2PC的核心原理是通過提交分階段和記日志的方式,記錄下事務提交所處的階段狀態(tài)戏羽,在組件宕機重啟后担神,可通過日志恢復事務提交的階段狀態(tài),并在這個狀態(tài)節(jié)點重試始花。
  2. eBay時間隊列方案 -- 最終一致性
    弱一致性地一種形式妄讯,數(shù)據(jù)更新成功后,系統(tǒng)不城虐立即可以返回最新新入的值酷宵,但是保證最終會返回上一次更新操作的值亥贸。
    eBay事件隊列是將需要分布式處理的任務通過消息或者日志的方式來異步執(zhí)行,消息或日志可以存到本地文件浇垦、數(shù)據(jù)庫或消息隊列炕置,再通過業(yè)務規(guī)則進行失敗重試,它要求各服務的接口是冪等的男韧。
  3. TCC(Try-Confirm-Cancel)補償模式 -- 最終一致性
    由服務 A朴摊、服務B、服務C此虑、服務D 共同組成的一個微服務架構系統(tǒng)甚纲。服務A 需要依次調(diào)用服務B、服務C 和服務D 共同完成一個操作朦前。當服務A 調(diào)用服務D 失敗時介杆,若要保證整個系統(tǒng)數(shù)據(jù)的一致性,就要對服務B 和服務C 的invoke 操作進行回滾韭寸,執(zhí)行反向的revert 操作春哨。回滾成功后恩伺,整個微服務系統(tǒng)是數(shù)據(jù)一致的赴背。
  4. 緩存數(shù)據(jù)最終一致性
    緩存(Redis 或者Memcached)通常被用在數(shù)據(jù)庫前面,作為數(shù)據(jù)讀取的緩沖,使得I/O 操作不至于直接落在數(shù)據(jù)庫上癞尚。

參考:
《常用的分布式事務解決方案介紹有多少種耸三?》

7. 集群與負載均衡的算法與實現(xiàn)

負載均衡算法可以參考Nginx的負載均衡的策略乱陡。

8. 說說分庫與分表設計

此題和第九題都請參見dataStorage\數(shù)據(jù)庫.md的第十題浇揩。

9. 分庫與分表帶來的分布式困境與應對之策

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憨颠,隨后出現(xiàn)的幾起案子胳徽,更是在濱河造成了極大的恐慌,老刑警劉巖爽彤,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养盗,死亡現(xiàn)場離奇詭異,居然都是意外死亡适篙,警方通過查閱死者的電腦和手機往核,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚷节,“玉大人聂儒,你說我怎么就攤上這事×蛱担” “怎么了衩婚?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長效斑。 經(jīng)常有香客問我非春,道長,這世上最難降的妖魔是什么缓屠? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任奇昙,我火速辦了婚禮,結果婚禮上敌完,老公的妹妹穿的比我還像新娘储耐。我一直安慰自己,他們只是感情好蠢挡,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布弧岳。 她就那樣靜靜地躺著,像睡著了一般业踏。 火紅的嫁衣襯著肌膚如雪禽炬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天勤家,我揣著相機與錄音腹尖,去河邊找鬼。 笑死伐脖,一個胖子當著我的面吹牛热幔,可吹牛的內(nèi)容都是我干的乐设。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼绎巨,長吁一口氣:“原來是場噩夢啊……” “哼近尚!你這毒婦竟也來了?” 一聲冷哼從身側響起场勤,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤戈锻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后和媳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體格遭,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年留瞳,在試婚紗的時候發(fā)現(xiàn)自己被綠了拒迅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡她倘,死狀恐怖璧微,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帝牡,我是刑警寧澤往毡,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站靶溜,受9級特大地震影響开瞭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜罩息,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一嗤详、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓷炮,春花似錦葱色、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烘绽,卻和暖如春淋昭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背安接。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工翔忽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓歇式,卻偏偏與公主長得像驶悟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子材失,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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

  • 分布式系統(tǒng)面臨的第一個問題就是數(shù)據(jù)分布痕鳍,即將數(shù)據(jù)均勻地分布到多個存儲節(jié)點。另外豺憔,為了保證可靠性和可用性额获,需要將數(shù)據(jù)...
    olostin閱讀 4,578評論 2 26
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發(fā)此異常恭应。 O...
    我想起個好名字閱讀 5,320評論 0 9
  • feisky云計算、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,855評論 0 5
  • 如未做特殊說明耘眨,本文均為原創(chuàng)昼榛,轉載請注明出處。 [TOC] 前言為什么要使用分布式鎖呢剔难? 在Nginx實現(xiàn)負載均衡...
    小安的大情調(diào)閱讀 3,920評論 0 10
  • 本文轉載自http://geek.csdn.net/news/detail/112672 WeTest導讀 我們常...
    shineegirl閱讀 1,547評論 0 26