隨著DevOps、持續(xù)交付等理念的深入人心,微服務(wù)架構(gòu)開(kāi)始走進(jìn)我們的視野。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括環(huán)縣網(wǎng)站建設(shè)、環(huán)縣網(wǎng)站制作、環(huán)縣網(wǎng)頁(yè)制作以及環(huán)縣網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,環(huán)縣網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到環(huán)縣省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!那么微服務(wù)是業(yè)界期待已久的解決方案么?或者說(shuō)微服務(wù)要比整體解決方案更加簡(jiǎn)單?
讓我們先對(duì)微服務(wù)下個(gè)定義:
微服務(wù)是用一組小服務(wù)的方式來(lái)構(gòu)建一個(gè)應(yīng)用,服務(wù)獨(dú)立運(yùn)行在不同的進(jìn)程中,服務(wù)之間通過(guò)輕量的通訊機(jī)制(如RESTful接口)來(lái)交互,并且服務(wù)可以通過(guò)自動(dòng)化部署方式獨(dú)立部署。正因?yàn)槲⒎?wù)架構(gòu)中,服務(wù)之間是相互獨(dú)立的,所以不同的服務(wù)可以使用不同的語(yǔ)言來(lái)開(kāi)發(fā),或者根據(jù)業(yè)務(wù)的需求使用不同類型的數(shù)據(jù)庫(kù)。
來(lái)自ThoughtWorks的James Lewis和Martin Fowler分享了他們對(duì)微服務(wù)架構(gòu)的理解以及看法。文章中作者詳細(xì)介紹了微服務(wù)的特點(diǎn)以及相對(duì)于傳統(tǒng)架構(gòu)的微服務(wù)架構(gòu)的優(yōu)勢(shì)。
微服務(wù)的一些優(yōu)勢(shì)是顯而易見(jiàn)的:
服務(wù)簡(jiǎn)單,只關(guān)注一個(gè)業(yè)務(wù)功能
在James看來(lái),傳統(tǒng)的整體風(fēng)格的架構(gòu)在構(gòu)建部署和擴(kuò)展伸縮方面有很大的局限性,其服務(wù)端應(yīng)用就像是一塊鐵板,笨重且不可拆分,系統(tǒng)中任何程序的改變都需要整個(gè)應(yīng)用重新構(gòu)建和部署新版本。在進(jìn)行水平擴(kuò)展時(shí)也只能整個(gè)系統(tǒng)擴(kuò)展,而不能針對(duì)某一個(gè)功能模塊進(jìn)行擴(kuò)展。
而微服務(wù)架構(gòu)將系統(tǒng)以組件化的方式分解為多個(gè)服務(wù),服務(wù)之間相對(duì)獨(dú)立且松耦合,單一功能的改變只需要重新構(gòu)建部署相應(yīng)的服務(wù)即可。
每個(gè)微服務(wù)可由不同團(tuán)隊(duì)開(kāi)發(fā)
傳統(tǒng)的開(kāi)發(fā)模式在分工時(shí)往往以技術(shù)為單位,比如UI團(tuán)隊(duì)、服務(wù)端團(tuán)隊(duì)和數(shù)據(jù)庫(kù)團(tuán)隊(duì),這樣的分工可能會(huì)導(dǎo)致任何功能上的改變都需要跨團(tuán)隊(duì)溝通和協(xié)調(diào)。而微服務(wù)則倡導(dǎo)圍繞服務(wù)來(lái)分工,不同的服務(wù)可以采用不同的技術(shù)來(lái)實(shí)現(xiàn),一個(gè)團(tuán)隊(duì)中應(yīng)該包含開(kāi)發(fā)所需的所有技能,比如用戶體驗(yàn)、數(shù)據(jù)庫(kù)、項(xiàng)目管理。
微服務(wù)是松散耦合的
微服務(wù)架構(gòu)拋棄了ESB復(fù)雜的業(yè)務(wù)規(guī)則編排、消息路由等功能,微服務(wù)架構(gòu)中服務(wù)是高內(nèi)聚的,每個(gè)服務(wù)都會(huì)處理相應(yīng)的業(yè)務(wù),所有的業(yè)務(wù)邏輯應(yīng)該盡量在服務(wù)內(nèi)部處理,且服務(wù)間的通信盡可能的輕量化,比如使用Restful的方式。
可用不同的編程語(yǔ)言與工具開(kāi)發(fā)
傳統(tǒng)的軟件開(kāi)發(fā)中經(jīng)常會(huì)使用同一個(gè)技術(shù)平臺(tái)來(lái)解決所有的問(wèn)題,而經(jīng)驗(yàn)表明使用合適的工具做合適的事情會(huì)讓開(kāi)發(fā)變得事半功倍。微服務(wù)架構(gòu)天生就具有這樣的特性,我們可以使用Node.js來(lái)開(kāi)發(fā)一個(gè)簡(jiǎn)單的報(bào)表頁(yè)面,使用C++來(lái)編寫(xiě)一個(gè)實(shí)時(shí)聊天組件。
微服務(wù)架構(gòu)的引入為多樣化持久保存數(shù)據(jù)提供可能,持久層可以使用傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)和NoSQL。不同于傳統(tǒng)的應(yīng)用,微服務(wù)架構(gòu)中,我們可以為每個(gè)服務(wù)選擇一個(gè)新的適合業(yè)務(wù)邏輯的數(shù)據(jù)庫(kù)系統(tǒng),比如MongoDB、PostgreSQL。這樣做的好處是顯而易見(jiàn)的,首先我們可以根據(jù)業(yè)務(wù)類型(讀多還是寫(xiě)多等)來(lái)決定使用哪種類型的數(shù)據(jù)庫(kù),其次這樣可以減小單個(gè)數(shù)據(jù)庫(kù)的負(fù)載。James的文章在社區(qū)引起了廣泛的討論,Contino公司的CTO Benjamin Wootton撰文表示微服務(wù)并沒(méi)有想象中的那么好,并建議開(kāi)發(fā)者在選用此架構(gòu)時(shí)一定要慎重。Benjamin認(rèn)為微服務(wù)架構(gòu)時(shí)可能會(huì)面臨下面一些挑戰(zhàn):
運(yùn)維開(kāi)銷(xiāo)
更多的服務(wù)也就意味著更多的運(yùn)維,產(chǎn)品團(tuán)隊(duì)需要保證所有的相關(guān)服務(wù)都有完善的監(jiān)控等基礎(chǔ)設(shè)施,傳統(tǒng)的架構(gòu)開(kāi)發(fā)者只需要保證一個(gè)應(yīng)用正常運(yùn)行,而現(xiàn)在卻需要保證幾十甚至上百道工序高效運(yùn)轉(zhuǎn),這是一個(gè)艱巨的任務(wù)。
DevOps要求
使用微服務(wù)架構(gòu)后,開(kāi)發(fā)團(tuán)隊(duì)需要保證一個(gè)Tomcat集群可用,保證一個(gè)數(shù)據(jù)庫(kù)可用,這就意味著團(tuán)隊(duì)需要高品質(zhì)的DevOps和自動(dòng)化技術(shù)。而現(xiàn)在,這樣的全棧式人才很少。
隱式接口
服務(wù)和服務(wù)之間通過(guò)接口來(lái)“聯(lián)系”,當(dāng)某一個(gè)服務(wù)更改接口格式時(shí),可能涉及到此接口的所有服務(wù)都需要做調(diào)整。
重復(fù)勞動(dòng)
在很多服務(wù)中可能都會(huì)使用到同一個(gè)功能,而這一功能點(diǎn)沒(méi)有足夠大到提供一個(gè)服務(wù)的程度,這個(gè)時(shí)候可能不同的服務(wù)團(tuán)隊(duì)都會(huì)單獨(dú)開(kāi)發(fā)這一功能,重復(fù)的業(yè)務(wù)邏輯,這違背了良好的軟件工程中的很多原則。
分布式系統(tǒng)的復(fù)雜性
微服務(wù)通過(guò)REST API或消息來(lái)將不同的服務(wù)聯(lián)系起來(lái),這在之前可能只是一個(gè)簡(jiǎn)單的遠(yuǎn)程過(guò)程調(diào)用。分布式系統(tǒng)也就意味著開(kāi)發(fā)者需要考慮網(wǎng)絡(luò)延遲、容錯(cuò)、消息序列化、不可靠的網(wǎng)絡(luò)、異步、版本控制、負(fù)載等,而面對(duì)如此多的微服務(wù)都需要分布式時(shí),整個(gè)產(chǎn)品需要有一整套完整的機(jī)制來(lái)保證各個(gè)服務(wù)可以正常運(yùn)轉(zhuǎn)。
事務(wù)、異步、測(cè)試面臨挑戰(zhàn)
跨進(jìn)程之間的事務(wù)、大量的異步處理、多個(gè)微服務(wù)之間的整體測(cè)試都需要有一整套的解決方案,而現(xiàn)在看起來(lái),這些技術(shù)并沒(méi)有成熟。
總而言之,微服務(wù)架構(gòu)有很多吸引人的地方,不過(guò)在擁抱微服務(wù)之前要認(rèn)清它所帶來(lái)的挑戰(zhàn)。而每一種架構(gòu)都有其優(yōu)缺點(diǎn),我們需要根據(jù)項(xiàng)目業(yè)務(wù)和團(tuán)隊(duì)情況來(lái)選擇合適的架構(gòu)。
更多內(nèi)容請(qǐng)關(guān)注微信公眾號(hào):it_haha
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。