Spring Cloud Alibaba 實戰(三) - 微服務拆分與編寫

1 概述

1.1 單體架構vs微服務架構

  • 單體架構是什麼
  • 微服務是什麼
  • 微服務特性
  • 微服務全景架構圖
  • 微服務優缺點
  • 微服務適用場景

1.2 業務分析與建模

  • 項目功能演示與分析
  • 微服務拆分
  • 項目架構圖
  • 數據庫設計
  • API文檔

1.3 編寫微服務

  • 建立小程序
  • 建立項目
  • 編寫用戶微服務
  • 編寫內容微服務

2 單體應用

一個歸檔包(例如war包)包含全部功能的應用程序,咱們一般稱爲單體應用。而架構單體應用的方法論就是單體應用架構。html

  • 架構圖

2.1 單體架構的優勢

  • 架構簡單
  • 開發、測試、部署方便

2.2 單體架構的缺點

  • 複雜性高
  • 部署慢,頻率低
  • 擴展能力受限
  • 阻礙技術創新

3 微服務

一詞最先來自於Martin Fowler的一篇微服務文章前端

  • 翻譯
    微服務架構風格是一種將一個單一應用程序開發爲一組小型服務的方法,每一個服務運行在本身的進程中,服務間通訊採用輕量級通訊機制(一般用HTTP資源
    API)。這些服務圍繞業務能力構建而且可經過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不一樣的語言開發,使用不一樣的數據存儲技術

3.1 特性

  • 每一個微服務可獨立運行在本身的進程裏
  • 一系列獨立,運行的微服務共同構建起整個系統
  • 每一個服務爲獨立的業務開發,一個微服務只關注某個特定的功能,例如訂單管理、用戶管理等
  • 可以使用不一樣的語言與數據存儲技術(契合項目情
    況和團隊實力)
  • 微服務之間經過輕量的通訊機制進行通訊,例如經過REST API進行調用;
  • 全自動的部署機制

3.2 全景架構圖

3.3 優勢

  • 單個服務更易於開發、維護
  • 單個微服務啓動較快
  • 局部修改容易部署
  • 技術棧不受限
  • 按需伸縮

3.4 缺點

  • 運維要求高
  • 分佈式固有的複雜性
  • 重複勞動

3.5 適用場景

  • 大型、複雜的項目
  • 有快速迭代的需求
  • 訪問壓力大

3.6 不適用場景

  • 業務穩定
  • 迭代週期長

4 微服務拆分

4.1 拆法

◆ 領域驅動設計( Domain Driven Design )◆ 面向對象 ( by name./ by verb. )vue

4.2 最佳實踐

◆ 職責劃分◆ 通用性劃分node

4.3 粒度合理

◆ 良好地知足業務◆ 幸福感◆ 增量迭代◆ 持續演進git

  • 拆分
  • 項目架構圖

5 數據庫設計

5.1 數據表

6 建立小程序

7 前端代碼 - JavaEdge-miniapp

7.1 安裝Node.js

建議和筆者保持一致github

  • 前往 下載Node.js。
  • 建議使用 下載 。
  • 安裝說明
    • macOS操做系統,用pkg直接拖動安裝便可

7.2 修改app信息

修改 project.config.json ,按需修改以下兩行spring

"appid": "修改成你的appid"
"projectname": "修改成你的項目名稱,儘可能用英文",複製代碼

其中,appid在 微信公衆平臺 - 開發 - 開發設置中能夠找到。數據庫

7.3 安裝 & 啓動

安裝項目相關依賴 加速!

npm --registry https://registry.npm.taobao.org install複製代碼

開發環境啓動部署

npm run dev複製代碼

生產環境構建

npm run build複製代碼

7.4 下載 & 安裝微信開發者工具

  • 前往 下載開發者工具。
  • 安裝開發者工具
    雙擊安裝便可!

7.5 修改調用API地址

找到src/utils/api.js ,找到npm

// 後端接口基礎路徑
export const BASE_API_URL = '';複製代碼

將其修改成你的後端地址,例如:json

export const BASE_API_URL = 'http://localhost:8080';複製代碼

7.6 將代碼導入到開發者工具

注意:務必勾選 不校驗合法域名...

8 建立項目

8.1 技術選型

  • Spring Boot ( 快速迭代開發 )
  • Spring MVC ( MVC框架 )
    Mybatis ( 持久層框架,操做數據庫 ) +通用Mapper
  • Spring Cloud Aliababa ( 分佈式 )

8.3 項目結構設計

8.4 整合框架

8.4.1 MyBatis框架 - 通用Mapper

Spring Boot 集成

8.4.1.1 mapper-spring-boot-starter

在 starter 的邏輯中,若是你沒有使用 @MapperScan 註解,你就須要在你的接口上增長 @Mapper 註解,不然 MyBatis 沒法判斷掃描哪些接口。

須要在全部接口上增長 @Mapper 註解。

  • 只須要添加通用 Mapper 提供的 starter 就完成了最基本的集成
  • 無需配置文件
    4.0 以後,增長了一個 @RegisterMapper 註解,通用 Mapper 中提供的全部接口都有這個註解,有了該註解後,通用 Mapper 會自動解析全部的接口,若是父接口(遞歸向上找到的最頂層)存在標記該註解的接口,就會自動註冊上。所以 4.0 後使用通用 Mapper 提供的方法時,不須要再配置這個參數。

8.4.1.2 @MapperScan 註解配置

  • 注意MySQL的配置

    8.x帶cj

代碼生成器 - mappergenerator

通用的過於複雜,大多數狀況下使用專業版本便可!

使用該插件能夠很方便的生成實體類、Mapper接口以及對應的XML文件。

本篇文檔就是講述如何在 MBG 中使用該插件。

首先對MBG不太瞭解的能夠先閱讀下面的文檔

Mybatis Geneator 詳解

http://blog.csdn.net/isea533/article/details/42102297

使用 Maven 執行MBG

  • SB已內置插件

在插件中配置了配置文件的路徑,覆蓋和輸出詳細日誌三個參數。

除此以外須要特別注意的是 ,MBG 配置中用到的全部外部代碼都必須經過依賴方式配置在這裏,不然運行時會提示找不到對應的類而報錯。這裏有兩個必須的依賴,一個是 JDBC 驅動,另外一個是 Mapper 的插件。

  • 下面看配置文件generatorConfig.xml:

    這裏和以前相差很少,只是經過 引入了外部屬性文件,在 配置時,使用的屬性文件中的參數。

在 pom.xml 這一級目錄的命令行窗口執行 mvn mybatis-generator:generate便可(前提是配置了mvn)。

  • 使用MyBatis Generator生成器時,發現Mapper文件中出現字段與鏈接數據庫不符,通過查找發現該表是其餘數據庫的同名表的字段。
    在構造文件中,這裏是generatorConfig.xml添加鏈接數據庫參數以下:

整合Lombok簡化代碼

  • 生成器中整合

9 用戶 & 內容 微服務

業務流程分析

  • 架構圖

10 現有架構的問題

  • 地址發生變化怎麼辦?
  • 如何實現負載均衡?
  • 用戶中心掛掉怎麼辦? .

參考

相關文章
相關標籤/搜索