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