天天看點

微服務 SpringCloud架構詳解微服務 SpringCloud架構詳解

微服務 SpringCloud架構詳解

  • 微服務 SpringCloud架構詳解
    • 一、系統架構演進
      • 1、單體應用架構
      • 2、垂直應用架構
      • 3、分布式SOA架構
      • 4、微服務
      • 5、SOA與微服務的關系
    • 二、分布式核心功能
      • 1、遠端調用
      • 2、CAP原理
    • 三、SpringCloud三種架構方案
      • 1.第一套微服務架構解決方案:Spring Boot + Spring Cloud Netflix
      • 2.第二套微服務架構解決方案:Spring Boot + Dubbo + Zookeeper
      • 3.第三套微服務架構解決方案:Spring Boot + Spring Cloud Alibaba

微服務 SpringCloud架構詳解

一、系統架構演進

1、單體應用架構

Web應用程式發展的早期,大部分web工程(包含前端頁面,web層代碼,service層代碼,dao層代碼)是将所有的功能子產品,打包到一起并放在一個web容器中運作。

比如搭建一個電商系統:客戶下訂單,商品展示,使用者管理。這種将所有功能都部署在一個web容器中運作的系統就叫做單體架構。

優點:簡單易構。

缺點:資源有限,不支援高可用,高性能,高并發。

微服務 SpringCloud架構詳解微服務 SpringCloud架構詳解

2、垂直應用架構

當通路量逐漸增大,單一應用增加機器帶來的加速度越來越小,将應用拆成互不相幹的幾個應用,以提升效率。

優點:比單體稍複雜,任然簡單易構。

缺點:資源有限,不支援高可用,高性能,高并發。

微服務 SpringCloud架構詳解微服務 SpringCloud架構詳解

3、分布式SOA架構

SOA 全稱為 Service-Oriented Architecture,即面向服務的架構。它可以根據需求通過網絡對松散耦合的粗粒度應用元件(服務)進行分布式部署、組合和使用。一個服務通常以獨立的形式存在于作業系統程序中。

站在功能的角度,把業務邏輯抽象成可複用、可組裝的服務,通過服務的編排實作業務的快速再生。目的是把原先固有的業務功能轉變為通用的業務服務,實作業務邏輯的快速複用。

SOA 特點:分布式、可重用、擴充靈活、松耦合

SOA實質就把各個重用的服務單獨抽離出來對外提供服務。類似于中台架構。

優點:降低了耦合性,提高了并發能力。

缺點:抽取服務粒度大。

微服務 SpringCloud架構詳解微服務 SpringCloud架構詳解

4、微服務

各個子產品拆分成獨立的服務,每個獨立的服務在通過分布式叢集架構實作高可用,高性能,高并發。

優點:實作高可用,高性能,高并發。

缺點:服務過多,技術門檻高,維護成本高。

微服務 SpringCloud架構詳解微服務 SpringCloud架構詳解

5、SOA與微服務的關系

SOA( Service Oriented Architecture )“面向服務的架構”:他是一種設計方法,其中包含多個服務, 服務之間通過互相依賴最終提供一系列的功能。一個服務 通常以獨立的形式存在與作業系統程序中。各個服務之間 通過網絡調用。
微服務架構:其實和 SOA 架構類似,微服務是在 SOA 上做的升華,微服務架構強調的一個重點是“業務需要徹底的元件化和服務化”,原有的單個業務系統會拆分為多個可以獨立開發、設計、運作的小應用。
這些小應用之間通過服務完成互動和內建。
           

二、分布式核心功能

1、遠端調用

REST,即Representational State Transfer的縮寫,如果一個架構符合REST原則,就稱它為RESTful架構。

RPC(Remote Procedure Call ) 一種程序間通信方式。允許像調用本地服務一樣調用遠端服務。RPC架構的主要目标就是讓遠端服務調用更簡單、透明。RPC架構負責屏蔽底層的傳輸方式(TCP或者UDP)、序列化方式(XML/JSON/二進制)和通信細節。開發人員在使用的時候隻需要了解誰在什麼位置提供了什麼樣的遠端服務接口即可,并不需要關心底層通信細節和調用過程。

           
比較項 RESTful RPC
通訊協定 HTTP 一般使用TCP
性能 略低 較高
靈活度
應用 微服務架構 SOA架構
1、HTTP相對更規範,更标準,更通用,無論哪種語言都支援http協定。如果你是對外開放API,例如開放平台,外部的程式設計語言多種多樣,你無法拒絕對每種語言的支援,現在開源中間件,基本最先支援的幾個協定都包含RESTful。
2、 RPC 架構作為架構微服務化的基礎元件,它能大大降低架構微服務化的成本,提高調用方與服務提供方的研發效率,屏蔽跨程序調用函數(服務)的各類複雜細節。讓調用方感覺就像調用本地函數一樣調用遠端函數、讓服務提供方感覺就像實作一個本地函數一樣來實作服務。

           

