|
??這里是【秒懂·云原生】,關注我學習云原生不迷路 ??如果對你有幫助,給博主一個免費的點贊以示鼓勵 歡迎各位??點贊??評論收藏??
??專欄介紹
【秒懂·云原生】 目前主要更新微服務,一起學習一起進步。
??本期介紹
主要介紹什么是微服務、微服務的發(fā)展史、微服務與云原生的關系
??微服務架構(gòu)介紹
近年來,微服務架構(gòu)一直是互聯(lián)網(wǎng)技術圈的熱點之一,越來越多的互聯(lián)網(wǎng)應用都采用了微服務架構(gòu)作為系統(tǒng)構(gòu)建的基礎,很多新技術和理念如Docker、Kubernetes、DevOps、持續(xù)交付、Service Mesh等也都在關注、支持和跟隨微服務架構(gòu)的發(fā)展。
??微服務架構(gòu)的發(fā)展
從單體應用架構(gòu)發(fā)展到SOA架構(gòu),再到微服務架構(gòu), 應用架構(gòu)經(jīng)歷了多年的不斷演進。微服務架構(gòu)不是憑空產(chǎn)生的,而是技術發(fā)展的必然結(jié)果,分布式云平臺的應用環(huán)境使得微服務代替單體應用成為互聯(lián)網(wǎng)大型系統(tǒng)的架構(gòu)選擇。目前,雖然微服務架構(gòu)還沒有公認的技術標準和規(guī)范草案,但業(yè)界已經(jīng)有了一些很有影響力的開源微服務架構(gòu)解決方案,在進行微服務化開發(fā)或改造時可以進行相應的參考。
??單體應用架構(gòu)
與微服務架構(gòu)對比的是傳統(tǒng)的單體應用。Web應用程序發(fā)展的早期,大部分Web工程是將所有的功能模塊打包到一起部署和運行,例如Java應用程序打包為一個war包,其他語言(Ruby、Python或者C++)編寫的應用程序也有類似的做法。單體應用的實現(xiàn)架構(gòu)類似于圖中的電影售票系統(tǒng)。

這個電影售票系統(tǒng)采用分層架構(gòu),按照調(diào)用順序,從上到下為表示層、業(yè)務層、數(shù)據(jù)訪問(DAO)層、DB層。表示層負責用戶體驗;業(yè)務層負責業(yè)務邏輯,包括電影、訂單和用戶三個模塊;數(shù)據(jù)訪問層負責DB層的數(shù)據(jù)存取,實現(xiàn)增刪改查的功能。業(yè)務層定義了應用的業(yè)務邏輯,是整個應用的核心。在單體應用中,所有這些模塊都集成在一起,這樣的系統(tǒng)架構(gòu)就叫做單體應用架構(gòu),或稱為巨石型應用架構(gòu)。單體應用是最早的應用形態(tài),開發(fā)和部署都很簡單。在中小型項目中使用單體應用架構(gòu),能體現(xiàn)出其優(yōu)勢,且單體應用的整體性能主要依賴于硬件資源和邏輯代碼實現(xiàn),應用架構(gòu)自身不需要特別關注。
??SOA(面向服務架構(gòu))
??1、什么是SOA
面向服務的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)是一個組件模型。
??2、為什么要使用SOA
SOA旨在將單個應用程序功能彼此分開,以便這些功能可以單獨用作單個的應用程序功能或“組件”。這些組件可以用于在企業(yè)內(nèi)部創(chuàng)建各種其他的應用程序,或者如有需要,對外向合作伙伴公開,以便用于合作伙伴的應用
??3、SOA的工作原理

SOA架構(gòu)中有三種角色:
服務提供者: 發(fā)布自己的服務,并且對服務請求進行響應。 服務注冊中心: 注冊已經(jīng)發(fā)布的web service,對其進行分類,并提供搜索服務。 服務請求者: 利用服務中心查找所需要的服務,然后使用該服務。
??4、面向服務架構(gòu)的特點
1) 多個單體服務 2)服務間通過ESB間接通訊  缺點也顯而易見:
1)僅垂直方向拆分,每個服務還是單體;
2)引入了ESB龐然大物;
??微服務架構(gòu)
微服務最早是由Martin Fowler與James Lewis于2014年共同提出,需要了解細節(jié)的讀者可以閱覽https:///articles/microservices.html。其實Martin先生并沒有給出明確的微服務定義,根據(jù)其描述,微服務的定義可以概括如下︰微服務架構(gòu)是一種使用一系列粒度較小的服務來開發(fā)單個應用的方式;每個服務運行在自己的進程中;服務間采用輕量級的方式進行通信(通常是HTTP API)﹔這些服務是基于業(yè)務邏輯和范圍,通過自動化部署的機制來獨立部署的,并且服務的集中管理應該是最低限度的,即每個服務可以采用不同的編程語言編寫,使用不同的數(shù)據(jù)存儲技術。 如今,微服務架構(gòu)已經(jīng)不是一個新概念了,很多業(yè)界前沿互聯(lián)網(wǎng)公司的實踐表明,微服務是一種漸進式的演進架構(gòu),是企業(yè)應對業(yè)務復雜性,支持大規(guī)模持續(xù)創(chuàng)新行之有效的架構(gòu)手段。

