微服務(wù)架構(gòu)優(yōu)缺點(diǎn)

隨著DevOps、持續(xù)交付等理念的深入人心,微服務(wù)架構(gòu)開始走進(jìn)我們的視野。

成都創(chuàng)新互聯(lián)公司成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元汝陽做網(wǎng)站,已為上家服務(wù),為汝陽各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

那么微服務(wù)是業(yè)界期待已久的解決方案么?或者說微服務(wù)要比整體解決方案更加簡單?

讓我們先對(duì)微服務(wù)下個(gè)定義:

微服務(wù)是用一組小服務(wù)的方式來構(gòu)建一個(gè)應(yīng)用,服務(wù)獨(dú)立運(yùn)行在不同的進(jìn)程中,服務(wù)之間通過輕量的通訊機(jī)制(如RESTful接口)來交互,并且服務(wù)可以通過自動(dòng)化部署方式獨(dú)立部署。正因?yàn)槲⒎?wù)架構(gòu)中,服務(wù)之間是相互獨(dú)立的,所以不同的服務(wù)可以使用不同的語言來開發(fā),或者根據(jù)業(yè)務(wù)的需求使用不同類型的數(shù)據(jù)庫。

來自ThoughtWorks的James Lewis和Martin Fowler分享了他們對(duì)微服務(wù)架構(gòu)的理解以及看法。文章中作者詳細(xì)介紹了微服務(wù)的特點(diǎn)以及相對(duì)于傳統(tǒng)架構(gòu)的微服務(wù)架構(gòu)的優(yōu)勢。

