什么是微服務(wù)
微服務(wù)是當(dāng)前業(yè)界非常流行的軟件架構(gòu)風(fēng)格荚坞,它強(qiáng)調(diào)將較大的應(yīng)用按業(yè)務(wù)邏輯拆分成一個(gè)個(gè)獨(dú)立的小應(yīng)用。這些小應(yīng)用可以獨(dú)立地編譯及部署菲盾,并通過各自暴露的Http Restful API接口相互通訊颓影。它們彼此相互協(xié)作,作為一個(gè)整體為用戶提供功能懒鉴,卻可以獨(dú)立地進(jìn)行擴(kuò)容诡挂。
微服務(wù)帶來的好處
微服務(wù)的好處是大型應(yīng)用變得更容易管理,在使用微服務(wù)架構(gòu)模式的情況下,軟件開發(fā)人員可以通過編譯并重新部署單個(gè)子服務(wù)的方式來驗(yàn)證自己的更改璃俗,而不再需要重新編譯整個(gè)應(yīng)用奴璃,從而節(jié)省了大量的時(shí)間。同時(shí)由于每個(gè)子服務(wù)是獨(dú)立的旧找,因此各個(gè)服務(wù)內(nèi)部可以自行決定最為合適的實(shí)現(xiàn)技術(shù)溺健,使得這些子服務(wù)的開發(fā)變得更為容易。最后如果當(dāng)前系統(tǒng)的容量不夠了钮蛛,那么我們只需要找到成為系統(tǒng)瓶頸的子服務(wù)鞭缭,并擴(kuò)展該子服務(wù)的容量即可。
微服務(wù)帶來的挑戰(zhàn)
但是使用微服務(wù)也會(huì)帶來了很多的挑戰(zhàn)魏颓,比如:
分布式的復(fù)雜性: 大系統(tǒng)被拆分后岭辣,各個(gè)微服務(wù)都是獨(dú)立部署和運(yùn)行的,它們只能通過通信來協(xié)作甸饱,導(dǎo)致之前單體應(yīng)用的問題都會(huì)升級(jí)成分布式系統(tǒng)的問題沦童,如: 分布式事務(wù)、分布式鎖叹话、分布式任務(wù)偷遗、分布式調(diào)用等,而解決分布式問題的技術(shù)挑戰(zhàn)更大驼壶。
排查錯(cuò)誤變得困難: 微服務(wù)允許各個(gè)小系統(tǒng)組成一個(gè)大系統(tǒng)氏豌,這使得大系統(tǒng)更容易構(gòu)建,但是一旦某個(gè)微服務(wù)開發(fā)時(shí)引入 bug热凹, 排查起來會(huì)更困難泵喘,復(fù)雜的跨進(jìn)程之間調(diào)用,很容易丟失掉重要的出錯(cuò)信息般妙,順著調(diào)用鏈路排查問題可能會(huì)涉及到多個(gè)團(tuán)隊(duì)的協(xié)調(diào)纪铺,每個(gè)團(tuán)隊(duì)技術(shù)標(biāo)準(zhǔn)不同、立場(chǎng)不同碟渺、對(duì)整個(gè)系統(tǒng)的理解不同鲜锚,都會(huì)使排查問題變得更困難。
部署和測(cè)試變得困難: 微服務(wù)和傳統(tǒng)的單體應(yīng)用相比苫拍,在測(cè)試策略上烹棉,會(huì)有一些不太一樣的地方。簡單來說怯疤,在微服務(wù)架構(gòu)中浆洗,測(cè)試的層次變得更多,而且對(duì)環(huán)境的搭建要求更高集峦。比如對(duì)單體應(yīng)用伏社,在一個(gè)機(jī)器上就可以setup出所有的依賴抠刺,但是在微服務(wù)場(chǎng)景下,由于依賴的服務(wù)往往很多摘昌,要搭建一個(gè)完整的環(huán)境非常困難速妖,這對(duì)團(tuán)隊(duì)的DevOps的能力也有比較高的要求。
......(還有很多困難聪黎,這里不一一列舉)罕容。
本書目標(biāo)
雖然實(shí)施微服務(wù)有很多困難,而仍然瑕不掩瑜稿饰,并且業(yè)界有很多公司或個(gè)人貢獻(xiàn)自己的智慧锦秒,提供了很多好的開源項(xiàng)目來解決這樣或那樣的困難。
terran4j 也根據(jù)以往的開發(fā)經(jīng)驗(yàn)喉镰,提供了一些開源項(xiàng)目旅择,用于解決其中的某個(gè)或某幾個(gè)問題,這些項(xiàng)目都不大侣姆,但針對(duì)性非常強(qiáng)生真,類似于工人師傅的螺絲刀、扳手等工具捺宗,看起來小但非常實(shí)用柱蟀。
本書對(duì)這些項(xiàng)目進(jìn)行匯總一一講解,所以起名為《微服務(wù)工具箱》蚜厉。