??1、組成
微服務架構(gòu)是一種比較復雜、內(nèi)涵豐富的架構(gòu)模式,它包含很多支撐'微'服務的具體組件和概念,其中一些常用的組件及其概念如下:
- · 服務注冊與發(fā)現(xiàn):
服務提供方將己方調(diào)用地址注冊到服務注冊中心,讓服務調(diào)用方能夠方便地找到自己;服務調(diào)用方從服務注冊中心找到自己需要調(diào)用的服務的地址。 - ·負載均衡:
服務提供方一般以多實例的形式提供服務,負載均衡功能能夠讓服務調(diào)用方連接到合適的服務節(jié)點。并且,服務節(jié)點選擇的過程對服務調(diào)用方來說是透明的。 - ·服務網(wǎng)關: 服務網(wǎng)關是服務調(diào)用的唯一入口,可以在這個組件中實現(xiàn)用戶鑒權、動態(tài)路由、灰度發(fā)布、A/B測試、負載限流等功能。
- ·配置中心:
將本地化的配置信息(Properties、XML、YAML等形式)注冊到配置中心,實現(xiàn)程序包在開發(fā)、測試、生產(chǎn)環(huán)境中的無差別性,方便程序包的遷移。 - ·集成框架:
微服務組件都以職責單一的程序包對外提供服務,集成框架以配置的形式將所有微服務組件(特別是管理端組件)集成到統(tǒng)一的界面框架下,讓用戶能夠在統(tǒng)一的界面中使用系統(tǒng)。 - ·調(diào)用鏈監(jiān)控: 記錄完成一次請求的先后銜接和調(diào)用關系,并將這種串行或并行的調(diào)用關系展示出來。在系統(tǒng)出錯時,可以方便地找到出錯點。
- ·支撐平臺:
系統(tǒng)微服務化后,各個業(yè)務模塊經(jīng)過拆分變得更加細化,系統(tǒng)的部署、運維、監(jiān)控等都比單體應用架構(gòu)更加復雜,這就需要將大部分的工作自動化?,F(xiàn)在,Docker等工具可以給微服務架構(gòu)的部署帶來較多的便利,例如持續(xù)集成、藍綠發(fā)布、健康檢查、性能健康等等。如果沒有合適的支撐平臺或工具,微服務架構(gòu)就無法發(fā)揮它最大的功效。
??2、優(yōu)點
微服務架構(gòu)模式有很多優(yōu)勢可以有效解決單體應用擴大之后出現(xiàn)的大部分問題。
- 首先, 通過將巨大單體式應用分解為多個服務的方法解決了復雜性問題。在功能不變的情況下,應用分解為多個可管理的模塊或服務。每個服務都有一個用RPC或者消息驅(qū)動API定義清楚的邊界。微服務架構(gòu)模式為采用單體式編碼方式很難實現(xiàn)的功能提供了模塊化的解決方案。由此,單個服務變得很容易開發(fā)、理解和維護。
- 其次, 微服務架構(gòu)模式使得團隊并行開發(fā)得以推進,每個服務都可以由專門開發(fā)團隊來開發(fā)。不同團隊的開發(fā)者可以自由選擇開發(fā)技術,提供API服務。這種自由意味著開發(fā)者不需要被迫使用之前采用的過時技術,他們可以選擇最新的技術。甚至于,因為服務都是相對簡單的,即使用新技術重寫以前的代碼也不是很困難的事情。
- 再次, 微服務架構(gòu)模式中每個微服務獨立都是部署的。理想情況下,開發(fā)者不需要協(xié)調(diào)其他服務部署對本服務的影響。這種改變可以加快部署速度。UI團隊可以采用AB測試,快速地部署變化。微服務架構(gòu)模式使得持續(xù)化部署成為可能。
- 最后, 微服務架構(gòu)模式使得每個服務易于獨立擴展。
??微服務架構(gòu)的流派
常見的微服務架構(gòu)方案有四種,分別是ZeroC lceGrid、基于消息隊列、DockerSwarm和Spring Cloud。下面分別介紹這四種方案。
??1、ZeroC lceGrid
- ZeroC lceGrid是基于RPC框架lce發(fā)展而來的一種微服務架構(gòu),lce不僅僅是一個RPC框架,它還為網(wǎng)絡應用程序提供了一些補充服務。lce是一個全面的RPC框架,支持C++、C#、Java、JavaScript、Python等語言。IceGrid具有定位、部署和管理lce服務器的功能,具有良好的性能與分布式能力,下面具體介紹IceGrid的功能。
- lce的DNS。DNS用于將域名信息映射到具體的IP地址,通過域名得到該域名對應的IP地址的過程叫做域名解析。lceGrid為lce提供了類似的服務∶它允許lce客戶端通過簡單的名稱來查找Ice對象。lce客戶端可以通過提供此對象的完整尋址信息來訪問服務器中的Ice對象,例如chatRoom1:ssl-h demo.zeroc.com-p10000。這樣的硬編碼雖然很簡單,但缺乏靈活性。因為需要為lce服務器(本例中端口為10000)選擇一個固定的端口號,因此將Ice服務器移到不同的主機上需要更新其客戶端。
- lceGrid提供了對這種尋址信息使用符號名稱的選項,例如chatRoom1@chatRoomHost。當lce客戶端嘗試訪問chatRoomHost中的對象時,它會要求lceGrid提供與此符號名稱關聯(lián)的實際地址。例如,lceGrid返回-hdemo.zeroc.com-p 65431,客戶端就可以直接并透明地連接到服務器。lceGrid架構(gòu)如圖

