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

2021-01-10 紙鶴視界

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

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

微服務基本概念

架構的演變

為什麼會有微服務?

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

公司初創,人比較少,公司網站的用戶也很少,公司只有一個工程師項目架構比較簡單

1.單體架構

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

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

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

分析升級的方向:資料庫 和 應用代碼要放在不同的伺服器上 增加應用負載能力【集群】

於是增加負載均衡。

2.負載均衡

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

集群:同一個系統放在了多臺伺服器上 且每個伺服器上內容相同 複製了多份

image-20200317145056653 負載均衡的問題 成本 Session

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

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

招人

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

3.讀寫分離

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

問題:

商品搜索使用資料庫模糊查詢不行,不精確,慢 【全文檢索】圖書查詢 模糊匹配不同模塊的數據訪問的頻率是不一樣的(熱度不同),首頁數據訪問量比較大,訂單數據的訪問量相比之下要小很多。所有的數據都去資料庫取,影響首頁訪問速度 【緩存】招人

4.全文檢索緩存

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

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

問題:不同業務模塊之間的耦合太高,一個模塊出問題整個伺服器宕機維護困難,假如應用伺服器集群200臺,那麼項目上線意味著需要部署200臺伺服器譬如:修改了訂單的代碼 訂單模塊要重新部署 意味著所有的伺服器都需要重新部署一遍冗餘,有些模塊沒有必要部署在所有的伺服器上

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

以上就是分布式的架構

5.服務化

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

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

這就是服務化 這就是微服務,微服務是:特殊的分布式架構【服務化】首頁的訪問量比較大 就可以部署五個 訂單的訪問量小 就可以只部署一個

image-20210105104120083 問題:

服務之間怎麼調用?例如:訂單服務需要調用商品服務的數據,怎麼調用?怎麼負載均衡?服務之間負載均衡?app訪問後臺怎麼負載均衡?服務怎麼被管理?例如:商品服務宕機了,怎麼即時的通知訂單服務?如果沒有通知訂單服務,訂單服務發的請求都會阻塞,造成訂單宕機,引發鏈式故障,整個項目崩潰服務之間的異常處理?......以上每一個問題都需要一個新的技術解決,而引入的新技術就是微服務技術,SpringCloud(一套技術)

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

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

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開發的便利性實現了很多功能,如服務註冊,服務發現,負載均衡等。

服務管理 需要一個技術服務調用 需要一個技術負載均衡 需要一個技術.......這些技術怎麼來?自己找,技術之間的整合沒有一定的技術實力搞不定 SpringCloud,SpringCloud官方找了一套解決微服務問題的技術,做了封裝和整合,讓用戶可以直接使用,不需要關心技術整合的問題 開發微服務相當於買一臺電腦 自己組裝,自己找微服務的技術相當於自己組裝電腦 買品牌機,使用SpringCloud相當於直接買了一個聯想的電腦,CPU 顯卡等等都幫你處理好了

SpringBoot 和 SpringCloud有什麼關係

使用負載均衡需要很多的配置,寫配置自己寫配置 SpringBoot自動配置

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

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

點讚支持下吧,讓更多的人也能看到這篇內容(收藏不點讚,都是耍流氓 -_-)歡迎在留言區與我分享你的想法,也歡迎你在留言區記錄你的思考過程。覺得不錯的話,也可以關注 編程鹿 的個人公眾號看更多文章和講解視頻(感謝大家的鼓勵與支持)

文章轉載自:https://www.cnblogs.com/bingyang-py/p/14247988.html