2、CAP原理

分布式系統的最大難點,就是各個節點的狀态如何同步。CAP 定理是這方面的基本定理,也是了解分布式系統的起點。

CAP理論由 Eric Brewer 在ACM研讨會上提出,而後CAP被奉為分布式領域的重要理論。

Consistency(一緻性):資料一緻更新,所有資料的變化都是同步的。
Availability(可用性):在叢集中一部分節點故障後,叢集整體是否還能響應用戶端的讀寫請求。
Partition tolerance(分區容忍性):某個節點的故障,并不影響整個系統的運作。
           

CAP理論就是任何分布式系統隻可同時滿足二點,沒法三者兼顧,既然一個分布式系統無法同時滿足一緻性、可用性、分區容錯性三個特點,是以我們就需要抛棄一樣:

微服務 SpringCloud架構詳解微服務 SpringCloud架構詳解
選 擇 說 明
CA 放棄分區容錯性,加強一緻性和可用性,其實就是傳統的關系型資料庫的選擇
AP 放棄一緻性(這裡說的一緻性是強一緻性),追求分區容錯性和可用性,這是很多分布式系統設計時的選擇,例如很多NoSQL系統就是如此
CP 放棄可用性,追求一緻性和分區容錯性,基本不會選擇,網絡問題會直接讓整個系統不可用
需要明确一點的是,在一個分布式系統當中,分區容忍性和可用性是最基本的需求,是以在分布是系統中,我們的系統最當關注的就是A(可用性)P(容忍性),通過補償的機制尋求資料的一緻性
           

三、SpringCloud三種架構方案

目前市場上主流的微服務架構解決方案有3套:
第一套微服務架構解決方案:Spring Boot + Spring Cloud Netflix
第二套微服務架構解決方案:Spring Boot + Dubbo + Zookeeper
第三套微服務架構解決方案:Spring Boot + Spring Cloud Alibaba

           

1.第一套微服務架構解決方案:Spring Boot + Spring Cloud Netflix

Spring Cloud Netflix 提供了一整套 快速建構分布式系統中一些常見模式的工具,可以快速地支援實作這些模式的服務和應用程式。

spring cloud 的核心元件有哪些?
Eureka:服務注冊于發現。
Feign:基于動态代理機制,根據注解和選擇的機器,拼接請求 url 位址,發起請求。
Ribbon:實作負載均衡,從一個服務的多台機器中選擇一台。
Hystrix:提供線程池,不同的服務走不同的線程池,實作了不同服務調用的隔離,避免了服務雪崩的問題。
Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務。
config: 分布式配置。

注意:
2018 年 12 月 12 日,Netflix 宣布 Spring Cloud Netflix 系列技術棧進入維護模式(不再添加新特性)将子產品置于維護模式,
意味着 Spring Cloud 團隊将不會再向子產品添加新功能。我們将修複 block 級别的 bug 以及安全問題,我們也會考慮并審查社群的小型 pull request。

           

2.第二套微服務架構解決方案:Spring Boot + Dubbo + Zookeeper

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、輕量級的開源 Java RPC 架構。

ZooKeeper 是一種分布式協調服務,用于管理大型主機。在分布式環境中協調和管理服務是一個複雜的過程。

高性能 Java RPC 架構 Dubbo
Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、輕量級的開源 Java RPC 分布式服務架構。

它提供了三大核心能力:
面向接口的遠端方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。

最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo 采用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,是以基于這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。

Zookeeper 分布式協調服務架構。--具體參照zookeeper章節
           

3.第三套微服務架構解決方案:Spring Boot + Spring Cloud Alibaba

Spring Cloud Alibaba 緻力于提供 微服務開發的 一站式解決方案。

此項目包含開發分布式應用微服務的必需元件,友善開發者通過 Spring Cloud 程式設計模型輕松使用這些元件來開發分布式應用服務。
依托 Spring Cloud Alibaba,您隻需要添加一些注解和少量配置,就可以将 Spring Cloud 應用接入阿裡微服務解決方案,通過阿裡中間件來迅速搭建分布式應用系統。

元件
Sentinel:把流量作為切入點,從流量控制、熔斷降級、系統負載等多個次元保護服務的穩定性。
Nacos:  服務注冊與發現、配置管理和服務管理平台。
RocketMQ:一款開源的分布式消息系統,基于分布式叢集技術,提供高可用、低延時的的消息釋出與訂閱服務。
Alibaba Cloud ACM:一款在分布式架構環境中對應用配置進行集中管理和推送的應用配置中心産品。
Alibaba Cloud OSS: 阿裡雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿裡雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和通路任意類型的資料。
Alibaba Cloud SchedulerX: 阿裡中間件團隊開發的一款分布式任務排程産品,提供秒級、精準、高可靠、高可用的定時(基于 Cron 表達式)任務排程服務。

           

繼續閱讀