天天看點

微服務架構演變過程(上) | 帶你讀《Spring Cloud Alibaba(2019)》之一

下一篇:微服務架構演變過程(下) | 帶你讀《Spring Cloud Alibaba(2019)》之二

本文來自于《精通Spring Cloud Alibaba》課程的整理,講師為餘勝軍,

點選檢視視訊内容

本文系志願者整理,供配合學習中心課程使用,不做商業用途。

Spring Cloud Alibaba課程說明

該課程主要講解Spring Cloud Alibaba核心元件 Nacos(服務注冊與發現和分布式配置中心)、Sentinel(服務保護架構)、Seata(分布式事務解決架構)、阿裡雲OSS、Alibaba Cloud SchedulerX等。

注意事項:該課程需要有一定的SpringBoot基礎知識,如果對SpringBoot不了解的話、可以在螞蟻課堂中學習SpringBoot基礎内容。

微服務架構演變過程

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

傳統架構

傳統的架構,也就是為單點應用,也就是大家在早期所學習的JavaEE知識SSH或者SSM架構模式,會采用分層架構模式:資料庫通路層、業務邏輯層、控制層,從前端到背景所有的代碼都是一個開發者去完成。

該架構模式沒有對我們業務邏輯代碼實作拆分,所有的代碼都寫入到同一個工程中裡面,适合于小公司開發團隊或者個人開發。

com.mayikt.controler---springmvc 視圖層 jsp/ftl

com.mayikt.service---業務邏輯層

com.mayikt.dao---資料庫通路層

将項目的代碼都放入到同一個項目,部署在同一個Tomat中。

該架構模式存在哪些優、缺點:

優點:開發簡單、運維簡單

缺點:該架構模式沒有對我們的業務邏輯實作拆分,所有的代碼都寫入到同一個項目中,

隻适合小團隊或者個人形式開發,不适合團隊模式協同工作開發

這種架構模式最大的缺點,如果該系統一個子產品出現不可用、會導緻整個系統無法使用。

應用場景:政府項目、管理系統、crm、oa适合于個人小團隊開發。

分布式架構

分布式架構模式是基于傳統的架構模式演變過來,将傳統的單點項目根據業務子產品實作拆分、會拆分為會員系統、訂單系統、支付系統、秒殺系統等。 進而降低我們項目的耦合度,這種架構模式開始慢慢的适合于網際網路公司開發團隊。

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

微服務架構演變過程(上) | 帶你讀《Spring Cloud Alibaba(2019)》之一

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

會員系統:memner.mayikt.com

支付系統pay.mayikt.com

命名系統化:包含服務和視圖層

SOA面向服務架構

不同系統間的會話是如何進行綁定的呢?需要用到SSO單點登入系統。

微服務架構演變過程(上) | 帶你讀《Spring Cloud Alibaba(2019)》之一

SOA架構模式也稱作為:面向服務架構模式、俗稱面向與接口開發,将共同存在的業務邏輯抽取成一個共同的服務,提供給其他的服務接口實作調用、服務與服務之間通訊采用rpc遠端調用技術。

通過SSO系統能解決代碼備援的問題。

服務:隻是有接口 沒有控制層 沒有視圖層

com.mayikt.service

com.mayikt.dao

微服務架構演變過程(上) | 帶你讀《Spring Cloud Alibaba(2019)》之一

這種模式叫作SOA面向業務邏輯的開發。

SOA架構模式特點:

1、SOA架構通訊中,采用XML方式實作通訊、在高并發下通訊過程中協定存在非常大備援性,是以在最後微服務架構模式中使用JSON格式替代了XML。

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

微服務架構演變過程(上) | 帶你讀《Spring Cloud Alibaba(2019)》之一

傳統政府、銀行項目還是保留的在使用Web Service

網際網路公司肯定采用http+json形式實作運輸

ESB企業服務總線

解決多系統之間跨語言通訊,資料協定的轉換,提供可靠消息傳輸。

基于IDEA快速建構Web Service

Web Service伺服器端
public class UserService {

    @WebMethod
    public String getUser(Long id) {
        return "mayikt使用者:" + 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用戶端
微服務架構演變過程(上) | 帶你讀《Spring Cloud Alibaba(2019)》之一
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);
    }
}