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

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/three-fighter/p/14862483.html
Copyright © 2011-2022 走看看