微服務(wù)的一些優(yōu)勢是顯而易見的:

  1. 服務(wù)簡單,只關(guān)注一個(gè)業(yè)務(wù)功能 
    在James看來,傳統(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ù)即可。

  2. 每個(gè)微服務(wù)可由不同團(tuán)隊(duì)開發(fā) 
    傳統(tǒng)的開發(fā)模式在分工時(shí)往往以技術(shù)為單位,比如UI團(tuán)隊(duì)、服務(wù)端團(tuán)隊(duì)和數(shù)據(jù)庫團(tuán)隊(duì),這樣的分工可能會(huì)導(dǎo)致任何功能上的改變都需要跨團(tuán)隊(duì)溝通和協(xié)調(diào)。而微服務(wù)則倡導(dǎo)圍繞服務(wù)來分工,不同的服務(wù)可以采用不同的技術(shù)來實(shí)現(xiàn),一個(gè)團(tuán)隊(duì)中應(yīng)該包含開發(fā)所需的所有技能,比如用戶體驗(yàn)、數(shù)據(jù)庫、項(xiàng)目管理。

  3. 微服務(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的方式。

  4. 可用不同的編程語言與工具開發(fā) 
    傳統(tǒng)的軟件開發(fā)中經(jīng)常會(huì)使用同一個(gè)技術(shù)平臺(tái)來解決所有的問題,而經(jīng)驗(yàn)表明使用合適的工具做合適的事情會(huì)讓開發(fā)變得事半功倍。微服務(wù)架構(gòu)天生就具有這樣的特性,我們可以使用Node.js來開發(fā)一個(gè)簡單的報(bào)表頁面,使用C++來編寫一個(gè)實(shí)時(shí)聊天組件。

微服務(wù)架構(gòu)的引入為多樣化持久保存數(shù)據(jù)提供可能,持久層可以使用傳統(tǒng)關(guān)系數(shù)據(jù)庫和NOSQL。不同于傳統(tǒng)的應(yīng)用,微服務(wù)架構(gòu)中,我們可以為每個(gè)服務(wù)選擇一個(gè)新的適合業(yè)務(wù)邏輯的數(shù)據(jù)庫系統(tǒng),比如MongoDB、PostgreSQL。這樣做的好處是顯而易見的,首先我們可以根據(jù)業(yè)務(wù)類型(讀多還是寫多等)來決定使用哪種類型的數(shù)據(jù)庫,其次這樣可以減小單個(gè)數(shù)據(jù)庫的負(fù)載。James的文章在社區(qū)引起了廣泛的討論,Contino公司的CTO Benjamin Wootton撰文表示微服務(wù)并沒有想象中的那么好,并建議開發(fā)者在選用此架構(gòu)時(shí)一定要慎重。Benjamin認(rèn)為微服務(wù)架構(gòu)時(shí)可能會(huì)面臨下面一些挑戰(zhàn):

  1. 運(yùn)維開銷 
    更多的服務(wù)也就意味著更多的運(yùn)維,產(chǎn)品團(tuán)隊(duì)需要保證所有的相關(guān)服務(wù)都有完善的監(jiān)控等基礎(chǔ)設(shè)施,傳統(tǒng)的架構(gòu)開發(fā)者只需要保證一個(gè)應(yīng)用正常運(yùn)行,而現(xiàn)在卻需要保證幾十甚至上百道工序高效運(yùn)轉(zhuǎn),這是一個(gè)艱巨的任務(wù)。

  2. DevOps要求 
    使用微服務(wù)架構(gòu)后,開發(fā)團(tuán)隊(duì)需要保證一個(gè)Tomcat集群可用,保證一個(gè)數(shù)據(jù)庫可用,這就意味著團(tuán)隊(duì)需要高品質(zhì)的DevOps和自動(dòng)化技術(shù)。而現(xiàn)在,這樣的全棧式人才很少。

  3. 隱式接口 
    服務(wù)和服務(wù)之間通過接口來“聯(lián)系”,當(dāng)某一個(gè)服務(wù)更改接口格式時(shí),可能涉及到此接口的所有服務(wù)都需要做調(diào)整。

  4. 重復(fù)勞動(dòng) 
    在很多服務(wù)中可能都會(huì)使用到同一個(gè)功能,而這一功能點(diǎn)沒有足夠大到提供一個(gè)服務(wù)的程度,這個(gè)時(shí)候可能不同的服務(wù)團(tuán)隊(duì)都會(huì)單獨(dú)開發(fā)這一功能,重復(fù)的業(yè)務(wù)邏輯,這違背了良好的軟件工程中的很多原則。

  5. 分布式系統(tǒng)的復(fù)雜性 
    微服務(wù)通過REST API或消息來將不同的服務(wù)聯(lián)系起來,這在之前可能只是一個(gè)簡單的遠(yuǎn)程過程調(diào)用。分布式系統(tǒng)也就意味著開發(fā)者需要考慮網(wǎng)絡(luò)延遲、容錯(cuò)、消息序列化、不可靠的網(wǎng)絡(luò)、異步、版本控制、負(fù)載等,而面對(duì)如此多的微服務(wù)都需要分布式時(shí),整個(gè)產(chǎn)品需要有一整套完整的機(jī)制來保證各個(gè)服務(wù)可以正常運(yùn)轉(zhuǎn)。

  6. 事務(wù)、異步、測試面臨挑戰(zhàn) 
    跨進(jìn)程之間的事務(wù)、大量的異步處理、多個(gè)微服務(wù)之間的整體測試都需要有一整套的解決方案,而現(xiàn)在看起來,這些技術(shù)并沒有成熟。

總而言之,微服務(wù)架構(gòu)有很多吸引人的地方,不過在擁抱微服務(wù)之前要認(rèn)清它所帶來的挑戰(zhàn)。而每一種架構(gòu)都有其優(yōu)缺點(diǎn),我們需要根據(jù)項(xiàng)目業(yè)務(wù)和團(tuán)隊(duì)情況來選擇合適的架構(gòu)。

更多內(nèi)容請(qǐng)關(guān)注微信公眾號(hào):it_haha

本文標(biāo)題:微服務(wù)架構(gòu)優(yōu)缺點(diǎn)
鏈接URL:http://muchs.cn/article22/ighejc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站網(wǎng)站改版、品牌網(wǎng)站制作網(wǎng)站設(shè)計(jì)公司、網(wǎng)站導(dǎo)航App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)