2021升級版微服務教程—為什么會有微服務?什么是SpringCloud?


2021升級版SpringCloud教程從入門到實戰精通「H版&alibaba&鏈路追蹤&日志&事務&鎖」

教程全目錄「含視頻」:https://gitee.com/bingqilinpeishenme/Java-Wiki

微服務基本概念

架構的演變

為什么會有微服務?

假如回到10年前,一天張三入職了電商企業—並夕夕商城。

公司初創,人比較少,公司網站的用戶也很少,公司只有一個工程師

項目架構比較簡單

1.單體架構

image-20200317144318312
image-20200317144318312

沒有想到的是,公司業務越來越好,網站用戶量越來越大,單體架構的問題就暴露出來了,隨着訪問量增加,項目經常宕機

問題:架構簡單 難以抗住高並發

於是,招人。對並夕夕商城進行升級優化。

分析升級的方向:

  1. 數據庫 和 應用代碼要放在不同的服務器上
  2. 增加應用負載能力【集群】

於是增加負載均衡。

2.負載均衡

分布式:一個系統 通過多台服務器 協同完成系統功能

集群:同一個系統放在了多台服務器上 且每個服務器上內容相同 復制了多份

image-20200317145056653
image-20200317145056653

負載均衡的問題

  1. 成本
  2. Session

增加負載均衡之后,應用服務器不再是系統的瓶頸了,可以靈活的隨着訪問量增大的同時增加應用服務器集群的數量。

隨着業務量不斷增加,數據量也在不斷增加,數據庫出現性能瓶頸。

招人

在多位同事努力之下,對項目進行進一步的優化—讀寫分離。

3.讀寫分離

image-20200317145753793
image-20200317145753793

上述的架構看上去非常的完美,但是,隨着並夕夕商城業務量的不斷增加,新的問題暴露了出來。

問題:

  1. 商品搜索使用數據庫模糊查詢不行,不精確,慢 【全文檢索】

    圖書查詢 模糊匹配

  2. 不同模塊的數據訪問的頻率是不一樣的(熱度不同),首頁數據訪問量比較大,訂單數據的訪問量相比之下要小很多。所有的數據都去數據庫取,影響首頁訪問速度 【緩存】

招人

4.全文檢索緩存

所有的同事開始一起優化項目,商品搜索使用全文檢索技術ES完成,並且引入緩存(Redis集群),於是架構變成了這個亞子。

image-20200317150418119
image-20200317150418119

隨着並夕夕商城不斷壯大,公司迎來了風投,風投兩個億,於是商城發展的更快了,新的問題出現了。

問題:

  • 不同業務模塊之間的耦合太高,一個模塊出問題整個服務器宕機

  • 維護困難,假如應用服務器集群200台,那么項目上線意味着需要部署200台服務器

    譬如:修改了訂單的代碼 訂單模塊要重新部署 意味着所有的服務器都需要重新部署一遍

  • 冗余,有些模塊沒有必要部署在所有的服務器上

招人:100個人的團隊,對項目進行新的優化和升級—服務化(SOA),根據業務模塊的不同,拆分為不同的應用

以上就是分布式的架構

5.服務化

於是公司進入轟轟烈烈的服務化時代,但是有幾個問題需要被解決,如下

image-20200317151634243
image-20200317151634243

每一個模塊都是一個獨立的項目 都可以獨立啟動 這樣的做法 就叫做服務化 模塊變成項目之后我們稱之為服務 首頁模塊---》首頁服務

這就是服務化 這就是微服務,微服務是:特殊的分布式架構【服務化】

  • 首頁的訪問量比較大 就可以部署五個
  • 訂單的訪問量小 就可以只部署一個
image-20210105104120083
image-20210105104120083

問題:

  1. 服務之間怎么調用?例如:訂單服務需要調用商品服務的數據,怎么調用?

  2. 怎么負載均衡?服務之間負載均衡?app訪問后台怎么負載均衡?

  3. 服務怎么被管理?例如:商品服務宕機了,怎么即時的通知訂單服務?如果沒有通知訂單服務,訂單服務發的請求都會阻塞,造成訂單宕機,引發鏈式故障,整個項目崩潰

  4. 服務之間的異常處理?

    ......

以上每一個問題都需要一個新的技術解決,而引入的新技術就是微服務技術,SpringCloud(一套技術)

如何解決這幾個問題 又需要用到一些新的技術,這些技術就是所謂的微服務的技術(SpringCloud)

基於上面的問題,整個並夕夕商城團隊瘋狂的努力,找到了一些技術(SpringCloud),分別解決了上述問題,架構圖如下:

image-20200317153320482
image-20200317153320482

到此為止,並夕夕商城成為了一個微服務的架構。

服務化 微服務主要的內容就是按照業務模塊拆分不同的應用服務,並且解決拆分之后遇到的問題

什么是微服務

the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.【官方文檔】

  • 每個服務可獨立運行在自己的進程里 每個服務獨立部署啟動
  • 一系列獨立運行的微服務共同構建起整個系統
  • 每個服務為獨立的業務開發,一個微服務只關注某個特定的功能,例如訂單管理,用戶管理【按照服務拆分】
  • 微服務之間通過一些輕量的通信機制進行通信,例如Restful API(HTTP)進行調用【訂單服務如何調用商品服務】
  • 可以使用不同的編程語言與數據存儲技術開發

官網鏈接:https://www.martinfowler.com/articles/microservices.html

什么是SpringCloud

SpringCloud=分布式微服務架構下的一站式解決方案,是各個微服務架構落地技術的集合體,俗稱微服務全家桶。Spring Cloud是一個含概多個子項目的開發工具集,集合了眾多的開源框架,他利用了Spring Boot開發的便利性實現了很多功能,如服務注冊,服務發現,負載均衡等。

  • 服務管理 需要一個技術

  • 服務調用 需要一個技術

  • 負載均衡 需要一個技術

    .......

這些技術怎么來?

  1. 自己找,技術之間的整合沒有一定的技術實力搞不定
  2. SpringCloud,SpringCloud官方找了一套解決微服務問題的技術,做了封裝和整合,讓用戶可以直接使用,不需要關心技術整合的問題

開發微服務相當於買一台電腦

  1. 自己組裝,自己找微服務的技術相當於自己組裝電腦
  2. 買品牌機,使用SpringCloud相當於直接買了一個聯想的電腦,CPU 顯卡等等都幫你處理好了

SpringBoot 和 SpringCloud有什么關系

使用負載均衡需要很多的配置,寫配置

  • 自己寫配置
  • SpringBoot自動配置

SpringCloud 使用了 SpringBoot 作為底層,通過SpringBoot的自動配置簡化分布式的開發

如果你覺得這篇內容對你挺有有幫助的話

  1. 點贊支持下吧,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)

  2. 歡迎在留言區與我分享你的想法,也歡迎你在留言區記錄你的思考過程。

  3. 覺得不錯的話,也可以關注 編程鹿 的個人公眾號看更多文章和講解視頻(感謝大家的鼓勵與支持🌹🌹🌹)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM