上一篇我們聊了前端的發(fā)展歷程起趾。今天互婿,我們繼續(xù)聊一下后端技術(shù)的變化。
互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)徹底改變了人們的生活诞吱,同時(shí)系統(tǒng)的并發(fā)量也越來(lái)越高田轧。要給用戶提供一個(gè)完美的體驗(yàn)暴匠,就需要解決整個(gè)服務(wù)的高性能、高并發(fā)傻粘、數(shù)據(jù)一致和可擴(kuò)展等等問(wèn)題每窖。
分工協(xié)作
怎么來(lái)解決這些問(wèn)題呢,我們可以打個(gè)比方弦悉。這就好比一個(gè)團(tuán)隊(duì)做事情窒典,一個(gè)人的精力總是有限的,只靠一個(gè)人是不行的稽莉。這就需要發(fā)揮團(tuán)隊(duì)的力量瀑志。什么是團(tuán)隊(duì)的力量,就是要高效的分工和協(xié)作污秆。把后端集群比作一個(gè)團(tuán)隊(duì)劈猪,就是要想辦法讓服務(wù)節(jié)點(diǎn)更好的分工和協(xié)作。
先來(lái)說(shuō)一下分工良拼,對(duì)后端服務(wù)來(lái)說(shuō)战得,主要有計(jì)算和存儲(chǔ)兩大職責(zé)。職責(zé)首先要清晰和獨(dú)立庸推。
計(jì)算集群
對(duì)計(jì)算的集群來(lái)說(shuō)常侦,怎么來(lái)分工浇冰。要先根據(jù)所要承載的業(yè)務(wù)來(lái)看,可以根據(jù)優(yōu)先級(jí)和業(yè)務(wù)量來(lái)劃分聋亡。如果業(yè)務(wù)調(diào)用量大或者比較重要的湖饱,就可以單獨(dú)分工一個(gè)獨(dú)立集群去處理。這叫專事專辦杀捻。這樣可以保障高優(yōu)先的事情能得到充足的資源井厌,也不會(huì)被不重要的事情影響。
職責(zé)相同的一個(gè)集群內(nèi)怎么來(lái)分工致讥,最簡(jiǎn)單的方式就是輪流來(lái)做仅仆。輪流之前還得先解決一個(gè)信息共享的問(wèn)題。以銷售為例打個(gè)比方垢袱,如果這個(gè)客戶的信息掌握在一個(gè)客戶經(jīng)理手里墓拜,其他人都不知道,那再多人也幫不上忙请契。在計(jì)算機(jī)世界里就是無(wú)狀態(tài)的概念咳榜。要把每次請(qǐng)求的狀態(tài)信息放到其他存儲(chǔ)集群中,讓每個(gè)計(jì)算集群的節(jié)點(diǎn)都靈活的信息共享爽锥。
龍生九子涌韩,各個(gè)不同。集群節(jié)點(diǎn)的計(jì)算資源和當(dāng)前狀態(tài)也是不同的氯夷,完全平均分配也不合理臣樱。比如有的服務(wù)器CPU和內(nèi)存配置更好一些,那就應(yīng)該承擔(dān)更大的責(zé)任腮考。再比如集群在運(yùn)行的過(guò)程中雇毫,有可能某個(gè)機(jī)器發(fā)生了故障,就不應(yīng)該再繼續(xù)提供服務(wù)踩蔚。所以更有效的分配方式是根據(jù)節(jié)點(diǎn)的資源能力以及當(dāng)前的運(yùn)行狀態(tài)棚放,實(shí)時(shí)監(jiān)控,動(dòng)態(tài)的分配工作馅闽。
再大的集群也有能力的上線飘蚯,我們應(yīng)該盡可能的讓關(guān)鍵業(yè)務(wù)健康運(yùn)行。如果訪問(wèn)量真的超過(guò)了集群的能力捞蛋,我們也應(yīng)該有能力合理調(diào)配資源孝冒,抽調(diào)人力,集中力量辦大事拟杉。不重要的服務(wù)可以先放棄掉。如果實(shí)在不行量承,我們還可以讓用戶友好的等待搬设。類比海底撈穴店,我們可以讓客人在餐廳外邊排隊(duì),邊吃邊等拿穴。
當(dāng)業(yè)務(wù)訪問(wèn)量下降以后泣洞,我們也可以根據(jù)情況收縮服務(wù)節(jié)點(diǎn),不做無(wú)畏的浪費(fèi)默色。
再來(lái)看一下計(jì)算集群的協(xié)作問(wèn)題球凰。每個(gè)工作都不可能單打獨(dú)斗來(lái)解決,這就需要節(jié)點(diǎn)之間的協(xié)作腿宰。首先呕诉,各個(gè)節(jié)點(diǎn)得需要知道各自的職責(zé),有問(wèn)題應(yīng)該找誰(shuí)吃度。類比我們獲取信息的方式甩挫,最開(kāi)始是通過(guò)黃頁(yè)或者分類信息網(wǎng)站,再后來(lái)通過(guò)搜索引擎椿每。我們也應(yīng)該有一個(gè)集群的信息注冊(cè)中心伊者,用來(lái)記錄每個(gè)節(jié)點(diǎn)都提供什么服務(wù)。當(dāng)我們需要調(diào)用這個(gè)服務(wù)的時(shí)候间护,先通過(guò)注冊(cè)中心找到依賴的節(jié)點(diǎn)亦渗,然后再去調(diào)用。當(dāng)某個(gè)節(jié)點(diǎn)出了問(wèn)題汁尺,注冊(cè)中心也應(yīng)該能第一時(shí)間知道央碟,并靈活的調(diào)配到其他節(jié)點(diǎn)。
當(dāng)協(xié)作的鏈條過(guò)長(zhǎng)的時(shí)候均函,我們往往看不清楚影響某個(gè)工作的關(guān)鍵節(jié)點(diǎn)亿虽。這時(shí)候,我們需要把完成這個(gè)工作的各個(gè)協(xié)作點(diǎn)串起來(lái)看苞也。這就是服務(wù)的鏈路跟蹤洛勉。通過(guò)觀察整個(gè)鏈路的情況,我們可以分析出哪些是影響整個(gè)工作的關(guān)鍵節(jié)點(diǎn)如迟,然后再去著重優(yōu)化收毫。
總結(jié)一下,后端集群的分工協(xié)作殷勘,可以幫助我們快速滿足用戶不斷變化的需求此再。對(duì)集群的實(shí)時(shí)監(jiān)控,根據(jù)監(jiān)控情況的實(shí)時(shí)分工協(xié)作玲销,可以大幅提升整個(gè)集群的服務(wù)效率和質(zhì)量输拇。其實(shí)這就是SOA治理的理念。明天贤斜,我們繼續(xù)聊一下集群的存儲(chǔ)職責(zé)策吠。