【Spring Cloud Alibaba】Spring Cloud Alibaba 從入門到精通之微服務前世今生

Spring Cloud Alibaba 簡介

Spring Cloud Alibaba是Spring Cloud的一個子項目。致力於提供微服務開發的一站式解決方案,項目包含開發分佈式應用服務的必需組件,方便開發者通過Spring Cloud編程模型輕鬆使用這些組件來開 發分佈式應用服務;Spring Cloud Alibaba基於Spring Cloud,符合Spring Cloud標準;Spring Cloud Alibaba是阿里的微服務解決方案,只需要添加一些註解和少量配置,就可以將Spring Cloud 應用接入阿里分佈式應用解決方案,通過阿里中間件來迅速搭建分佈式應用系統。

注意事項:使用它需要有一定的SpringBoot基礎知識,如果對SpringBoot不瞭解的話、可以在阿里大學課堂中學習SpringBoot從基礎到實戰內容

微服務架構前世今生

微服務架構演變過程

傳統單體架構—>分佈式架構—>SOA面向服務架構—>微服務架構模式

傳統架構(單體結構)

傳統的架構,也就是爲單體應用,也就是大家在早期所學習的JavaEE知識SSH或者SSM架構模式,會採用分層架構模式:數據庫訪問層、業務邏輯層、控制層,從前端到後臺所有的代碼都是一個開發者去完成。
該架構模式沒有對我們業務邏輯代碼實現拆分,所有的代碼都寫入到同一個工程中裏面,適合於小公司開發團隊或者個人開發。
org.wavefar.controler—springmvc 視圖層 jsp/ftl
org.wavefar.service—業務邏輯層
org.waverfar.dao—數據庫訪問層
將項目的代碼都放入到同一個項目,部署在同一個Tomat中。

該架構模式存在哪些優、缺點:
優點:開發簡單、運維簡單
缺點:該架構模式沒有對我們的業務邏輯實現拆分,所有的代碼都寫入到同一個項目中,只適合小團隊或者個人形式開發,不適合團隊模式協同工作開發,這種架構模式最大的缺點,如果該系統一個模塊出現不可用、會導致整個系統無法使用。
應用場景:政府項目、管理系統、crm、oa適合於個人小團隊開發。

分佈式架構

分佈式架構模式是基於傳統的架構模式演變過來,將傳統的單點項目根據業務模塊實現拆分、會拆分爲會員系統、訂單系統、支付系統、秒殺系統等。 從而降低我們項目的耦合度,這種架構模式開始慢慢的適合於互聯網公司開發團隊。

如果項目團隊人數較多需要進行項目拆分。需要把單體項目不同的系統。大型公司和大型開發團隊多用這種團隊開發的模式。
1.png

不同的系統如何連成一塊呢?需要通過域名跳轉。

會員系統:memner.mayikt.com
支付系統pay.mayikt.com
命名系統化:包含服務和視圖層

SOA面向服務架構

不同系統間的會話是如何進行綁定的呢?需要用到SSO單點登入系統。
3.png
SOA架構模式也稱作爲:面向服務架構模式、俗稱面向與接口開發,將共同存在的業務邏輯抽取成一個共同的服務,提供給其他的服務接口實現調用、服務與服務之間通訊採用rpc遠程調用技術。

通過SSO系統能解決代碼冗餘的問題。
服務:只是有接口 沒有控制層 沒有視圖層
org.wavefar.service
org.wavefar.dao
這種模式叫作SOA面向業務邏輯的開發。

SOA架構模式特點:
1、SOA架構通訊中,採用XML方式實現通訊、在高併發下通訊過程中協議存在非常大冗餘性,所以在最後微服務架構模式中使用JSON格式替代了XML。

2、SOA架構模式實現方案爲Web Service或者是ESB企業服務總線 底層通訊協議SOAP協議(Http+XML)實現傳輸。4.png

傳統政府、銀行項目還是保留的在使用Web Service
互聯網公司肯定採用http+json形式實現運輸

ESB企業服務總線
解決多系統之間跨語言通訊,數據協議的轉換,提供可靠消息傳輸。

基於IDEA快速構建Web Service
Web Service服務器端

public class UserService {

    @WebMethod
    public String getUser(Long id) {
        return "用戶:" + id
                ;
    }

    public static void main(String[] args) {
        Endpoint.publish("http://192.168.18.218:8089/service/UserService", new UserService());
        System.out.println("服務發佈成功");

    }

http://192.168.18.218:8089/service/UserService?wsdl 獲取wsdl
wsdl文件描述接口的調用地址 服務的接口 方法 參數等。
Web Service客戶端
5.png

public class WebServiceClient {
    public static void main(String[] args) throws ServiceException, RemoteException {
        UserServiceServiceLocator userServiceServiceLocator = new UserServiceServiceLocator();
        UserService userService = userServiceServiceLocator.getUserServicePort();
        String result = userService.getUser(10L);
        System.out.println("result:" + result);
    }
}

微服務架構

微服務架構產生的原因

微服務架構基於SOA架構演變過來的。在傳統的Web Service架構中有如下問題:

  1. 依賴中心化服務發現機制
  2. 使用Soap通訊協議,通常使用XML格式來序列化通訊數據,xml格式非常喜歡重,比較佔寬帶傳輸。
  3. 服務化管理和治理設施不完善

微服務架構模式
SOA架構模式存在哪些缺點:

