目录

一、电商项目介绍

二、Linux 软件环境部署

三、项目环境搭建

1、Maven 回顾

2、ElasticSearch

四、关于表设计

首页分类表


一、电商项目介绍

我们为什么要讲电商?

1. 高并发,如何解决并发问题!
2. 技术范围广:SpringBoot、SpringCloud、Nacos、Sentinel、zipkin (Sleuth链路追踪)
3. 数据量比较大,可以跟大数据整合 ---->  Java 程序员!
4. 支付:考虑安全性、幂等性 (唯一商户订单号,无论执行多少次结果都是一样的)
为什么不能用select * :避免全盘扫描,尽量充分利用覆盖索引,select * 幂等性
5. 电商的业务复杂性:订单-》支付》库存-》物流,分布式事务

订单成功,支付成功,库存失败!退款吗?取消订单吗?

分布式事物解决方案: XA(2PC)、TCC、seata、MQ本地消息表(√)。

不取消不退款,所以我们使用MQ,保证最终一致性

电商模式 -- 了解 Business、Customer

B2B:企业-企业 - 阿里巴巴、慧聪网

B2C:(我们的选择)

C2C:消费者个人间的电子商务行为 - 咸鱼、瓜子二手车

C2B:商对客 垂直电商 - 唯品会、乐蜂网

O2O:在线离线/线上到线下 - 美团、饿了么

B2B2C:B2B and B2C - 京东

电商的技术栈 -- 电商的技术选型

两套方案:

1、springBoot + springCloud : spring 家族;有版本对照 ,相对组件比较全;

2、springBoot + dubbo ==  dubbo(rpc 远程调用); 本质jar 包; 版本需要对应

3、未来:Mesh Service 网格式微服务?

基础架构:springBoot + springCloud + mysql/oracle + vue/Thymeleaf;

优化Redis(缓存 查询优化)、ES(检索效率)、MQ(异步解耦,响应速度)、mongoDB(文档存储)、mycat/sharding-jdbc 分库分表(单表超过500w或容量超过2G)

部署:linux、docker、jenkins(流水线)

提交:Git、GitHub、Gitee 分布式版本控制工具

分布式锁:Redis( 缓存雪崩)

其他:Swagger2//Yapi、MyBatis-Plus

需要掌握的解决方案

分布式架构:seata(强一致性)、MQ(最终一致性)

缓存管理:redis ---》 mysql

mysql 与 redis 如何保持数据一致性?延迟双删策略

分布式事务

单点登录:一处登陆处处使用

商品后台管理:增删改查

文件管理系统:存储商品图片 -- Minio -- 分布式文件存储系统,能够在丢失1/2 数据时,能够恢复;底层纠删码 {数学算法 -- 通过高度冗余保证} (冗余:Mysql主从复制、集群硬件冗余)

项目管理工具:禅道{创建项目,添加项目开发人员,测试人员 ... } 
            项目版本控制工具:git
            项目开发工具:idea
            项目构建工具:maven

项目架构图

我们的主线很简单:先去搭建基本的业务,高可用:用到哪些中间件,通过什么去治理,最后是如何部署的。

电商的架构 

首页

静态页面,包含了商品分类,搜索栏,商品广告位。

检索

全文搜索:通过搜索栏填入的关键字进行搜索,并列表展示

分类查询:根据首页的商品类目进行查询

商品详情

商品的详细信息展示

单点登录

用户统一登录的管理 一处登陆,处处使用

购物车

将有购买意向的商品临时存放的地方

结算

将购物车中勾选的商品初始化成要填写的订单

下单

填好的订单提交

订单

负责确认订单是否付款成功,并对接仓储物流系统。

支付

下单后,用户点击支付,负责对接第三方支付系统。

秒杀

秒杀抢购完整方案

----------- 以下功能不实现 -----------

仓储物流

独立的管理系统,负责商品的库存。

后台管理

主要维护类目、商品、库存单元、广告位等信息。

----------- 以下功能不实现 -----------
物流管理系统:
评价系统:
手机社区:
售后系统:
客服系统:
 直播带货:

二、Linux 软件环境部署

docker 的常用命令:
docker search 
docker pull
docker images
docker run 
docker exec -it CID /bin/bash 
docker stop/start/restart/ CID
docker rm CID
docker rmi IID
docker ps -a
docker logs CID
docker cp 

