本文來自于《精通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适合于個人小團隊開發。
分布式架構
分布式架構模式是基于傳統的架構模式演變過來,将傳統的單點項目根據業務子產品實作拆分、會拆分為會員系統、訂單系統、支付系統、秒殺系統等。 進而降低我們項目的耦合度,這種架構模式開始慢慢的适合于網際網路公司開發團隊。
如果項目團隊人數較多需要進行項目拆分。需要把單體項目不同的系統。大型公司和大型開發團隊多用這種團隊開發的模式。

不同的系統如何連成一塊呢?需要通過域名跳轉。
會員系統:memner.mayikt.com
支付系統pay.mayikt.com
命名系統化:包含服務和視圖層
SOA面向服務架構
不同系統間的會話是如何進行綁定的呢?需要用到SSO單點登入系統。
SOA架構模式也稱作為:面向服務架構模式、俗稱面向與接口開發,将共同存在的業務邏輯抽取成一個共同的服務,提供給其他的服務接口實作調用、服務與服務之間通訊采用rpc遠端調用技術。
通過SSO系統能解決代碼備援的問題。
服務:隻是有接口 沒有控制層 沒有視圖層
com.mayikt.service
com.mayikt.dao
這種模式叫作SOA面向業務邏輯的開發。
SOA架構模式特點:
1、SOA架構通訊中,采用XML方式實作通訊、在高并發下通訊過程中協定存在非常大備援性,是以在最後微服務架構模式中使用JSON格式替代了XML。
2、SOA架構模式實作方案為Web Service或者是ESB企業服務總線 底層通訊協定SOAP協定(Http+XML)實作傳輸。
傳統政府、銀行項目還是保留的在使用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用戶端
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);
}
}