SpringCloud Alibaba實戰(3:儲存設計與基礎架構設計)

三分惡發表於2021-06-08

1、儲存設計

在上一章中,我們已經完成了基本業務流程的梳理和服務模組的劃分,接下來,開始設計資料儲存。

雖然在微服務的理論中,沒有對資料庫定強制性的規範,但一般,服務拆分之後,資料庫也會對應的拆分。

這種結合業務來進行拆分的方式是資料庫拆分中的垂直拆分。

資料庫設計偷個懶,就不再用比較重的Power Designer,直接拿Navicat開幹。

navicat建模

根據服務的拆分,分別建立資料庫如下:

  • 使用者庫(shop_user):

使用者庫

建表語句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for shop_user
-- ----------------------------
DROP TABLE IF EXISTS `shop_user`;
CREATE TABLE `shop_user`  (
  `user_id` int(16) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '使用者名稱',
  `sex` tinyint(4) NULL DEFAULT 2 COMMENT '使用者性別:0:女 1:男  2:未知',
  `phone` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手機號',
  `email` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '郵箱',
  `address` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  `count` int(64) NULL DEFAULT NULL COMMENT '積分',
  `level` int(32) NULL DEFAULT 0 COMMENT '等級',
  `create_user` int(16) NULL DEFAULT NULL COMMENT '建立使用者',
  `create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '建立時間',
  `update_user` int(16) NULL DEFAULT NULL COMMENT '更新使用者',
  `update_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
  `status` tinyint(4) NULL DEFAULT 1 COMMENT '狀態',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '使用者表' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

  • 商品庫(shop_goods):

商品庫

建表語句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for shop_goods
-- ----------------------------
DROP TABLE IF EXISTS `shop_goods`;
CREATE TABLE `shop_goods`  (
  `goods_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `goods_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名稱',
  `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '價格',
  `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品介紹',
  `create_user` int(16) NULL DEFAULT NULL COMMENT '建立使用者',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '建立時間',
  `update_user` int(16) NULL DEFAULT NULL COMMENT '更新使用者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
  `status` tinyint(4) NULL DEFAULT 0 COMMENT '狀態',
  PRIMARY KEY (`goods_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
  • 訂單庫(shop_order):

訂單庫

建表語句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for shop_order
-- ----------------------------
DROP TABLE IF EXISTS `shop_order`;
CREATE TABLE `shop_order`  (
  `order_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `order_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '訂單金額',
  `user_id` int(16) NULL DEFAULT NULL COMMENT '使用者id',
  `order_status` tinyint(4) NULL DEFAULT NULL COMMENT '訂單狀態: 1:待付款  2:已支付 3:已發貨 4:已完成 5:已關閉',
  `comment` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '評價',
  `create_user` int(16) NULL DEFAULT NULL COMMENT '建立使用者',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '建立時間',
  `update_user` int(16) NULL DEFAULT NULL COMMENT '更新使用者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
  `status` tinyint(4) NULL DEFAULT NULL COMMENT '狀態',
  PRIMARY KEY (`order_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for shop_order_detail
-- ----------------------------
DROP TABLE IF EXISTS `shop_order_detail`;
CREATE TABLE `shop_order_detail`  (
  `order_detail_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `order_id` int(16) NULL DEFAULT NULL COMMENT '訂單表主鍵',
  `goods_id` int(16) NULL DEFAULT NULL COMMENT '商品表主鍵',
  `goods_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名稱',
  `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '商品價格',
  `goods_count` int(32) NULL DEFAULT NULL COMMENT '商品數量',
  `create_user` int(16) NULL DEFAULT NULL COMMENT '建立使用者',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '建立時間',
  `update_user` int(16) NULL DEFAULT NULL COMMENT '更新使用者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
  `status` tinyint(4) NULL DEFAULT 0 COMMENT '狀態',
  PRIMARY KEY (`order_detail_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;


庫存庫(shop_stock):

庫存庫

建表語句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for shop_stock
-- ----------------------------
DROP TABLE IF EXISTS `shop_stock`;
CREATE TABLE `shop_stock`  (
  `stock_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `goods_id` int(16) NULL DEFAULT NULL COMMENT '商品表主鍵',
  `inventory` int(64) NULL DEFAULT NULL COMMENT '庫存量',
  `create_user` int(16) NULL DEFAULT NULL COMMENT '建立使用者',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '建立時間',
  `update_user` int(11) NULL DEFAULT NULL COMMENT '更新使用者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
  `status` tinyint(4) NULL DEFAULT 0,
  PRIMARY KEY (`stock_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

支付庫(shop_finance):

image-20210414225945884

建表語句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for shop_payment_record
-- ----------------------------
DROP TABLE IF EXISTS `shop_payment_record`;
CREATE TABLE `shop_payment_record`  (
  `payment_record_id` int(16) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `order_id` int(16) NULL DEFAULT NULL COMMENT '訂單表主鍵',
  `user_id` int(16) NULL DEFAULT NULL COMMENT '支付人',
  `fee` decimal(16, 2) NULL DEFAULT NULL COMMENT '支付金額',
  `pay_type` tinyint(4) NULL DEFAULT NULL COMMENT '支付方式 1:支付寶 2:微信支付',
  `create_user` int(16) NULL DEFAULT NULL COMMENT '建立使用者',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '建立時間',
  `update_user` int(11) NULL DEFAULT NULL COMMENT '更新使用者',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新時間',
  `status` tinyint(4) NULL DEFAULT 0 COMMENT '狀態',
  PRIMARY KEY (`payment_record_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2、基礎架構設計

我們首先看一下SpringCloud 官方的一些元件,有些元件不再維護升級,有些新的元件重新承擔起相應的責任。zuul之後推出了gateway元件,eureka之後推出了zookeeper相容。

SpringCloud主要元件

我們接著看一下SpringCloud Alibaba的主要元件。

Dubbo是在國內應用非常廣泛的一款高效能 Java RPC 框架。

nacos作為易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。

hystrix停止開發後,交由官方Resilience4j替代來完成使命,而sentinel以更簡單輕便的方式實現類比hystrix的功能,與dubbo生態更契合。

分散式事務一直是個非常令人頭疼的問題,seata是比較易用的高效能微服務分散式事務解決方案。

SpringCloud Alibaba架構

我們要做的例項的一個粗略的架構圖如下,接下來,我們會圍繞SpringCloud/SpringCloud Alibaba的體系來進行我們的專案實戰。

SpringCloud Alibaba實戰技術架構


"簡單的事情重複做,重複的事情認真做,認真的事情有創造性地做!"——

我是三分惡,可以叫我老三/三分/三哥/三子,一個能文能武的全棧開發,我們們下期見!



參考:

【1】:小專欄 SpringCloudAlibaba微服務實戰

【2】:電商系統之訂單設計篇

【3】:Spring Cloud Alibaba 新一代微服務解決方案

相關文章