??2、基于消息隊列
在微服務架構(gòu)的定義中講到,各個微服務之間使用“輕量級'的通信機制。所謂輕量級,是指通信協(xié)議與語言無關、與平臺無關。微服務之間的通信方式有兩種:同步和異步。同步方式有RPC,REST等;除了標準的基于同步通信方式的微服務架構(gòu)外,還有基于消息隊列異步方式通信的微服務架構(gòu)。
??3、Docker Swarm
Swarm項目是Docker公司發(fā)布的三劍客中的一員,用來提供容器集群服務,目的是更好地幫助用戶管理多個Docker Engine,方便用戶使用。通過把多個Docker Engine聚集在一起,形成一個大的Docker Engine,對外提供容器的集群服務。同時這個集群對外提供Swarm API,用戶可以像使用Docker Engine一樣使用Docker集群。
??4、Spring Cloud
- Spring Cloud是一個基于SpringBoot實現(xiàn)的云應用開發(fā)工具,是一系列框架的集合,當添加這些工具庫到應用后會增強應用的行為。SpringBoot秉持約定優(yōu)于配置的思想,因此可以利用這些組件基本的默認行為來快速入門,并在需要的時候可以配置或擴展,以創(chuàng)建自定義解決方案。
- Spring Cloud利用Spring Boot的開發(fā)便利性,巧妙地簡化了分布式系統(tǒng)基礎設施的開發(fā),如服務發(fā)現(xiàn)注冊、配置中心、消息總線、負載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以基于Spring Boot組件進行開發(fā),做到一鍵啟動和部署。Spring Cloud并沒有重復制造輪子,它只是將目前比較成熟、經(jīng)得起實際考驗、優(yōu)秀的開源服務框架組合起來,通過Spring Boot進行封裝,屏蔽掉復雜的配置和實現(xiàn)原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護的分布式系統(tǒng)開發(fā)工具包。
以下為Spring Cloud的核心功能:
- 分布式/版本化配置
- 服務注冊和發(fā)現(xiàn)
- 服務路由
- 服務和服務之間的調(diào)用
- 負載均衡
- 斷路器
- 分布式消息傳遞
還有很多基礎的功能沒有列出,每個功能對應Spring Cloud中的一個組件,包括Spring Cloud Config、Spring Cloud Netflix (Eureka、Hystrix、Zuul、Archaius…) . Spring Cloud Bus等組件。
??云原生與微服務
提及云原生,首先需要了解一下CNCF,即云原生計算基金會,2015年由谷歌牽頭成立,基金會成員目前已有一百多個企業(yè)與機構(gòu),包括亞馬遜、微軟、思科等巨頭。目前CNCF所托管的應用已達14個,知名的項目有Kubernetes、Prometheus、Envoy等。
CNCF憲章中給出了云原生應用的三大特征,概括如下:
- 容器化封裝: 以容器為基礎,提高整體開發(fā)水平,形成代碼和組件重用,簡化云原生應用程序的維護。在容器中運行應用程序和進程,并作為應用程序部署的獨立單元,實現(xiàn)高水平資源隔離。
- 動態(tài)管理: 通過集中式的編排調(diào)度系統(tǒng)來動態(tài)管理和調(diào)度。
- 面向微服務: 明確服務間的依賴,互相解耦。
云原生包含了一組應用的模式,用于幫助企業(yè)快速、持續(xù)、可靠、規(guī)?;亟桓稑I(yè)務軟件。如圖所示,云原生由微服務架構(gòu)、DevOps和以容器為代表的敏捷基礎架構(gòu)組成。

|