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

目录

一、电商项目介绍

二、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

项目架构图

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第1张图片

电商的架构 

首页

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

检索

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

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

商品详情

商品的详细信息展示

单点登录

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

购物车

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

结算 

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

下单

填好的订单提交

订单

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

支付

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

秒杀

秒杀抢购完整方案

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

仓储物流

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

后台管理

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

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

二、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
Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第2张图片

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第3张图片

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容器

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第4张图片

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第5张图片

8.安装sentinel

已安装或能访问忽略

第一步:拉取镜像

docker pull bladex/sentinel-dashboard

第二步:启动

docker run --name sentinel-dashboard --restart=always -p 8858:8858 -d bladex/sentinel-dashboard:latest
Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第6张图片

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第7张图片

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
Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第8张图片

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"
Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第9张图片

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 服务器 (阿里云服务器已经配置好,登录就行,不用安装)

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第10张图片

# 拉取镜像

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 登录账号 [email protected],密码 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 进行配置即可

D:\repository-spring

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第11张图片

maven 相关问题:

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第12张图片

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不分词)Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第13张图片

四、关于表设计

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"));

首页分类表 

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第14张图片

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第15张图片
第二种:级联查询,用三张表,主外键关系;
baseCategory1; 一级分类表
        id,name;
baseCategory2;    二级分类表
        id,name,category1Id;
baseCategory3;    三级分类表
        id,name,category2Id;

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第16张图片

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


Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第17张图片

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

Day133.尚品汇:项目介绍、Linux软件环境部署、项目环境搭建、表设计_第18张图片

商品基本知识

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

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

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

你可能感兴趣的:(尚品汇,java,分布式)