1.安装JAVA 运行环境

第一步:上传或下载安装包

cd  /usr/local

jdk-8u152-linux-x64.tar.gz

第二步:解压安装包

tar -zxvf jdk-8u152-linux-x64.tar.gz

第三步:建立软连接

ln -s /usr/local/jdk1.8.0_152/  /usr/local/jdk

第四步:修改环境变量

vim /etc/profile

export JAVA_HOME=/usr/local/jdk

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

通过命令source /etc/profile让profile文件立即生效

source /etc/profile

第五步、测试是否安装成功

使用java -version,出现版本为java version "1.8.0_152"

2.安装maven

第一步:上传或下载安装包

cd  /usr/local

apache-maven-3.6.1-bin.tar.gz

第二步:解压安装包

tar  -zxvf  apache-maven-3.6.1-bin.tar.gz

第三步:建立软连接

ln  -s  /usr/local/apache-maven-3.6.1/  /usr/local/maven

第四步:修改环境变量

vim /etc/profile

export MAVEN_HOME=/usr/local/maven

export PATH=$PATH:$MAVEN_HOME/bin

通过命令source /etc/profile让profile文件立即生效

source /etc/profile

第五步、测试是否安装成功

mvn –v

3.安装docker

环境安装:

yum -y install gcc-c++

第一步:安装必要的一些系统工具

yum install -y yum-utils device-mapper-persistent-data lvm2

第二步:添加软件源信息

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第三步:更新并安装Docker-CE

yum makecache fast

yum -y install docker-ce

第四步:开启Docker服务

service docker start

systemctl enable docker

第五步:测试是否安装成功

docker -v

第六步:配置镜像加速器

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://ldu6wrsf.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

4.安装mysql

第一步:拉取镜像

docker pull mysql:5.7

第二步:启动

docker run --name mysql --restart=always -v /home/ljaer/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

第三步:测试mysql

进入容器:

docker exec -it sun_mysql /bin/bash

登录mysql:

mysql -u root -p

root

如果顺利进入,安装成功;创建库,在资料中导入sql

5.安装rabbitmq

第一步:拉取镜像

docker pull rabbitmq:management

第二步:启动

docker run -d -p 5672:5672 -p 15672:15672 --restart=always --name rabbitmq rabbitmq:management

第三步:安装延迟队列插件

1. 首先下载rabbitmq_delayed_message_exchange-3.9.0.ez文件上传到RabbitMQ所在服务器,下载地址:https://www.rabbitmq.com/community-plugins.html

2. 切换到插件所在目录,执行 docker cp rabbitmq_delayed_message_exchange-3.9.0.ez rabbitmq:/plugins 命令,将刚插件拷贝到容器内plugins目录下

3. 执行 docker exec -it rabbitmq /bin/bash 命令进入到容器内部,并 cd plugins 进入plugins目录

4. 执行 ls -l|grep delay  命令查看插件是否copy成功

5. 在容器内plugins目录下,执行 rabbitmq-plugins enable rabbitmq_delayed_message_exchange  命令启用插件

6. exit命令退出RabbitMQ容器内部,然后执行 docker restart rabbitmq 命令重启RabbitMQ容器

6.安装redis

已安装或能访问忽略

第一步:拉取镜像

docker pull redis:latest

第二步:启动

docker run -d -p 6379:6379 --restart=always redis:latest redis-server

进入容器,插入条数据试试

7.安装nacos

已安装或能访问忽略

第一步:拉取镜像

docker pull nacos/nacos-server:1.4.1

第二步:启动

docker run --env MODE=standalone --name nacos --restart=always -d -p 8848:8848 -e JVM_XMS=512m -e JVM_XMX=512m nacos/nacos-server:1.4.1

8.安装sentinel

已安装或能访问忽略

第一步:拉取镜像

docker pull bladex/sentinel-dashboard

第二步:启动

docker run --name sentinel-dashboard --restart=always -p 8858:8858 -d bladex/sentinel-dashboard:latest

9.安装elasticsearch

第一步:拉取镜像

docker pull elasticsearch:7.8.0

第二步:启动

需要在宿主机建立:两个文件夹

mkdir -p /mydata/elasticsearch/plugins

mkdir -p /mydata/elasticsearch/data

授予权限chmod 777 /mydata/elasticsearch/data