相關焦點

  • 微服務這麼流行,你理解嘛?
    2、微服務和微服務架構的區別是什麼?3、微服務技術有什麼?4、微服務的優缺點是什麼?5、為什麼選擇Springcloud作為微服務架構?Netflix微服務架構經過多年生產驗證,最終形成一整套開源的微服務基礎組件,統稱 NetflixOSS,Netflix 的成功經驗開始被業界認可並推崇,於是Pivotal 將 NetflixOSS 開源微服務組件集成到其 Spring 體系,推出 Spring Cloud 微服務開發技術棧。隨著時間的推移目前基本上也佔據了半壁江山。本系列教程也會圍繞著Springcloud來展開。
  • Spring Cloud系列各子項目在微服務架構中的作用分析
    Springcloud一般用於搭建微服務項目,那麼微服務項目是怎麼工作的呢?Springcloud的幾個子項目分別扮演什麼角色?網關:Spring Cloud Netflix Zuul / Spring Cloud Gateway微服務開發要把一整個系統不同模塊分成不同的服務項目,每個服務都有自己的調用地址埠信息,那麼前端用戶怎麼調用呢?總不能把所有服務的接口地址給前端吧。
  • SpringCloud微服務架構篇3:Spring Cloud簡介
    2、微服務的負載均衡客戶端負載均衡,也稱為軟負載均衡,指在服務消費者保存有一份服務者列表,這份服務者列表通常是從服務治理伺服器中動態獲取,也可以採用股東配置方式,然後通過某種負載均衡策略來決定每次服務調用時所使用的具體服務實例,從而實現微服務之間的負載均衡。
  • 20道你必須要背會的微服務面試題,面試一定會被問到
    寫在前面:在學習springcloud之前大家一定要先了解下,常見的面試題有那塊,然後我們帶著問題去學習這個微服務技術,那麼就會更加理解springcloud技術。如果你已經學了springcloud,那麼在準備面試的時候,一定要看看看這些面試題。
  • Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這麼多人在用!
    Zuul是spring cloud中的微服務網關。網關:是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。
  • restful微服務風格_restful 風格的微服務架構 - CSDN
    本文整理了 spring boot + jpa+mysql+redis +swagger+yml等技術,實現了微服務restFul 風格的demo,下載即運行[http://localhost:8080/
  • 微服務架構技術棧
    一、前言2014 年可以認為是微服務 1.0 的元年,當年有幾個標誌性事件:一是 Martin Fowler 在其博客上發表了」Microservices」一文,正式提出微服務架構風格;二是 Netflix 微服務架構經過多年大規模生產驗證,最終抽象落地形成一整套開源的微服務基礎組件,統稱 NetflixOSS,Netflix 的成功經驗開始被業界認可並推崇
  • 覆蓋全網的阿里微服務架構有多牛:K8S+實戰+筆記+項目教程
    書籍教程結構本書共分四部分,從基礎到實戰,講解了基於Spring Cloud的常用組件。第8章 配置中心: Spring Cloud Config我們知道,一個微服務系統可能由成千上萬的服務組成,每個服務都會有自己的配置,不同服務之間的有些配置是相同的,比如資料庫。如果對於每個服務,我們都複製相同的配置,一旦該配置發生了變化,那麼每個服務都需要修改,代價可想而知。
  • SpringCloud微服務架構篇7:Config配置資源庫及加解密
    {label}:對應配置服務端鎖配置的spring.cloud.config.label。配置伺服器根絕客戶端的請求參數、以及配置文件中鎖配置的標籤(spring.cloud.config.label),從git倉庫中按照上述規則去查找服務的配置文件。配置伺服器將匹配到的git倉庫拉取到本地,並建立本地緩存。
  • 微服務,Java目前很火熱的系統架構
    雖然解決了代碼耦合問題,但是系統間相互獨立,會有很多重複開發工作,影響開發效率。舉一個例子來理解,比如說一個電商項目,根據業務功能拆分成兩套系統: 前端門戶系統:就是用戶看到的界面。 後臺管理系統:內部人員的管理界面。
  • 放棄微服務,改用宏服務,Uber 這波什麼操作?
    一向是微服務積極分子的 Uber 為什麼突然改用宏服務了?以「簡單」著稱的微服務為什麼又變得難以維護了呢? 1 Uber 支付團隊放棄微服務,轉用宏服務 4 月 6 日,Uber 支付體驗平臺的工程經理 Gergely Orosz 發布推文表示其團隊的架構方向已經發生了變化,放棄微服務,轉而使用宏服務。
  • 基於容器雲的微服務架構實踐
    【編者按】微服務架構的誕生和容器技術的流行,幾乎是同時發生的,這並非偶然,而是網際網路時代倒逼傳統技術和架構而產生的變革,而以Docker為代表的容器技術則為微服務理念提供了匹配的實現機制,本文作者從什麼是微服務切入,詳細的介紹了微服務架構的優勢,最後從自身實踐出發,給出了微服務架構的雲端實踐。
  • DDD到底適不適合微服務架構?
    從初期的單體架構,到豎井式架構、RPC架構,再到大放異彩的微服務架構,可以說架構演進,本質上就是基於業務,對現有架構的抽象過程。一名架構師,最怕缺少全局意識和長線思維。如果架構師設計架構的出發點,只是緩解燃眉之急,那麼在未來,這套系統的迭代會越來越困難,很可能陷入推翻、重建,再推翻、再重建的「鬼打牆」。
  • 微服務優化之使用gRPC做微服務的內部通信
    大家好,在本文中將為大家介紹為什麼我們應該使用gRPC代替RESTful或JSON,來開發微服務內部的通信接口。什麼是gRPC?gRPC是一個高性能的、開源的、普遍通用的RPC框架。簡單地說,它能夠幫助我們建立透明的服務端和客戶端通信系統。Google開發了GRPC並且將其開源。
  • 「首席架構師看微服務架構」介紹NGINX的微服務參考架構
    我們還認識到,實現微服務有許多不同的方法,其中許多方法都是新穎的,並且特定於各個開發團隊的需求。我們認為需要使用模型來使公司更容易開發和交付自己的基於微服務的應用程式。考慮到這一切,NGINX專業服務部門正在開發NGINX微服務參考架構(MRA) - 一組可用於創建自己的微服務應用程式的模型。
  • 微服務拆分到什麼粒度合適——康威定律
    微服務這個概念一直很火,現在ServiceMesh概念更火,最近我經手的多個項目也都採用微服務的方式開發。但實踐發現,當一個RD同時開發超過2個微服務的時候,出現bug或故障的概率會提升。我現在看項目的時候會不自覺的關注工程服務拆分個數和研發人數的比值。雖然這麼做,我卻說不出來個所以然,也沒有找到一個理論依據。
  • 微服務RPC框架選美
    說到RPC框架,可能大家能想到一堆RPC開源框架,那麼在微服務平臺中,微服務間的服務調用,不可避免的會遇到一個問題,該選用哪一個RPC框架好呢?今天我們就請到三位RPC框架,來進行一場選美大賽,看看誰更適合微服務平臺中的服務間調用。
  • 架構大遷移:從Java Spring到ReactJS +API微服務架構
    本文中蟲蟲給大家介紹實例Java平臺重構的方法,將Java Spring開發的系統遷移到ReactJS+API的微服務架構。基礎梳理為什麼要重構平臺架構?結合本文,一個典型的Spring架構如下圖:很有可能在這個平臺上工作了很長時間,並且出於第一部分所述的各種原因,你必須做架構重構。但是缺乏測試資源,還還不想破壞任何東西,你不知道如何做?那麼你請隨著蟲蟲繼續往下走。
  • 基於Prometheus來做微服務監控,有多吃香?
    本文將介紹我們基於Prometheus搭建微服務監控系統的一些實踐經驗,及愛奇藝號在微服務監控方面的一些探索和實踐,從愛奇藝號的業務特點出發,結合現有的開發運維技術棧確定監控的對象和指標,並有針對性地自研了一些關鍵組件和服務,實現服務的全面監控和統一報警。
  • Java微服務可以和Go一樣快嗎?
    Go(與Java相比)有什麼好處-根據我的經驗,這是我的個人看法: 容易實現功能模式,例如合成,純函數,不可變狀態。 樣板代碼少得多(但仍然太多)。 它仍然處於生命周期的早期,因此它不具有向後兼容的沉重負擔-他們仍然可以打破現狀來改進它。