編程悟道—學習前人怎么解決問題(一)
從"搬石頭問題"引發(fā)的"集群搭建問題"
小記:很多的文章都是純理論和操作手冊毡证,我想通過寫一些類似小故事的文章啟發(fā)自己和大家養(yǎng)成一個程序員的思維毅弧,這樣讀起來會更容易一些。我覺得這是很重要的类茂,他能幫助我們快速理解很多框架的實現(xiàn)原理。千峰的李衛(wèi)民老師講過道德經(jīng)里的一句話“有道無術托嚣,術可求巩检;有術無道,止于術”示启,我的目標是和大家一同“修道論術”兢哭。
博客:https://mrznan.github.io/blog/
??首先給咱一個明確的定位,咱的工作就是搬石頭夫嗓!工頭(客戶端)是你老大迟螺,讓你干啥就得干啥。
??工頭老大也沒事別的事難為你啤月,就是讓你去搬石頭(需求)煮仇,剛開始你一個人還可以,一塊大石頭也就100來斤谎仲,老骨頭還受得了浙垫。突然某一天,讓你搬個300斤的石頭郑诺,你沒日沒夜的搬石頭夹姥,練就了一身肌肉,終于也勉強給抬起來了辙诞。
??這就是所謂的垂直擴展辙售,也就是提升自身硬實力,能從搬一百斤的石頭飆升到三百斤飞涂,估計你的工資也翻了兩三倍了吧旦部!所以持續(xù)提升硬實力永遠是不會錯的祈搜,這是真理啊J堪恕(買牛逼服務器)容燕。
??更可惡的是,突然又一天婚度,你接到的命令是抬起一塊一噸重的石頭蘸秘,這下你可是犯了難了。
??俗話說蝗茁,人多力量大醋虏,你機智的選擇了找你的狐朋狗友們來幫忙,一起抬哮翘。(所謂水平擴展)
??當然請了朋友來颈嚼、打個電話、吃頓飯是免不了的了忍坷。思來想去粘舟,羅列步驟大致如下:
??1、想一想佩研,都有誰能夠幫我搬這塊石頭呢柑肴?于是拿小筆筆寫了個名單⊙恚或者發(fā)個朋友圈晰骑,說我需要幫忙搬石頭,愿意幫我的明天來“大同刀削面”集合绊序。(配置硕舆,可以是互相尋找,也可以是主動注冊)
??2骤公、開始打電話抚官,“老張”,過來幫咱搬一下石頭唄=桌Α(老張心想凌节,這貨打電話準沒好事!)洒试,同時又給單子上的其他人都打了電話该窗。(首次進行了通信)
??3缀拭、你約定好定在“大同刀削面”給大家吃頓好的(真是小氣),飯局中幕袱,你想到這搬石頭的時候可不能瞎搬删壮,萬一弄不好砸了腳可不太好预明。你大概看了看,說道:“老李啊,你是我們這群人里衣撬,年紀最大的,你搬過的石頭比我們吃過的鹽還多柴钻,到時候淮韭,你可得給大家組織組織啊”。(選了個主節(jié)點)
??4贴届、吃了飯,鉚足了勁蜡吧,大家開始活動了毫蚓。工頭見狀:“哎呦,不錯歐昔善,懂得請后援了”元潘,“工頭大哥,一會我們搬得時候有啥問題君仆,您就和我們老李說翩概,他可是搬石頭能手啊返咱!”(對外只暴露一個入口)
??5钥庇、“老李啊,你組織大家把這塊巨石從咱們喜馬拉雅山低搬到山頂去哈咖摹!”评姨,“我靠,一碗刀削面萤晴,你讓我干了喜馬拉雅山頂...算了,搬吧吐句!真坑”。老李開始安排:"小王啊店读、你最年輕有勁嗦枢,你就在最下邊頂住啊 ...."。(資源分配)咱們下邊的人先上一個臺階屯断,上邊的人再上哈文虏,邁步子要整齊,可別亂了...(資源調度裹纳,任務調度)
??6择葡、不巧老李上到半山腰病倒了下山回家去吧,你急了剃氧,老李現(xiàn)在不在了敏储,我們怎么合作啊,再選一個指揮吧朋鞍!那了大家投票吧已添,當然不能選自己妥箕,于是大家開始投票,有一半以上的人選了老趙更舞,于是老趙有開始指揮大家去完成搬石頭大任畦幢。(災備)
??大致基本的流程就是這樣,從單機到集群缆蝉。最大的難點莫過于怎么把集群做成一臺足夠強大且永不掛機的單機宇葱,無限強大意味著cpu要多少核有多少核,內存刊头,磁盤要多大有多大黍瞧,還有永遠不掛。我們同樣圍繞這句話去思考原杂,開始劃重點了:1印颤、一臺,2穿肄、足夠強大年局,3:永不掛機。
??1咸产、一臺機器意味著對外要一致
先秦時期矢否,很多有大權勢,大財富的人都喜歡招收門客锐朴,當有人向他詢問事情時兴喂,他們經(jīng)常會尋求門客建議,大家共同商榷焚志,那時的百家爭鳴可能也和這多少有些關系衣迷,對外卻僅僅只是你一個人而已。所謂“呂府”酱酬,大伙只知有呂不韋不知有其他耳壶谒。
??2、足夠強大意味著擴展要靈活
你家老爺再牛逼膳沽,個人能力再強大也是解決不了所有事情的汗菜,畢竟能當老爺?shù)亩际切┐笕宋铮虑槎急容^繁忙挑社。所以廣收天下門客才是硬道理陨界,收門客有很多鐘辦法,但最常用的有兩種:一是我知道諸葛亮是人才痛阻,所以我三顧茅廬菌瘪,另一種是打出“廣招門客”大旗,讓天下人知我,投奔我俏扩,我則擇優(yōu)錄用糜工。(集群的搭建)
??當然,這么多門客的管理會讓你有些又疼录淡。
??首先你要對這些門客統(tǒng)統(tǒng)進行備案捌木,統(tǒng)計一下他的年齡,興趣嫉戚,愛好刨裆,有啥特長,是否娶妻等等(元數(shù)據(jù))彬檀,當有新的門客得到批準(在你這注冊成功)加入這個團隊后崔拥,還要有人把以上信息再補充上(服務注冊與發(fā)現(xiàn))。你時不時還要請大家一起吃個飯凤覆、點個名,看看誰沒來拆魏,是請假了盯桦,還是出門發(fā)現(xiàn)自己生父是秦王直接撂挑子不干了(服務上下線)。
??門客再多也不能解決無限多的問題渤刃,所以像這種有身份的人拥峦,一般會有一個看門老大爺和兩三個門衛(wèi)。他們的工作就是一天杵在哪里卖子,看看誰來拜訪我家老爺略号,如果拜訪的太多了(并發(fā)太高),或者不合時宜(維護中)洋闽,或者不想見(攻擊者)玄柠,這老大爺就會說:“各位請回吧!老爺今天不見客了诫舅∮鹄”,你壓根連門也進不去刊懈!这弧,(熔斷,服務降級)虚汛。
??3匾浪、永不掛機意味著在你能承受的風險面前他永遠能用
??一幫劫匪綁架了老爺,意圖勒索錢財卷哩,這時就要選一個說了算的人出來主持大局蛋辈,人選大致會有兩種辦法,一殉疼、老爺早就定了主持大局之人梯浪,潘小蓮捌年。二、沒定的話就大家選舉一個吧挂洛。(master掛了怎么辦礼预,高可用)最好得有個主心骨,要不然虏劲,我該聽誰的托酸,想想都腦袋疼。(腦裂)
??老爺被綁架我覺得是一個家族能夠承受的風險柒巫,在這種情況下選一個主心骨励堡,這個家一樣能撐起來。什么是不能承受堡掏,比如你家老爺寫了首詩“不教胡馬度陰山”应结,皇帝一看,這胡馬是不是在說我泉唁,一氣之下誅九族鹅龄。(災備)
??這一切的目地就是,客戶端要知道訪問誰亭畜,服務端要一直知道我這有啥扮休,我能干啥(雞鳴狗盜隨便來)
??敲黑板了,
??總結一下重點要解決的問題拴鸵,1玷坠、這么多門客,怎么管理劲藐,2八堡、門客之間的關系,怎么維護瘩燥,3秕重、老爺或者門客出問題了該怎么辦
??翻譯過來也就是,這么多節(jié)點厉膀,怎么建立聯(lián)系形成集群溶耘,怎么管理節(jié)點分配任務和資源,怎么保持持續(xù)通信動態(tài)上下線服鹅,怎么保證持續(xù)可用實現(xiàn)永不掛機凳兵。看看大數(shù)據(jù)的hadoop企软,kafka庐扫,spark,包括現(xiàn)在的微服務等等都是在解決這些問題,這些問題得解決就使你在使用他們時就如同操作一臺強大的單機形庭。