zoukankan      html  css  js  c++  java
  • SpringCloud Alibaba实战(3:存储设计与基础架构设计)

    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 新一代微服务解决方案

  • 相关阅读:
    Maven pom.xml中添加指定的中央仓库
    命令行远程链接MySQL
    A required class was missing while executing org.apache.maven.plugins:maven-war-plugin:2.1.1:war
    mvn deploy命令上传包
    保存好你的密码
    PuTTY免输密码自动登录Linux
    ActiveMQ无法启动
    linux控制台批量杀进程
    dubbo入门之微服务客户端服务端配置
    dubbo入门之helloWorld
  • 原文地址:https://www.cnblogs.com/three-fighter/p/14862483.html
Copyright © 2011-2022 走看看