SpringCloud Alibaba实战(3:存储设计与基础架构设计)
1、存储设计
在上一章中,我们已经完成了基本业务流程的梳理和服务模块的划分,接下来,开始设计数据存储。
虽然在微服务的理论中,没有对数据库定强制性的规范,但一般,服务拆分之后,数据库也会对应的拆分。
这种结合业务来进行拆分的方式是数据库拆分中的垂直拆分。
数据库设计偷个懒,就不再用比较重的Power Designer,直接拿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):

建表语句:
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的主要组件。
Dubbo是在国内应用非常广泛的一款高性能 Java RPC 框架。
nacos作为易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
hystrix停止开发后,交由官方Resilience4j替代来完成使命,而sentinel以更简单轻便的方式实现类比hystrix的功能,与dubbo生态更契合。
分布式事务一直是个非常令人头疼的问题,seata是比较易用的高性能微服务分布式事务解决方案。

我们要做的实例的一个粗略的架构图如下,接下来,我们会围绕SpringCloud/SpringCloud Alibaba的体系来进行我们的项目实战。

"简单的事情重复做,重复的事情认真做,认真的事情有创造性地做!"——
我是三分恶,可以叫我老三/三分/三哥/三子,一个能文能武的全栈开发,咱们下期见!
参考:
【1】:小专栏 SpringCloudAlibaba微服务实战
【2】:电商系统之订单设计篇
【3】:Spring Cloud Alibaba 新一代微服务解决方案
SpringCloud Alibaba实战(3:存储设计与基础架构设计)的更多相关文章
- .NET Core实战项目之CMS 第九章 设计篇-白话架构设计
前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...
- Atitit.数据库表的物理存储结构原理与架构设计与实践
Atitit.数据库表的物理存储结构原理与架构设计与实践 1. Oracle和DB2数据库的存储模型如图: 1 1.1. 2. 表数据在块中的存储以及RowId信息3 2. 数据表的物理存储结构 自然 ...
- SpringCloud Alibaba实战(7:nacos注册中心管理微服务)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经完成了Nacos Server的本地部署,这一节我们学习如何将Nac ...
- SpringCloud Alibaba实战(2:电商系统业务分析)
选用了很常见的电商业务来进行SpringCloud Alibaba的实战. 当然,因为仅仅是为了学习SpringCloud Alibaba,所以对业务进行了大幅度简化,这里只取一个精简版的用户下单业务 ...
- SpringCloud Alibaba实战(6:nacos-server服务搭建)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是三分恶. 这一节我们来学习SpringCloud Alibaba体系中一 ...
- 移动互联网实战--Web Restful API设计和基础架构
前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...
- SpringCloud Alibaba实战(4:基本开发框架搭建)
在上一节,我们已经完成了项目的整体技术架构设计和具体的数据库设计,接下来,我们搭建整体的开发框架. 开发工具选用Idea. 开发工具只是为了提高效率,如果不习惯Idea的话,STS使用起来也是OK的. ...
- SpringCloud Alibaba实战(8:使用OpenFeign服务调用)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一个章节,我们已经成功地将服务注册到了Nacos注册中心,实现了服务注册和服务发 ...
- SpringCloud Alibaba实战(11:引入服务网关Gateway)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 大家好,我是三分恶. 在前面的章节中,我们已经完成了服务间的调用.统一配置等等,在这 ...
随机推荐
- featureCarousel.js 3d轮播图插件
jQuery Feature Carousel 插件是国外的一比较优秀的旋转木马图片插件. 点击这里进入原文. 插件特点: 1.处理div的3d旋转木马效果. 2.支持一个中心,2个侧面的功能 3.中 ...
- 路由器逆向分析------QEMU的基本使用方法(MIPS)
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69258334 一.QEMU的运行模式 直接摘抄自己<揭秘家用路由器0day漏 ...
- NSIS制作安装包笔记(一):NSIS介绍、使用NSIS默认向导脚本制作Windows安装包
前言 做产品时,定制的自定义安装界面常有的,使用NSIS + Qt可以完美的定制基于QT的安装界面,先从纯NSIS开始,制作常规的安装包. 应用程序的发布方式 应用程序发布的时候,具备以下 ...
- Andrew Ng机器学习算法入门((七):特征选择和多项式回归
特征选择 还是回归到房价的问题.在最开始的问题中,我们假设房价与房屋面积有关,那么最开始对房价预测的时候,回归方程可能如下所示: 其中frontage表示的房子的长,depth表示的是房子的宽. 但长 ...
- openstack虚拟机从数据库修改卷虚拟机backend操作
由于意外故障,volume-type其中一个backend后段出现性能问题,客户云主机出现卡顿. 因此临时从ceph将系统卷导出,并导入至同一个backend的另一个后端,并启动虚拟机. Nova C ...
- 一、postman基础
- python工业互联网应用实战14——单元测试覆盖率
前面的章节我们完成了任务管理主要功能的开发及单元测试编写,可如何知道单元测试效果怎么样呢?测试充分吗?还有没有没有测到的地方呢? 本章节我们介绍一个统计测试代码覆盖率的利器Coverage,Cover ...
- Asp.NetCore Web开发之ADO.Net
Asp.NetCore可以说是.Net平台开发网站的一大利器,最近的一大段时间,就要跟大家分享,如何使用这一利器开发网站项目. 要学习网站开发,首先要学习如何使用ADO.Net进行数据库数据的增删改 ...
- Java容器 | 基于源码分析List集合体系
一.容器之List集合 List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM.集合.并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴 ...
- Go的Waitgroup和锁
学 Go 的时候知道 Go 语言支持并发,最简单的方法是通过 go 关键字开启 goroutine 即可.可在工作中,用的是 sync 包的 WaitGroup,然而这样还不够,当多个 gorouti ...