首先,這篇文章我會用自己的話來給你講微服務(wù)之道,避免一些很專業(yè)的名詞,純粹個(gè)人理解
要了解微服務(wù),就要了解微服務(wù)的前世今生
講個(gè)故事吧,在混沌初開的時(shí)候,天上有100個(gè)眾神,每個(gè)神都有民眾向他們請求,他們來滿足民眾的需求,然而有一天有個(gè)神因?yàn)樘珒?yōu)秀而忙碌病倒了,導(dǎo)致民眾向他的請求無效了,而別的神只能看著,都有各自的任務(wù),卻幫不了他.
這個(gè)神已經(jīng)深深感覺到了,民眾的請求才是最重要的,但是不能因?yàn)樽约翰〉沽?就幫助不了民眾的基本需求,于是他召開緊急會議,來來來,我們100個(gè)人在健康的情況下確實(shí)可以滿足民眾需求,但是呢非常時(shí)期不行,那怎么辦呢,簡單,加神不就行了,于是神創(chuàng)造了神,又加了200個(gè)神進(jìn)來,這樣三個(gè)神負(fù)責(zé)同一個(gè)任務(wù),還成立任務(wù)網(wǎng)管機(jī)制(反向代理),根據(jù)規(guī)則把任務(wù)發(fā)給3個(gè)神中的一個(gè),這樣大家又開始忙碌起來了,也沒出什么叉子,但是有一天民間人口暴增,需求五花八門,眾神的業(yè)務(wù)已經(jīng)不能滿足民眾了(應(yīng)用顆粒度大),這時(shí)候需求每個(gè)神把自己負(fù)責(zé)的模塊拆解,比如按照民眾需求拆解,這個(gè)神以前負(fù)責(zé)中國的,任務(wù)太大了,這時(shí)候只讓他負(fù)責(zé)華東,或者山東,或者山東下面的威海.....等等,根據(jù)神的數(shù)量以及能力進(jìn)行拆解(多微合適).
于是神又召開會議,改改改,改成什么樣子呢,分家,按照任務(wù)細(xì)粒度分家,三個(gè)神一組,有獨(dú)立的任務(wù)代理,有獨(dú)立的任務(wù)記錄,形成了每個(gè)組都是獨(dú)立的服務(wù)組,如果山東的民眾突然需求變了,不會影響到江西的神的業(yè)務(wù),于是微服務(wù)誕生了.
相比較以前,微服務(wù)解決了眾多問題,比如單點(diǎn)故障,以及冗余耦合等,那微服務(wù)也有問題,凡事都有問題嗎,誰能完美無缺呢,微服務(wù)第一就是耗錢,這個(gè)也是缺點(diǎn)哦,對于初創(chuàng)公司錢就是命脈,所以要不要微服務(wù),多微合適,都是要具體考量的,另外一個(gè)缺點(diǎn)就是,應(yīng)用多了后,每個(gè)獨(dú)立的子系統(tǒng)交互方式也就變了,分布式一致性問題就出來了.
突然有一天,江西的民眾山東的民眾,上海的民眾開會碰頭了,一問感覺對方的任務(wù)很適合自己,民眾任務(wù)合體,這是單祖神的業(yè)務(wù)已經(jīng)滿足不了民眾的需求,怎么辦,再改,改的方式還有很多:
第一,又加了一組神,分別請求三組神,然后按照三組神返回的任務(wù)結(jié)果,自己拼拼湊湊,組合新的任務(wù)結(jié)果,然后給民眾
第二.如果按照上面的方式做了,然后還把拼湊的結(jié)果給記錄到本地了,這就換了一個(gè)模式,而且很常用.
第三:民眾發(fā)來請求,一組神請求二組神,二組神,請求三組神,三組神請求四組神,返回結(jié)果,就就是羊肉串一樣,一個(gè)調(diào)用一個(gè)
所以哪一種方式都可以實(shí)現(xiàn)民眾的需求,但是有最好的選擇,也有最壞的選擇,要分場景,要分時(shí)間
然后還有一天,山東的民眾做起買賣了,要給山西的人轉(zhuǎn)錢.
這時(shí)候眾神開始炸鍋了,難受.怎么保證山東人的錢要么成功轉(zhuǎn)到山西人的口袋里,要么都失敗呢(分布式事務(wù)一致性CAP),因?yàn)閼?yīng)用是獨(dú)立的,這時(shí)候有個(gè)聰明的神,提出了兩階段提交,就是我們加個(gè)協(xié)調(diào)的神,協(xié)調(diào)的神開始問一組神,準(zhǔn)備好了沒,一組神評估自己的狀態(tài),嗯準(zhǔn)備好了,然后協(xié)調(diào)神問二組神準(zhǔn)備好了沒?二組神看看自己的狀態(tài),還沒?OK,不提交操作,回滾,保證事務(wù)一致性,假如二組神說OK了,那么協(xié)調(diào)神通知一組神,說二組準(zhǔn)備好了,你提交吧,然后一組調(diào)教成功,這時(shí)候協(xié)調(diào)神去跟二組說,一組提交成功了,你也提交吧,然后二組說我提交成功了,OK完成任務(wù),下班休息.
這樣好,保證事務(wù)一致,但是太重了,而且一旦協(xié)調(diào)者玩游戲去了,不管協(xié)調(diào)了(宕機(jī)),那就出現(xiàn)阻塞了,難受
這時(shí)候神又召開會議,我們能不能再準(zhǔn)備階段前加個(gè)詢問,可以啊,協(xié)調(diào)者先問問一組好了沒,一組嗝屁了,沒回答,OK,結(jié)束.增加了詢問階段有什么好處呢,可以提前校驗(yàn)和查找超時(shí)的應(yīng)用,更容易保重一致性,而且不會一直鎖定資源,那么重,這個(gè)叫做三階段提交協(xié)議.
總之分布式微服務(wù)是個(gè)好東西,用好了叫做好東西,用壞了,我們習(xí)慣把它叫做坑