微服務實戰(一) 如何理解SpringBoot 、SpringCloud、Docker、K8s

本篇主要介紹對於微服務的理解
現如今,隨着互聯網的發展,對於系統性能,架構均有了更高的要求。以前傳統的ssh時代的單體應用的機構模式已顯力不從心,所以微服務架構應運而生,並且形成了越來越成熟的方案。寫本系列文章的目標是從單體架構模式到微服務完整架構模式做一個系統性的介紹,並且着重從實際操作層面上一步步地演示,將零散的知識點串聯起來。

傳統的單體應用的利弊
(比如ssh時代的慣用架構:SpringMvc、Spring、Hibernate)

單體應用模式的優點是開發和部署都非常方便,只需要考慮到單體應用如何實現業務邏輯,對於性能的擴展只需要複製部署到多個tomcat形成集羣,用Nginx進行負載均衡,即可完成一個簡單的分佈式方案。缺點就是比較簡單粗暴,不管三七二十一,直接把整個應用複製部署,沒有細化到單個功能的性能管控,並且在性能上瓶頸也很明顯,負載服務器,數據庫,都是各個瓶頸點。

 

微服務開發框架 SpringBoot
首先講一下什麼是springboot,它實際上和springmvc框架解決的是同一件事,就是如何對外提供服務(api),並且在使用層面,代碼註解也是是很相似的。

技術區別:

springmvc可以看成是servlet的封裝,首先需要建立一個java web項目,通過web.xml的配置接入springmvc入口,並且最終要將java web項目部署到容器中(比如tomcat); 而springboot則可以直接看成是一個tomcat和java web應用的集裝箱,你只需要按照約定配置好 核心配置文件(比如application.yml),寫好你的控制器(controller),然後再加上一個main方法,就可以直接啓動 tomcat+你的應用,部署後,也是直接用jar命令來啓動一個Jar包這樣的形式。

適用場景:

springboot非常適合 部署大量獨立服務,細品一下。 一個springboot的jar包就是一個完整的tomcat+應用,指定不同的端口號,一個jar命令,就啓動了應用。

微服務架構思想:

其實呢,在這兒有個架構上的思想轉變,之所以要說微服務,就是因爲整個應用從架構上就拆分成了各個小應用,比如說 電商系統,拆分成了訂單微服務,用戶微服務等等,每個微服務都使用各自獨立的數據庫,微服務之間使用RPC等方式進行交互,每個微服務都是可以獨立運行,並且只解決某一類業務。這樣整體架構就由大單體應用的模式轉變爲 微單體應用羣+獨立數據獨立運行+服務間調用 這樣的模式,整個架構的容錯率,可擴展性,高可用性 就變得更強了。

 

微服務治理解決方案 SpringCloud
當開始使用SpringBoot將單體系統拆分成若干個微服務後,面臨一大問題就是:如何管理好這些微服務呢?答案:SpringCloud

SpringCloud是一套微服務治理解決方案,首先放一個整體概念圖。

上圖已經初步表達清楚了SpringCloud的核心理念,而它的理念具體由很多組件來分別實現,早期大部分組件是封裝了來自 Netflix 貢獻的開源框架,後續SpringCloud又自研了類似 gateway 等組件,包括近來興起的 SpringCloud Alibaba,這些都遵循SpringCloud的接口規範,可插拔可切換的程度非常高,很靈活,下面就來簡單看下都有些什麼組件。

SpringCloud的核心組件包含:

1、註冊發現中心:彙總管理所有微服務的信息,包括IP,端口,API列表,並提供給其他組件。

相關技術框架:Eureka、Consul、Nacos

2、服務網關:負責對外統一提供API接口,網關可自行配置接口的轉發規則,也可直接從註冊中心獲取接口信息。

相關技術框架:Springcloud gateway、Zuul

3、配置中心:統一管理所有配置信息,供所有微服務讀取,具有更新通知、版本管理等功能

相關技術框架:Springcloud config、Nacos

4、限流:根據實際情況,對接口(QPS、併發數)做限制,保證系統的可用性

相關技術框架:Springcloud gateway自帶限流過濾器、Sentinel

5、熔斷降級:根據接口的當前狀態,評估出不能正常提供服務的接口,讓其熔斷,防止整個系統因相互調用而雪崩

相關技術框架:Hystrix、Sentinel

6、調用鏈路追蹤:監控整個服務的調用生命週期,協助定位錯誤

相關技術框架:Zipkin、Pinpoint,SkyWalking,CAT

7、遠程服務調用:服務之間的相互調用技術

相關技術框架:Feign、Dubbo

......以上爲最核心的功能組件(更多組件列表可參考:https://spring.io/projects/spring-cloud/)

下面收集一些比較好的Springcloud概念講解的文章:

最適合入門者的 SpringCloud 架構、概念、組件介紹

 

Docker
Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。

我們簡單地理解Docker,就是一個集裝箱,比如在下面的圖中,實際每個微服務的運行都需要有一系列的程序來支撐,那麼Docker的作用就是將 下面紅框內的 jdk,mysql,springboot等打包成一個單獨的Docker包,然後運行起來,對外映射出springboot的服務端口,提供服務。這樣方便在不同操作系統或者環境中遷移和部署,只需要簡單的幾個Docker命令,就可以一鍵搭建好一套微服務。而不需要從安裝各種基礎軟件開始。

 

K8S (Kubernetes)
 

k8s是一個docker集羣的管理工具,它的核心功能:

自愈: 重新啓動失敗的容器,在節點不可用時,替換和重新調度節點上的容器,對用戶定義的健康檢查不響應的容器會被中止,並且在容器準備好服務之前不會把其向客戶端廣播。


彈性伸縮: 通過監控容器的cpu的負載值,如果這個平均高於80%,增加容器的數量,如果這個平均低於10%,減少容器的數量
服務的自動發現和負載均衡: 不需要修改您的應用程序來使用不熟悉的服務發現機制,Kubernetes 爲容器提供了自己的 IP 地址和一組容器的單個 DNS 名稱,並可以在它們之間進行負載均衡。


滾動升級和一鍵回滾: Kubernetes 逐漸部署對應用程序或其配置的更改,同時監視應用程序運行狀況,以確保它不會同時終止所有實例。 如果出現問題,Kubernetes會爲您恢復更改,利用日益增長的部署解決方案的生態系統。

 

 

先寫這麼多,接下來準備寫完 springboot+springcloud+docker+k8s 的實戰系列
————————————————
版權聲明:本文爲CSDN博主「gin90」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011177064/article/details/104099501

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章