docker run -p 9200:9200 -p 9300:9300 --name elasticsearch --restart=always \

-e "discovery.type=single-node" \

-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \

-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \

-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \

-d elasticsearch:7.8.0

第三步:安装中文分词器

  1. 下载elasticsearch-analysis-ik-7.8.0.zip

  2. 上传解压:unzip elasticsearch-analysis-ik-7.8.0.zip -d ik-analyzer

  3. 上传到es容器:docker cp ./ik-analyzer a24eb9941759:/usr/share/elasticsearch/plugins

  4. 重启es:docker restart a24eb9941759

10.安装kibana

第一步:拉取镜像

docker pull kibana:7.8.0

第二步:启动

docker run --name kibana --restart=always -e ELASTICSEARCH_URL=http://192.168.86.90:9200 -p 5601:5601 -d kibana:7.8.0

进入容器修改:docker exec -it 1e12f8dd3efd /bin/bash

cd config

vi kibana.yml

elasticsearch.hosts: [ "http://192.168.86.90:9200" ]

docker restart 1dc0f78d78ad 重启kibana !

测试:安装分词词库是否可以使用!

GET /.kibana/_analyze

GET /.kibana/_analyze
{"text": "小米手机","analyzer": "ik_max_word"
}

11.安装zipkin (Sleuth链路追踪) 负责数据展示

第一步:拉取镜像

docker pull openzipkin/zipkin

第二步:启动

docker run --name zipkin --restart=always -d -p 9411:9411 openzipkin/zipkin

12.安装minio 分布式文件存储系统

