微服务指南走北(五):什么样的服务才可以说是微服务?
最近有朋友提出了問題:“是不是擁有了服務發現就是微服務了?”,對于這個問題,很難回答,畢竟微服務的定義在每個人心里都是不一樣的,就像“互聯網思維”一樣,我們說得清“互聯網”,卻總也說不清楚什么是“互聯網思維”(在這個思想開放的互聯網時代,你我都是哈姆雷特,但是也是交流溝通便利性的時代)。今天總結這篇文章呢,來說說我對微服務的理解,以及再來探討下微服務的定義。
首先,微服務是什么?
其實回頭看看我之前寫的《微服務指南走北》系列的第一篇《微服務指南走北(一):微服務是什么》中描述的:微服務是基于Restful風格的,基于資源及資源操作一組API的集合,可以實現模塊兒或者說是特定的業務范圍內的一個完全獨立、細粒度、自包含的一個服務。每個微服務提供一組API,供其他微服務或者應用客戶端所用。
其中,包含如下幾個要點:
基于資源
模塊兒化或者業務獨立
微服務的“微”究竟是什么意思
幾個誤區:
模塊兒化:不得不說,微服務確實可以天然實現模塊兒化,將不同的模塊劃分為不同的服務。但是這里存在一個誤區,就是很多人想要借用微服務來實現模塊化,從而去分解龐大的系統;不能說這樣做有什么問題,但是從解決問題的角度來說,微服務的主旨并不是為了實現模塊化,并且只要架構合理,單體應用也可以做好模塊化。同理,架構模式不合理,必然導致微服務管理上的災難(以后單獨寫文章來聊聊這個問題)。
服務微小化:微服務并不是說要將服務拆分成多個微小的服務,舉個例子,假設java單體應用本來有2個功能,一個是賬戶管理,一個是訂單管理。運行起來的WebServer一共占用內存是50M,假設其中20M是WebServer自身占用的內存,那么分為兩個微服務以后,就需要單獨啟動兩個WebServer,那么就需要多占用20M的內存(當然這里拿WebServer來講,并不是很合適,畢竟jvm中自身有優化),如果進一步結合docker來使用,那么在docker中,還需要增加額外的內存,關于這個問題,就不詳解了,想了解的朋友可以參考如下文章Analyzing java memory usage in a Docker container。內存還僅僅是一方面,由于服務拆分而導致的HA、維護等成本的開銷也會增加很多。
我的理解
我認為微服務的“微”主要體現在業務的分離上,也許一個服務會占用較大內存,但是業務相對獨立,每個服務負責相應的業務;就像我們常見的公司的組織架構一樣,不同的部門來完成不同的任務,不同部門之間相互配合又相互獨立。
微服務的優點
我們先來回顧下之前我所總結的微服務的優點(摘自《微服務指南走北(一):微服務是什么》):
可以解決復雜性的問題,在功能不變的情況下,分解為多個相互協作的微服務,通過rest API定義邊界,這樣極大易于開發、理解和維護。
微服務架構是的每個服務可以由專門的開發團隊或者個人開發者進行開發,開發者可以自由選擇技術,不必受制于規定的技術和框架,只要API服務協議好交互方式即可(如restful)。這樣即使重新技術過時的微服務模塊兒或者重寫以前的代碼,也不是很困難。
微服務架構模式使得每個微服務獨立部署,且每個服務獨立擴展,開發者不再需要協調其它服務部署對本服務的影響。微服務架構模式使得持續化部署成為可能。
這里我再補充幾個優點:
微服務可以結合docker相關服務,易于實現HA(比如kubernetes + docker + 微服務),使得可以服務不會受到單點故障的影響。
我認為的微服務應該具備的特點
以下是我實際應用微服務架構需要保證的特點:
所有的服務都盡量保證無狀態或者有狀態的可以做狀態轉移(如session等數據,可以轉移到redis集群中)
業務的相對分離
使用API網關(盡量不要將微服務的各個服務暴露出去,以免造成安全問題)
服務間采用統一的通信模式(restful、Thrift等)
能夠脫離開發語言,即不受制于特定的開發語言
微服務中的各個服務盡量不要有強依賴(即不會因為某個服務的停止,而導致整個服務或者其他服務不可用)
具有易于實現HA的特質,即不存在單點故障,同時運行多個實例提供服務并實現了負載均衡
什么樣的服務才可以說是微服務?
對于這個問題,到這里,我也無法做出定論,但是比較確定的是微服務是在特定情境下使用的架構思想,既然是思想,就如開篇所說的,大家都是哈姆雷特,我也只能對我自己的理解進行描述,無法對你心里的思想進行固化,不過如果你感覺比較模糊,可以借鑒我再實際應用中總結的微服務需要保證的特點(即上一章描述的)。
相關文章鏈接:
微服務指南走北(一):微服務是什么
微服務指南走北(二):微服務架構的進程間通信(IPC)
微服務指南走北(三):Restful API 設計簡述
微服務指南走北(四):你不愿意做微服務架構的十個理由
by 劉迎光@螢火蟲工作室
OpenBI交流群:495266201
MicroService 微服務交流群:217722918
mail: liuyg#liuyingguang.cn
博主首頁(==防止爬蟲==):http://blog.liuyingguang.cn
OpenBI問答社區:http://www.openbi.tk
總結
以上是生活随笔為你收集整理的微服务指南走北(五):什么样的服务才可以说是微服务?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性表的链式存储结构(C语言版)
- 下一篇: .net core 使用redis 基于