微服務(wù)是這幾年興起的一個(gè)概念,它的含義是說(shuō)把一個(gè)單體應(yīng)用拆分成一個(gè)個(gè)各自獨(dú)立的服務(wù)贿条,然后編排調(diào)用這些服務(wù)來(lái)對(duì)外提供服務(wù)增热,有些技術(shù)人員可能覺(jué)得是新技術(shù)就要采用钓葫,也不管是否適用于自己就進(jìn)行微服務(wù)化,但是有一點(diǎn)是可以明確的础浮,微服務(wù)不是銀彈豆同,也不是所有的情況都適用微服務(wù),簡(jiǎn)而言之如果微服務(wù)化帶來(lái)的收益已經(jīng)超過(guò)了付出那就是值得的芹务。
筆者最近參加了一個(gè)公司的項(xiàng)目鸭廷,項(xiàng)目是一個(gè)社區(qū)電商的項(xiàng)目,項(xiàng)目初期為了快速上線(xiàn)佳晶,整個(gè)項(xiàng)目只有一個(gè)單體PHP應(yīng)用轿秧,但是隨著單量越來(lái)越多,需求越來(lái)越多漩符,開(kāi)發(fā)人員越來(lái)越多,單體應(yīng)用已經(jīng)成為了發(fā)展瓶頸了陨仅。所有的開(kāi)發(fā)人員都在一個(gè)項(xiàng)目里開(kāi)發(fā)灼伤,經(jīng)常會(huì)發(fā)生代碼沖突咪鲜;代碼職責(zé)不清晰不明確,有時(shí)候根本就不知道自己的修改是否會(huì)影響到其他的地方颖侄;隨著代碼量越來(lái)越大览祖,每次上線(xiàn)的時(shí)間也越來(lái)越長(zhǎng),而且每次上線(xiàn)所有的部門(mén)都要有人留守展蒂,因?yàn)楦揪筒恢朗欠駮?huì)發(fā)生問(wèn)題苔咪。所以团赏,微服務(wù)拆分勢(shì)在必行。
既然確定了方向舔清,那就剩行動(dòng)了体谒。首先营密,怎么拆分目锭,這是第一個(gè)要回答的問(wèn)題纷捞,而且我個(gè)人覺(jué)得這個(gè)也是最重要的問(wèn)題主儡,基礎(chǔ)不牢地動(dòng)山搖惨缆,要想回答這個(gè)問(wèn)題坯墨,必須首先梳理現(xiàn)有的業(yè)務(wù)流程及代碼實(shí)現(xiàn),此外還要和產(chǎn)品們討論業(yè)務(wù)未來(lái)的發(fā)展方向骄瓣,因?yàn)槟阋粝挛磥?lái)發(fā)展的余地榕栏。在拆分過(guò)后要和團(tuán)隊(duì)成員進(jìn)行充分討論蕾各,對(duì)于一些拆分后在技術(shù)層面實(shí)現(xiàn)很復(fù)雜的東西可以在產(chǎn)品層面優(yōu)化式曲,就是確定這是否是一個(gè)必須的功能吝羞,是否可以用類(lèi)似的功能來(lái)實(shí)現(xiàn),因?yàn)橛械墓δ芸赡茉诩夹g(shù)這里昏天黑地搞了很久但也許在產(chǎn)品那里這是一個(gè)可有可無(wú)的東西医清,因此前期的溝通真的很重要会烙。
然后接下來(lái)就是代碼層面的東西了筒捺,這地方有一個(gè)要注意的點(diǎn)就是盡可能減少對(duì)用戶(hù)體驗(yàn)的影響系吭,就是不能影響整個(gè)業(yè)務(wù)主流程,因此,我們首先在model層進(jìn)行替換躯枢,把現(xiàn)有的一些裸寫(xiě)SQL或者orm的操作替換成對(duì)微服務(wù)RPC的調(diào)用锄蹂,并且這個(gè)地方也并不是直接就替換了得糜,那樣風(fēng)險(xiǎn)太大了晰洒,我們引入了一個(gè)灰度工具,可以對(duì)調(diào)用條件判斷槽棍,當(dāng)命中條件的時(shí)候走RPC炼七,不命中的時(shí)候走本地調(diào)用布持,并且這個(gè)灰度是一個(gè)逐步放量的過(guò)程题暖,此外還會(huì)對(duì)某些調(diào)用同時(shí)執(zhí)行兩步胧卤,并把執(zhí)行的結(jié)果記錄下來(lái)進(jìn)行比較枝誊,當(dāng)然這個(gè)只是針對(duì)讀操作而言。然后PHP應(yīng)用還是我們所有流量的入口绝骚,從PHP應(yīng)用進(jìn)來(lái)以后進(jìn)行分流祠够,這樣也最小限度影響第三方压汪。
如果只是在代碼層面進(jìn)行拆分,但是資源和耦合在一起古瓤,那拆分實(shí)際上是沒(méi)有多少意義的止剖,因此對(duì)于使用的資源也要拆分腺阳,數(shù)據(jù)庫(kù),Redis穿香,都要拆分亭引,只有這些都拆分了那才算得上是獨(dú)立的服務(wù),因?yàn)楣P者遇到過(guò)某個(gè)請(qǐng)求突然增多導(dǎo)致數(shù)據(jù)庫(kù)扛不住扔水,然后導(dǎo)致其他的請(qǐng)求都被阻塞了痛侍,因?yàn)閿?shù)據(jù)庫(kù)連接被打滿(mǎn)導(dǎo)致其他的查詢(xún)無(wú)法執(zhí)行朝氓。
總而言之魔市,拆分就是一個(gè)梳理,慢慢剝離的過(guò)程赵哲,一步一步來(lái),有錯(cuò)誤也可以及時(shí)停止或者回滾较坛。