天天看點

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

1、存儲設計

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

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

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

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

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

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

  • 使用者庫(shop_user):
SpringCloud Alibaba實戰(3:存儲設計與基礎架構設計)1、存儲設計2、基礎架構設計

建表語句:

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):
SpringCloud Alibaba實戰(3:存儲設計與基礎架構設計)1、存儲設計2、基礎架構設計
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):

SpringCloud Alibaba實戰(3:存儲設計與基礎架構設計)1、存儲設計2、基礎架構設計
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):

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 Alibaba實戰(3:存儲設計與基礎架構設計)1、存儲設計2、基礎架構設計

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

Dubbo是在國内應用非常廣泛的一款高性能 Java RPC 架構。

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

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

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

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

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

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

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

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