在前一段時間,我們實驗室的項目開始變得越來越麻煩,代碼也越來越臃腫,一個人兼顧前後端的全棧開發,實在是力不從心,沒有一點點幸福感,於是迫切的想要解放生產力,放飛自我,因此開始決定重構項目,改用之前學習過但是一直沒用過的微服務架構。這篇文章將從以下幾個角度來學習Springcloud入門的一些相關知識。
1、微服務是什麼?
2、微服務和微服務架構的區別是什麼?
3、微服務技術有什麼?
4、微服務的優缺點是什麼?
5、為什麼選擇Springcloud作為微服務架構?
在寫本系列文章之前,我也看了很多網上的大佬那些微服務系列的文章,他們寫的都非常好,別人問我關於一些微服務的技術文章時,我也都會把那些我認為寫的好的文章推送給他們,但是存在一個問題,那就是剛剛接觸微服務的同學,一開始覺得寫的通俗易懂而且確實很簡單,但是越往後看越看不懂。因此才萌生出自己寫一套循序漸進的文章。
一、從單體結構說起
本來想以自己的項目為例,但是由於涉及一些學校不能外傳的信息,所以換一個常見的例子。我們以餐廳賣飯為例
從上圖我們會發現,收銀、做飯、洗碗等操作都由小張一個人完成。隨著服務項目的不斷複雜,顧客人數的不斷增多,這會帶來大量的問題。
1、技術太複雜,有時候往往會牽一髮而動全身,代碼耦合性太大,修改起來很麻煩。
2、拓展能力弱,功能模塊代碼緊耦合,無人進行有效拓展
3、維護成本太高,一旦出一個問題,修改很難受。
當然還有很多很多的缺點,為此繼續一種技術去改善這個問題。什麼技術呢?就是我們今天所說的微服務架構。
二、什麼是微服務
由於業界還沒有對微服務的概念有一個統一的解釋,但是你可以這樣去理解,微服務其實就是一種思想,這個思想是:考慮如何把一個複雜的項目拆分成一個個獨立的小項目。就好比是電腦中的進程,拆分成一個個小的線程一樣。
再舉個
三、微服務和微服務架構的區別是什麼
他們倆的區別你可以這樣去理解,微服務就好比是指導思想,微服務架構就是根據這個指導思想實施的方案。就好比是古代的時候,皇帝說要減輕賦稅,然後下面的大臣根據這個指導思想去實施具體的方案。
當然這裡還有更加標準化的回答:
微服務架構是種架構模式,它提倡將單應程序劃分成組的服務,服務之間互相協調、互相配合,為戶提供最終價值。每個服務運在其獨的進程中,採輕量級的通信機制互相協作
如果你能理解剛剛皇帝的那個例子,應該就能理解微服務架構的含義了。
四、微服務技術有什麼?
微服務的技術還是很多的,python、c++等等都有,不過因為是專注於java,所以還是主要聊聊java中的微服務技術。
Dubbo被重啟之後又煥發出了新的光彩,但是跨語言支持不足是它的一個弱項,另外功能比較少,之後服務治理相關的技術,完全用好這個框架的門檻比較高。這對於初學者來說開發難度還是比較大的。目前dubbo已經被阿里捐獻給Apache了,Apache也正在致力打造屬於dubbo的微服務體系,但是從這兩年多的發展情況來看,並不樂觀。
Netflix微服務架構經過多年生產驗證,最終形成一整套開源的微服務基礎組件,統稱 NetflixOSS,Netflix 的成功經驗開始被業界認可並推崇,於是Pivotal 將 NetflixOSS 開源微服務組件集成到其 Spring 體系,推出 Spring Cloud 微服務開發技術棧。隨著時間的推移目前基本上也佔據了半壁江山。本系列教程也會圍繞著Springcloud來展開。
其他的微服務技術比如springcloud Alibaba、istio等等在這裡就不對比了,沒有大規模使用的還有待觀察。一旦流行了再學習也不遲。
五、微服務的優缺點是什麼?
既然要使用微服務,微服務有什麼優點呢?他的優缺點你可以對比著單體結構的缺點來記憶。
1、維護起來比較簡單,畢竟每一個服務只關注於項目中的一個小模塊
2、拓展性好,有新功能需要添加的時候,那就再建立一個微服務,和之前的互不幹擾。
3、每一個微服務都有著自己的資料庫
優點真的是太多了,能想到的就這些吧。
當然還有很多缺點,咳咳,缺點不說太多,要不然你覺得微服務不好了,缺點那就是一個個微服務構成了分布式系統,出現了分布式系統的各種問題。
六、為什麼選擇Springcloud?
說實話,一開始我在認識微服務的時候,完全不理解他的特點是什麼含義,只有當學習了一遍之後,重新回過頭來看,才發現,原來是這樣呀。不過在這裡你最好先記住。否則以後你連回頭的想法都沒:
1、約定大於配置。
2、適用於各種環境
3、整合了Springboot的優點
4、輕量級組件
5、功能齊全
6、靈活
優點太多,數不過來,所以你先記住這幾條,看了幾本書發現基本上也是這樣介紹的。
這篇文章是我的微服務系列的第一篇文章,下一篇文章將主要開始介紹Springcloud的每一個組件的功能,以及為什麼要有這樣一個組件。