文件管理系统:Minio -- 分布式文件存储系统,能够在丢失1/2数据时,恢复;纠删码{数学算法 -- 高度冗余的基础之上恢复数据

第一步:拉取镜像

docker pull minio/minio

第二步:启动

docker run \

-p 9000:9000 \

-p 9001:9001 \

--name minio \

-d --restart=always \

-e "MINIO_ROOT_USER=admin" \

-e "MINIO_ROOT_PASSWORD=admin123456" \

-v /home/data:/data \

-v /home/config:/root/.minio \

minio/minio server /data --console-address ":9001"

13.安装logstash (暂时不装)

第一步:拉取镜像

docker pull logstash:7.8.0

第二步:启动

#--net root_default \

# 需要提前在linux服务器上环境 /mydata/logstash/logstash.conf

input {

tcp {

mode => "server"

host => "0.0.0.0"

port => 5044

codec => json_lines

}

}

filter{

}

output {

elasticsearch {

hosts => "192.168.86.90:9200"

index => "gmall-%{+YYYY.MM.dd}"

}

}

docker run --name logstash -p 5044:5044 \

--restart=always \

--link elasticsearch:es \

-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \

-d logstash:7.8.0

14.安装MongoDB 不用安装

#拉取镜像

docker pull mongo:latest

#创建容器

docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo:latest

#启动容器

docker start mongodb

#进入容器

docker exec -it mongodb /bin/bash

#使用MongoDB客户端进行操作

mongo

> show dbs #查询所有的数据库

admin 0.000GB

config 0.000GB

local 0.000GB

15.安装在线Yapi 服务器 (阿里云服务器已经配置好,登录就行,不用安装)

# 拉取镜像

docker pull mongo

# 启动mongo

docker run -d –name --restart=always mongo-yapi mongo

# 获取Yapi 镜像

docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi

# 初始化Yapi 数据库索引以及管理员账号

docker run -it --rm   --link mongo-yapi:mongo   --entrypoint npm   --workdir /api/vendors   registry.cn-hangzhou.aliyuncs.com/anoy/yapi   run install-server

# 启动Yapi 服务

docker run -d   --name yapi  --restart=always --link mongo-yapi:mongo   --workdir /api/vendors   -p 3000:3000   registry.cn-hangzhou.aliyuncs.com/anoy/yapi   server/app.js

# 使用Yapi

http://localhost:3000 登录账号 admin@admin.com,密码 ymfe.org

注意:

停止所有的容器

docker stop $(docker ps -aq)

删除所有的容器

docker rm $(docker ps -aq)

#删除所有的镜像

docker rmi $(docker images -q)

问题:

Docker容器做端口映射报错

docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp3 (46b7917c940f7358948e55ec2df69a4dec2c6c7071b002bd374e8dbf0d40022c): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 86 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

解决方法

docker服务启动时定义的自定义链DOCKER被清除

重启即可systemctl restart docker

配置hosts环境

作用: 能够直接修改C:\Windows\System32\drivers\etc\hosts 文件!

修改系统hosts文件

127.0.0.1 file.service.com www.gmall.com item.gmall.com 
127.0.0.1 activity.gmall.com passport.gmall.com cart.gmall.com list.gmall.com 
127.0.0.1 order.gmall.com payment.gmall.com api.gmall.com comment.gmall.com

三、项目环境搭建

1、Maven 回顾

分布式项目:

功能:依赖,继承,聚合 {packaging - pom,jar,war}

仓库:依赖jar ---> 本地仓库 ---> [私服{自己搭建的服务器}] ---> 远程中央仓库下载!

无需勾选Override,修改 settings.xml 进行配置即可

<localRepository>D:\repository-spring</localRepository>

maven 相关问题:

gmall-parent:    pom
        common:        公共的工具 pom
                common-util:    公共的工具类
                service-util:    服务层工具类
        model:        实体类   pojo,domain,entity; 自己构建的vo; dto;
        service:    所有的微服务

2、ElasticSearch

实体类加入注解,会自动创建索引库

@Document(indexName = "product",shards = 1, replicas = 1)  指定索引名、主分片、副分片,声明在映射对象上

@Id 声明主键ID

@Field(type = FieldType.Text, analyzer = "ik_max_word")  指定类型,分词词库,声明在成员变量上

type:字段类型,取值是枚举:FieldType
 index:是否索引,布尔类型,默认是true
 store:是否存储,布尔类型,默认是false
 analyzer:分词器名称:ik_max_word (Text才会分词 keyWord不分词)

四、关于表设计

1.三大范式:
        a.    将字段拆分到不可拆分为止!  name  firstName; lastName;
        b.    每张表都必须有个主键!        primary key;
        c.    保证表中的数据要与主键有关系!
2.分析表字段:
        a.    能够看到的数据;
        b.    数据是如何展示;检索条件!
        c.    根据业务需要添加一些冗余字段! 新增字段

3.数据类型:
        id:bigint -》Long
        name:varchar(50) -》String
        price:decimal -》BigDecimal        
        sex:int-》0 1

double,float会有精度损失!
Java: 做金钱比较的时候:

BigDecimal构建方法使用long double,还会有精度问题;需要用字符串或int类型

skuInfo.getPrice().compareTo(new BigDecimal("1999.99"));

首页分类表

第一种:只用一张表,通过parentId关联
分析表中的字段 and 数据类型


第二种:级联查询,用三张表,主外键关系;
baseCategory1; 一级分类表
        id,name;
baseCategory2;    二级分类表
        id,name,category1Id;
baseCategory3;    三级分类表
        id,name,category2Id;

平台属性表;表设计必须的字段:主键 id, createTime, updateTime, isDelete
用于商品检索必须要有的字段:categoryId:分类id,categorylevel:分类等级


baseAttrInfo(平台属性)

id, attrName,categoryId,categorylevel,createTime, updateTime, isDelete
1    运行内存      61          3
2    机身内存      61          3

baseAttrValue(平台属性值)
id, attrValueName, attrId createTime, updateTime, isDelete

1    18GB            1
2    16GB            1

商品基本知识

商品详情页面:销售属性,讲解spu时会说,作用:给用户提供自己喜欢的商品

SKU:每种商品均对应有唯一的SKU编号。(具体到唯一商品)

SPU:一组可复用,易检索的标准化信息集合。 (手机)

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计相关推荐

  1. vue尚品汇商城项目-day00【项目介绍:此项目是基于vue2的前台电商项目和后台管理系统】

    文章目录 本人其他相关文章链接 项目介绍:此项目是基于vue2的前台电商项目和后台管理系统 此项目为在线电商Web App (SPA) 包括首页, 搜索列表, 商品详情, 购物车, 订单, 支付, 用 ...

  2. vue实战项目-电商商城前台-(学习尚硅谷的)尚品汇

    文章目录 最好使用视频上的账号密码,13700000000 密:111111 最新服务端接口地址:http://gmall-h5-api.atguigu.cn 脚手架使用 1.创建项目 2.脚手架默认 ...

  3. 尚品汇后台管理项目(Vue)

    简介 1:什么是后台管理系统项目? 注意:前端领域当中,开发后台管理系统项目,并非是java.php等后台语言项目. 在前面课程当中,我们已经开发了一个项目[尚品汇电商平台项目],这个项目主要针对的是 ...

  4. 尚品汇项目笔记(持续更新中)

    项目网络教学视频链接:尚硅谷VUE项目实战,前端项目-尚品汇(大型\重磅)_哔哩哔哩_bilibili 目录 一. 使用vue-cli脚手架去初始化项目 二.项目的其他配置 三.项目路由分析 四.创建 ...

  5. vue尚品汇商城项目-day07【vue插件-49.(了解)自定义插件】

    文章目录 49.(了解)自定义插件 本人其他相关文章链接 49.(了解)自定义插件 自定义插件好处: 功能:用于增强Vue 本质:包含install方法的一个对象,install的第一个参数是Vue, ...

  6. 尚硅谷 VUE 尚品汇项目实战问题解决方式整理(Vue3 版)

    教学视频:https://www.bilibili.com/video/BV1Vf4y1T7bw 不回要资料的评论,资料在视频底下评论有些仓库里面有. 试图自行解决问题也是程序员必备技能之一,多做尝试 ...

  7. vue尚品汇商城项目-day04【29.加入购物车操作(难点)】

    文章目录 29.加入购物车操作(难点) 29.1加入购物车按钮 29.2addCartSuce 29.3购物车 29.3.1 向服务器发送ajax请求,获取购物车数据 29.3.2UUID临时游客身份 ...

  8. 尚硅谷尚品汇_后台管理项目

    vueProject_尚品汇后台管理 项目源码 文章目录 vueProject_尚品汇后台管理 login/out模块 product模块 login/out模块 .env.development . ...

  9. 电商项目尚品汇学习笔记

    本文参考其他文章自己整理补充的,要阅读原文请查看:尚品汇项目笔记_爱哭的毛毛虫的博客-CSDN博客_尚品汇项目 1.vue文件目录 public文件夹:静态资源,webpack进行打包的时候会原封不动 ...

最新文章

  1. Snowball 关系提取,2篇知乎博客
  2. android launcher3源码分析,Android Launcher3源码分析与修改
  3. dart系列之:dart语言中的特殊操作符
  4. 蓝桥杯国赛 皮亚诺曲线距离
  5. 广工计算机组成原理实验报告_计算机组成原理:存储器
  6. [转]数据科学家能力发展路线图
  7. oracle复杂密码,如何配置 Oracle 11g 复杂密码校验设置
  8. telnet不是内部命令
  9. c语言知道坐标求圆面积,用C语言编程推算圆的面积公式
  10. 如何解决出现问题,你的PIN不可用,单击以重新设置PIN
  11. Python办公自动化实践:连接MySQL数据库实现每日定时批量发送报表邮件
  12. memcmp函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )
  13. 王老吉、加多宝双茶争霸:新零售布局将成未来胜负关键?
  14. Incremental Graph Convolutional Network for Collaborative Filtering(阅读论文笔记)
  15. 猫抓 浏览器插件安装教程,适用Chrome浏览器和Edge浏览器
  16. nbiot和2g_NBIoT网络覆盖性能评价与优化
  17. MySQL下执行*.sql文件
  18. Spring模块简介
  19. VBO,VAO,,EBO-penGL进阶(二十) - 绘制一个长方形和一个三角形
  20. buuctf web [GXYCTF2019]Ping Ping Ping(呜呜呜做个题都要被骂)

热门文章

  1. 计算机考试随机出题,驾考宝典怎么随机出题 驾考宝典随机练习的教程
  2. GoEasy在微信小程序中的应用
  3. 组织上线 | 资源共享,协作自如
  4. 公司能不能监控到大家的微信聊天内容?
  5. QQ浏览器HD iOS 动态化/热修复方案QBDF解释器-语法制导翻译与递归子程序设计(编译原理)(5)简书被冻结-搬运】
  6. serverTimezone=UTC的那些坑
  7. 容性负载、阻性负载、感性负载、功率型负载的区别
  8. 大叔学编程,学的还是易语言
  9. 微软上海全球技术支持中心招聘Axapta技术支持工程师
  10. Java中Double保留自定义小数位的几种方法