聊聊微服務(一)
掃描二維碼
隨時隨地手機看文章
最近看到一些小伙伴在聊微服務相關的話題,每個人對于微服務都有自己的理解。甚至很多小伙伴覺得微服務就是架構界的“白富美”,人人都很向往擁有它,其實不盡然。任何事物脫離場景的表述都是蒼白的。那么微服務到底是什么呢?我們在什么時候需要它呢?在此我想拿出兩年前在團隊內(nèi)部做過的一次分享,跟大家一起聊聊微服務。
說起微服務,我們不得不從它是如何誕生的說起,當我們理解了它誕生的原因后,自然就會知道微服務是為何而生,生而為何。話不多說,我們這就開始吧!
以互聯(lián)網(wǎng)應用為例,絕大部分的應用都是從單體應用架構開始,隨著業(yè)務的拓展及業(yè)務量的提升,逐步向分布式應用架構發(fā)展。而在早期的分布式應用架構中,以SOA架構為主,隨著技術、理念的發(fā)展及更新,逐漸衍生出了微服務架構。
應用架構的發(fā)展日新月異,從來沒有停止過它的腳步。微服務架構同SOA架構一樣,同為階段性的產(chǎn)物(近些年,Serverless架構 也逐漸進入大家的視野,開啟了應用架構向“無服務器架構”模式的轉(zhuǎn)變,使開發(fā)人員能夠更加聚焦在業(yè)務本身的開發(fā)。)。世界上唯一不變的就是變化本身 。
單體應用架構大都是以分層架構(layered-base)為基礎構建的。所謂的單體應用架構,就是將應用所有功能打包成一個獨立的單元向外提供服務。單體應用架構有其自身的優(yōu)越性,非常適合初創(chuàng)型團隊進行快速業(yè)務試錯。
單體應用架構的優(yōu)點:
-
技術棧單一
-
開發(fā)人員規(guī)模小
-
系統(tǒng)架構簡單
-
運維管理、部署,人員招聘及人員管理都相對容易實現(xiàn)。
隨著業(yè)務的不斷拓展及業(yè)務量的提升,單體應用架構的問題也逐漸顯現(xiàn)出來。
單體應用架構的缺點:
-
程序耦合嚴重,代碼擴展性差,業(yè)務邏輯復雜使得需求響應變慢。
-
業(yè)務容量存在瓶頸。各種業(yè)務代碼及數(shù)據(jù)層的耦合使得服務擴展變得復雜。
-
系統(tǒng)可用性差。由于代碼臃腫,邏輯復雜,使測試難度增加,程序bug會給整個平臺帶來災難性的后果。
為了解決上述的問題,分布式架構應運而生。
3.分布式應用架構
分布式應用架構為提升應用的擴展性、容量及可用性等問題提供了解決方案。所謂的分布式應用架構就是將應用系統(tǒng)拆分為多個獨立的子系統(tǒng),并由各個子系統(tǒng)協(xié)同處理,共同向外提供服務。對于分布式應用架構我們按時間將其分為了兩個階段,before 2010、after 2010。
? SOA before 2010
SOA(Service-Oriented Architecture)又叫面向服務的架構。它是一個組件模型,它將應用程序按不同功能單元(稱為服務)進行拆分,并通過定義良好的接口和協(xié)議將服務聯(lián)系起來。接口是采用中立的方式進行定義的,它應該獨立于實現(xiàn)服務的硬件平臺、操作系統(tǒng)和編程語言。這使得構建在各類系統(tǒng)中的服務可以以一種統(tǒng)一和通用的方式進行交互。
關于SOA架構我們可以追溯到2000年前后。那時的互聯(lián)網(wǎng)企業(yè)都在高速擴張,很多大型的企業(yè)都面臨著業(yè)務不斷拓展帶來的應用復雜性及容量不足等問題的挑戰(zhàn),正是在這種環(huán)境下,SOA架構出現(xiàn)了。
SOA通過對業(yè)務垂直切分,將平臺的業(yè)務拆分成若干個子服務。通過這樣的拆分,可以有效的解決單體應用架構所面臨的問題。
SOA的優(yōu)點:
-
業(yè)務及代碼邏輯的復雜度降低,提升需求響應能力
-
可用性提高。各子系統(tǒng)獨立的開發(fā)及部署,使測試復雜度降低,bug的影響范圍不會擴散至整個應用平臺。
-
業(yè)務容量大。針對各個子系統(tǒng)的業(yè)務特點進行有針對性的優(yōu)化及擴容,使優(yōu)化及擴容更加簡便及輕量。
隨著時間推移,被拆分的服務越來越多,隨之帶來問題的復雜度也呈指數(shù)上升。SOA架構的缺點逐步暴露出來。
SOA的缺點
-
系統(tǒng)架構復雜。
-
系統(tǒng)出錯概率增大。
-
部署運維復雜度陡增。
-
研發(fā)人員規(guī)模、質(zhì)量上升
-
學習曲線變大
-
團隊協(xié)作、管理難度增加,重復功能的開發(fā)也會在團隊內(nèi)部造成不菲浪費
從量變到質(zhì)變,SOA的這些問題給團隊帶來了新的挑戰(zhàn)。隨著技術、理念的發(fā)展,逐漸孕育出了微服務架構。
? Microservices 2010 later
微服務本質(zhì)上是SOA架構的升級版,使用了一些新的理念及技術實現(xiàn),以解決SOA架構暴露出的問題。
2010年后,隨著領域驅(qū)動設計、持續(xù)集成持續(xù)部署(CI/CD)、虛擬化技術、云計算、基礎設施自動化以及多年來分布式架構實踐過程中產(chǎn)生出的一些解決方案(服務注冊發(fā)現(xiàn)、分布式配置、服務監(jiān)控、服務跟蹤...),使得分布式架構得到了長足的發(fā)展。問題、難點一個個被攻克,微服務架構正式在此基礎上誕生了。
微服務的優(yōu)點:
-
進一步降低了系統(tǒng)的復雜度。由于自動化技術的完善及領域驅(qū)動設計理念的普及,系統(tǒng)得到更進一步的拆分及更細的顆粒度。
-
組件化。更細的服務粒度,使服務擁有更高的可復用性,服務逐步組件化。
-
自動化、高可用。高度的自動化測試、集成、部署及監(jiān)控,使系統(tǒng)運維逐漸由人工操作向AI智能化轉(zhuǎn)型,使系統(tǒng)的彈性更優(yōu),可用性更高,故障率更低。
-
混合技術棧。團隊中可以使用多種技術棧進行開發(fā)工作,針對不同業(yè)務的特點,采用更加有針對性的開發(fā)語言開發(fā)部署。
-
系統(tǒng)彈性可伸縮。由于采用了虛擬化、特別是容器化的部署,自動化技術的加入,系統(tǒng)具有高度的可伸縮性,使平臺資源利用率更高。
微服務的缺點:
-
服務拆分的復雜性高。服務限界上下文[5]的錯誤,會導致不得不頻繁的更改服務間的協(xié)作。
-
決策難度高。更細粒度的服務,意味著更高的靈活性及更多的組合,因此在設計開發(fā)中會遇到更多的決策,決策的失誤會造成不必要的成本浪費。
-
學習成本進一步提高。
4.總結
通過對應用架構發(fā)展脈絡的梳理,我想你對微服務是什么應該有所了解了。微服務其實正是在SOA的基礎上,結合了最新的理念、成熟的解決方案逐步發(fā)展而來的一個大型應用平臺解決方案。
-
單體應用架構解決的是應用從0到1的問題。
-
SOA聚焦解決的是提升平臺容量,可用性,可維護性的問題。
-
微服務聚焦解決的是服務編排與治理的問題。
-
serverless架構要解決的是讓研發(fā)人員的工作能夠聚焦在業(yè)務的開發(fā)。
透過問題看本質(zhì),明白了他們核心解決的問題,我想你也應該知道該如何取舍和選擇了吧!所有技術架構核心是保障一個應用平臺能夠更穩(wěn)定、高效的運轉(zhuǎn),從而達成應用平臺最大化價值的目標。為了實現(xiàn)目標,應用架構也只是其中的一個維度,商業(yè)的目標、市場的定位、運營的策略、組織架構...,所有這些問題及環(huán)節(jié)都需要統(tǒng)籌規(guī)劃,協(xié)同發(fā)展才可以實現(xiàn)最終的目標。
尾注
[1]. https://martinfowler.com/articles/serverless.html
[2]. 《誰動了我的奶酪?》是美國作家斯賓塞·約翰遜
[3]. 《分布式系統(tǒng)原理與范型》
[4]. https://dzone.com/articles/microservices-vs-soa-whats-the-difference
[5]. 《領域驅(qū)動設計》
特別推薦一個分享架構+算法的優(yōu)質(zhì)內(nèi)容,還沒關注的小伙伴,可以長按關注一下:
![]()
![]()
長按訂閱更多精彩▼
![]()
如有收獲,點個在看,誠摯感謝
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!