javascript
微服务开发框架 SpringCloud
今天給大家介紹一下微服務開發框架 SpringCloud。
概述
微服務架構是當前軟件開發領域的技術熱點。它在各種博客、社交媒體和會議演講上的出鏡率非常之高。大家以前可能或多或少聽說過些許。然而微服務似乎又是非常虛幻的——我們找不到微服務的完整定義,以至于很多人認為這是一個概念的炒作。
單體應用
一般講到微服務架構,都會提到單體應用。首先來說說單體應用:
一個歸檔包(比如 war 包)包含的所有功能的應用程序。在項目中我們通常將需求分為三個主要部分:數據庫、服務端處理、前端展現。在業務發展初期,由于所有的業務邏輯在一個應用中,開發、測試、部署都還比較容易且方便。這種通常稱為單體應用。這也就是現在稱之為單體應用架構的方法論。
盡管該應用已經進行了模塊化,但由于 UI 和若干業務模塊最終都被打包在同一個 War 包中,改 war 包包含了整個系統所有的業務功能,這樣的應用系統成為單體應用。 相信很多項目都是從單體應用開始的。單體應用比較容易部署、測試,在項目初期,單體應用可以很好地穩定運行。然而,一般項目都會隨著需求而不斷的變化以及增加,越來越多的人加入到項目的開發團隊,代碼庫也在飛速地膨脹。慢慢地,單體應用變得越來越臃腫,可維護性、靈活性逐漸降低,維護成本越來越高。
因此,我們可以從中看出單體應用會面臨的一些問題:
- 復雜性高
在大型單體應用中一般會包含的模塊非常多、模塊的邊界也非常模糊、依賴關系不清晰、代碼質量參差不齊、混亂地堆砌在一起,這些將導致整個項目非常復雜。每次修改代碼都心驚膽戰,甚至添加一個簡單的功能,或者修改一個 Bug 都會帶來隱藏的缺陷。
- 技術債務
隨著時間推移、需求變更和人員更迭,會逐漸形成應用程序的技術債務,并且越積越多。
- 部署頻率低
隨著代碼的增多,構建和部署的時間成本也會上升。一般修復或者新增功能都可能需要重新部署整個應用。這種全量部署的方式耗時長、影響范圍大、風險高,使得單體應用項目上線部署的頻率較低。
- 可靠性差
某個應用 Bug 可能會導致整個應用的崩潰。
- 擴展能力受限
單體應用只能作為一個整體進行擴展,無法根據業務模塊的需要進行伸縮。例如,應用中有的模塊是計算密集型的,它需要強勁的 CPU;有的模塊則是 IO 密集型的,需要更大的內存。由于這些模塊部署在一起,不得不在硬件的選擇上作出妥協。
- 阻礙技術創新
單體應用往往使用統一的技術平臺或方案解決所有的問題,團隊中的每個成員都必須使用相同的開發語言和框架,要想引入新框架或新技術平臺會非常困難。
下面著重介紹微服務架構:
微服務架構風格是一種將一個單體應用程序開發為一組小型服務的方法,每個服務運行在自己的進程中,服務間通信采用輕量級通信機制(通常用 HTTP資源API)。這些服務圍繞業務能力構建摒棄人可通過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發,使用不同的數據存儲技術。——引自Martin Fowler 的博客
最直觀的區別如下:
那么從上面的描述中可以看到,微服務加否應具備以下特性:
- 每個微服務可獨立運行在自己的進程里,做到了進程隔離。
- 一系列獨立運行的微服務共同構建起整個系統。
- 每個服務為獨立的業務開發,一個微服務只關注某個特定的功能,例如訂單管理、用戶管理等。
- 微服務之間通過一些輕量級的通信機制進行通信,例如通過 RESTful API 進行調用。
- 可以使用不同的語言與數據庫存儲技術。
- 全自動的部署機制。
還是以之前的電商平臺系統為例,使用微服務架構來架構該應用,如下圖:
將整個應用拆分為多個服務,各個微服務獨立運行在自己的進程中,并分別有自己的數據庫,微服務之間使用 REST 或者其他協議通信。
當然,在軟件領域,沒有萬能的解決方案。同樣的,微服務也存在一定的不足:
- 運維要求較高:
更多的服務意味著更多運維的投入。在單體應用架構中,只需要保證一個應用的正常運行。而在微服務當中,需要保證幾十甚至幾百個服務的正常運行與協作,這給運維帶來了很大的挑戰。
- 分布式系統固然的復雜性:
使用微服務構建的是分布式系統。對于一個分布式系統,系統容錯、網絡延時、分布式事務等都會帶來巨大的挑戰。
- 重復勞動:
很多服務可能都會使用相同的功能,而這個功能并沒有達到分解為一個微服務的程度,這個時候,可能各個服務都會開發這一功能,從而導致代碼重復。
如何實現微服務架構以及技術選型
通過上面的介紹,我們不僅知道了微服務架構的定義及其缺點,還總結了一些指導性的原則,為合理架構微服務提供了理論支持。
技術選型
開始進入真正的主角介紹,Spring Cloud開發框架。
Spring Cloud 是一個用于構建分布式系統的通用模塊的工具集。
Spring Cloud 特點
- 約定優于配置
- 適用于各種環境
- 隱藏了組件的復雜性
- 開箱即用
- 輕量級的組件
- 豐富的組件,比如:服務發現、斷路器、微服務網關等,后面實驗將會一一介紹。
- 靈活,Spring Cloud 的組成是解耦的,開發人員可按需靈活挑選組合。
更多關于 Spring Cloud 的信息可以去官網查看:spring.io。
參考資料:https://www.lanqiao.cn/courses/1360
如果覺得對你有幫助的話就點個贊關注一下吧!
總結
以上是生活随笔為你收集整理的微服务开发框架 SpringCloud的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pygame实战项目:用300行代码写出
- 下一篇: D0rado与javascript