一步一圖,帶你重頭梳理微服務架構!
掃描二維碼
隨時隨地手機看文章
什么是微服務?
就目前而言,對于微服務業(yè)界并沒有一個統(tǒng)一的、標準的定義(While there is no precise definition of this architectural style ) 。
但通常在其而言,微服務架構是一種架構模式或者說是一種架構風格,它提倡將單一應用程序劃分成一組小的服務,每個服務運行獨立的自己的進程中,服務之間互相協(xié)調、互相配合,為用戶提供最終價值。
服務之間采用輕量級的通信機制互相溝通(通常是基于 HTTP 的 RESTful API ) 。每個服務都圍繞著具體業(yè)務進行構建,并且能夠被獨立地部署到生產環(huán)境、類生產環(huán)境等。
另外,應盡量避免統(tǒng)一的、集中式的服務管理機制,對具體的一個服務而言,應根據(jù)業(yè)務上下文,選擇合適的語言、工具對其進行構建,可以有一個非常輕量級的集中式管理來協(xié)調這些服務。可以使用不同的語言來編寫服務,也可以使用不同的數(shù)據(jù)存儲。
根據(jù)馬丁.福勒的描述,我總結了以下幾點:
①小服務
小服務,沒有特定的標準或者規(guī)范,但他在總體規(guī)范上一定是小的。
②進程獨立
每一組服務都是獨立運行的,可能我這個服務運行在 Tomcat 容器,而另一個服務運行在 Jetty 上??梢酝ㄟ^進程方式,不斷的橫向擴展整個服務。
③通信
過去的協(xié)議都是很重的,就像 ESB,就像 SOAP,輕通信,這意味著相比過去更智能更輕量的服務相互調用,就所謂 smart endpoints and dumb pipes。
這些 Endpoint 都是解耦的,完成一個業(yè)務通信調用串起這些 Micro Service 就像是 Linux 系統(tǒng)中通過管道串起一系列命令業(yè)務。
過去的業(yè)務,我們通常會考慮各種各樣的依賴關系,考慮系統(tǒng)耦合帶來的問題。微服務,可以讓開發(fā)者更專注于業(yè)務的邏輯開發(fā)。
④部署
不止業(yè)務要獨立,部署也要獨立。不過這也意味著,傳統(tǒng)的開發(fā)流程會出現(xiàn)一定程度的改變,開發(fā)的適合也要有一定的運維職責。
⑤管理
傳統(tǒng)的企業(yè)級 SOA 服務往往很大,不易于管理,耦合性高,團隊開發(fā)成本比較大。
微服務,可以讓團隊各思其政的選擇技術實現(xiàn),不同的 Service 可以根據(jù)各自的需要選擇不同的技術棧來實現(xiàn)其業(yè)務邏輯。
微服務的利與弊
為什么用微服務呢?因為好玩?不是的。下面是我從網絡上找到說的比較全的優(yōu)點:
優(yōu)點是每個服務足夠內聚,足夠小,代碼容易理解這樣能聚焦一個指定的業(yè)務功能或業(yè)務需求。
開發(fā)簡單、開發(fā)效率提高,一個服務可能就是專一的只干一件事。
微服務能夠被小團隊單獨開發(fā),這個小團隊是 2 到 5 人的開發(fā)人員組成。
微服務是松耦合的,是有功能意義的服務,無論是在開發(fā)階段或部署階段都是獨立的。
微服務能使用不同的語言開發(fā)。
易于和第三方集成,微服務允許容易且靈活的方式集成自動部署,通過持續(xù)集成工具,如 Jenkins,Hudson,bamboo。
微服務易于被一個開發(fā)人員理解,修改和維護,這樣小團隊能夠更關注自己的工作成果。無需通過合作才能體現(xiàn)價值。微服務允許你利用融合最新技術。
微服務只是業(yè)務邏輯的代碼,不會和 HTML,CSS 或其他界面組件混合。
每個微服務都有自己的存儲能力,可以有自己的數(shù)據(jù)庫,也可以有統(tǒng)一數(shù)據(jù)庫。
什么組織適合使用微服務?
微服務帶了種種優(yōu)點,種種弊端,那么什么組織適合使用微服務?
①墨菲定律(設計系統(tǒng))和康威定律(系統(tǒng)劃分)
康威定律,是一個五十多年前就被提出來的微服務概念。在康威的這篇文章中,最有名的一句話就是:
Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
-Melvin Conway(1967)
看看下面的圖片,再想想 Apple 的產品、微軟的產品設計,就能形象生動的理解這句話。
架構是不斷演化出來的,微服務也是這樣,當從各大科技公司,規(guī)模大到一定程度,完全需要演化成更進一步管理的技術架構體系。
我們做技術都是為了產品的,一旦過程出來了什么問題,回溯尋找問題會非常耗時。
使用了微服務架構體系,團隊組織方式需要轉變成跨職能團隊,即每個團隊都有產品專家,策劃專家,開發(fā)專家,運維專家,他們使用 API 方式發(fā)布他們的功能,而平臺使用他們的功能發(fā)布產品。
微服務技術架構體系
下面我分享一下大部分公司都使用的微服務技術架構體系:
服務發(fā)現(xiàn)
主流的服務發(fā)現(xiàn),分為三種:
缺點是,由于服務沒有負載均衡功能,對負載均衡服務,可能會有相當大的性能問題。
缺點是,對多語言環(huán)境不是很好,你需要單獨給消費者的客戶端開發(fā)服務發(fā)現(xiàn)和負載均衡功能。當然了,這個方法通常都是用在 Spring Cloud 上的。
網關
將生活實際聯(lián)系到微服務上,就不難理解網關的意思了:
反向路由:很多時候,公司不想讓外部人員看到我們公司的內部,就需要網關來進行反向路由。即將外部請求轉換成內部具體服務調用。
安全認證:網絡中會有很多惡意訪問,譬如爬蟲,譬如黑客攻擊,網關維護安全功能。
限流熔斷:當請求很多服務不堪重負,會讓我們的服務自動關閉,導致不能用服務。限流熔斷可以有效的避免這類問題。
日志監(jiān)控:所有的外面的請求都會經過網關,這樣我們就可以使用網關來記錄日志信息。
灰度發(fā)布,藍綠部署。是指能夠平滑過渡的一種發(fā)布方式。在其上可以進行 A/B testing。
即讓一部分用戶繼續(xù)用產品特性 A,一部分用戶開始用產品特性 B,如果用戶對 B 沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到 B 上面來。
開源網關 Zuul 架構:
配置中心
今天重點說說現(xiàn)在應用質量不錯的配置中心,攜程開源的阿波羅(Apollo):
通訊方式
關于通訊方式,一般市面也就是兩種遠程調用方式,我整理了一個表格:
監(jiān)控預警
一般監(jiān)控分為如下層次:
日志監(jiān)控
Metrics 監(jiān)控
健康檢查
調用鏈檢查
告警系統(tǒng)
同時將日志傳入 ELK,將 Metrics 傳入 InfluxDB 時間序列庫。而像 Nagios,可以定期向 Agent 發(fā)起信息檢查微服務。
很多公司都有調用鏈監(jiān)控,就譬如阿里有鷹眼監(jiān)控,點評的 Cat,大部分調用鏈監(jiān)控(沒錯,我指的 Zipkin)架構是這樣的:
熔斷、隔離、限流、降級
下面介紹一下 Hystrix 的運行流程:
容器與服務編排引擎
下面是架構圖:
資料與文獻:
馬丁.福勒對微服務的描述
微服務架構的理論基礎 - 康威定律
調用鏈選型之Zipkin,Pinpoint,SkyWalking,CAT
作者:tengshe789,本文版權歸作者所有
https://juejin.im/post/5c0ba2bef265da614d08fefe
-END-
推薦閱讀
免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!