  1. 採用SOAP協議實現通訊,xml傳輸非常重,效率比較低。
  2. 服務化管理和治理設施不夠完善
  3. 依賴與中心服務發現機制
  4. 不適合於前後分離架構模式

前端分離技術就是對我們控制層和業務層邏輯實現區分,前端控制可以採用vue調用我們後端接口(http+json)。

微服務架構基本概念

微服務架構模式是從SOA架構模式演變過來, 比SOA架構模式粒度更加精細,讓專業的人去做專業的事情(專注),目的是提高效率,每個服務與服務之間互不影響,微服務架構中每個服務必須獨立部署、互不影響,微服務架構模式體現輕巧、輕量級、適合於互聯網公司開發模式。

微服務架構倡導應用程序設計程多個獨立、可配置、可運行和可微服務的子服務。
服務與服務通訊協議採用Http協議,使用restful風格API形式來進行通訊,數據交換格式輕量級json格式通訊,整個傳輸過程中,採用二進制,所以http協議可以跨語言平臺,並且可以和其他不同的語言進行相互的通訊,所以很多開放平臺都採用http協議接口。
在這裏插入圖片描述
在這裏插入圖片描述
微服務架構與SOA架構的不同

  1. 通訊協議:微服務架構基於 SOA架構 演變過來,繼承 SOA架構的優點,在微服務架構中去除 SOA 架構中的 ESB 企業服務總線,採用 Http+JSON(restful)進行傳輸。
  2. 服務拆分粒度:微服務架構比 SOA 架構粒度會更加精細,讓專業的人去做專業的事情(專注),目的提高效率,每個服務與服務之間互不影響,微服務架構中,每個服務必須獨立部署,微服務架構更加輕巧,輕量級。
    SOA 架構中可能數據庫存儲會發生共享,微服務強調獨每個服務都是單獨數據庫,保證每個服務於服務之間互不影響。
  3. 迭代:微服務架構比 SOA 架構更加適合於互聯網公司敏捷開發、快速迭代版本,因爲粒度非常精細。

ESB企業服務總線:解決多系統之間跨語言無法實現通訊的問題,對我們數據協議實現轉換,可以提供可靠的消息傳輸,第三方框架實現。
一般情況下都是採用Http+JSON格式傳輸,所以沒有必要使用ESB企業服務總線。

微服務架構會產生哪些問題

分佈式事務解決方案(rabbitmq、rocketmq事務消息、lcn(已經淘汰) 、setata)最終一致性概念。
分佈式任務調度平臺(XXL-Job、Alibaba Cloud Scheduler、elastic-job) .
分佈式服務註冊與發現(eureka、consul、zookeeper、Nacos)
分佈式日誌採集系統elk+kafka
分佈式服務追蹤與調用鏈系統Zipkin。
分佈式服務配置中心(springcloud config/攜程阿波羅/nacos/disconfig)

在微服務架構中非常重要的概念:獨立部署、可配置、動態化

爲什麼我們要使用SpringCloud

SpringCloud並不是rpc遠程調用框架,而是一套全家桶的微服務解決框架,理念就是解決我們在微服務架構中遇到的任何問題。
服務治理:eureka
分佈式配置:config
客戶端調用工具rest/feign客戶端 rpc遠程調用

注意:大家如果去一些比較大型的互聯網公司中,整個公司內部實現rpc通訊的框架、服務治理都是內部自己研發。

Rpc遠程調用框架有哪些?
Httpclient、dubbo、feign、grpc、基於netty手寫rpc

SpringCloud第一代與第二代的區別
在這裏插入圖片描述
SpringCloud第一代:

SpringCloud Config 分佈式配置中心
SpringCloud Netflix 核心組件

  • Eureka:服務治理
  • Hystrix:服務保護框架
  • Ribbon:客戶端負載均衡器
  • Feign:基於ribbon和hystrix的聲明式服務調用組件
  • Zuul: 網關組件,提供智能路由、訪問過濾等功能。

SpringCloud第二代(自己研發)和優秀的組件組合:
Spring Cloud Gateway 網關
Spring Cloud Loadbalancer 客戶端負載均衡器
Spring Cloud r4j(Resilience4J) 服務保護

Spring Cloud Alibaba Nacos 服務註冊
Spring Cloud Alibaba Nacos 分佈式配置中心
Spring Cloud Alibaba Sentinel服務保護
SpringCloud Alibaba Seata分佈式事務解決框架
Alibaba Cloud OSS 阿里雲存儲
Alibaba Cloud SchedulerX 分佈式任務調度平臺
Alibaba Cloud SMS 分佈式短信系統

爲什麼Alibaba要推出SpringCloud組件

目的就是爲了對阿里雲的產品實現擴展。

SpringCloud與Spring Cloud Alibaba的區別

Spring Cloud Alibaba實際上對SpringCloud實現了拓展組件能夠完美整合到SpringCloud rpc遠程調用整合。

  1. nacos分佈式註冊中心,分佈式配置中心SpringCloudEureka+Config組合
  2. 目的是爲了推廣阿里雲產品,如果使用了Spring Cloud Alibaba建議最好使用Alibaba Mq rocketmq
    如果進行分佈式任務調度,採用Alibaba Cloud SchedulerX

總結:Spring Cloud Alibaba實際上對我們的SpringCloud做拓展組件開發naoocs、setata分佈式事物解決框架、SchedulerX、Alibaba Cloud OSS等,目的是致力於提供微服務開發的一站式解決方案。

其他Spring Cloud alibaba視頻參考點擊查看

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