開發與維運

微服務架構演變過程(上) | 帶你讀《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適合於個人小團隊開發。

分佈式架構

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

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

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

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

SOA面向服務架構

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

通過SSO系統能解決代碼冗餘的問題。
服務:只是有接口 沒有控制層 沒有視圖層
com.mayikt.service
com.mayikt.dao
3.png
這種模式叫作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 "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客戶端

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);
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *