谷粒商城--微服务分布式电商项目学习笔记

项目简介

项目背景

1)电商模式

2)谷粒商城

是一个B2C模式的电商平台,销售自营商品给客户。

架构图

1)项目微服务架构图

image-20200725075045044

客户端->nginx集群->网关集群

2)微服务划分图

image-20200725090220739

项目特色

  • 前后端分离开发,并开发基于vue的后台管理系统
  • SpringCloud全新的解决方案
  • 应用监控、限流、网关、熔断降级等分布式方案,全方位涉及
  • 透彻讲解分布式事务、分布式锁等分布式系统的难点
  • 分析高并发场景点编码方式,线程池,异步编排等使用
  • 压力测试与性能优化
  • 各种集群技术等区别以及使用
  • CI/CD使用

项目前置要求

  • 熟悉SpringBoot以及常见整合方案
  • 了解SpringCloud
  • 熟悉git、maven
  • 熟悉linux,redis,docker基本操作
  • 了解html,css,js,vue
  • 熟练使用idea开发项目

分布式基础概念

微服务

微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级通信机制,通常是HTTP API,这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些服务使用不同的语言编写,以及不同的数据存储技术,并保持最低限度的集中式管理。

拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署允许

集群、分布式、节点

集群是个物理状态,分布式是个工作方式。

只要是一堆机器,就可以叫做集群,他们是不是一起协作干活,这个谁也不知道

《分布式系统原理与范型》定义:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个系统,分布式系统是建立在网络之上的软件系统。

分布式是指将不同的业务分布在不同的地方。

集群是指将几台服务器集中在一起,实现同一业务。

例如:京东是一个分布式系统,众多业务运行在不同的机器,所有业务构成一个大型的业务集群。

每个业务系统可以单独进行扩缩容,做集群。

分布式中每个节点,都可以做集群,而集群并不一定就是分布式。

节点:集群中的一个服务器。

远程调用

分布式系统各个服务可能处于不同的主机,但是服务之间不可避免的需要互相调用,就是远程调用。

Spring Cloud默认使用HTTP+JSON的方式完成远程调用

负载均衡

分布式系统中,A服务需要调用B服务,B服务在多台机器都存在,A调用任意一个服务器均可完成功能。

为了使每个服务器都不要太忙或太闲,我们可以负载均衡调用每一个服务器,提升网站的健壮性。

常见负载均衡算法:

轮询

最小连接

散列

服务注册/发现&注册中心

对服务上下线感知,服务发现,从而避免调用不可用的服务

配置中心

配置集中管理,变更动态配置,实时生效

集中管理微服务的配置信息

服务熔断降级

微服务架构中,微服务之间通过网络通信,存在相互依赖,当其中一个服务不可用时,有可能会造成雪崩效应,要防止这样的情况,必须要有容错机制来保护服务。

1)服务熔断

设置服务的超时,当被调用的服务经常失败达到某个阈值,我们可以开启断路器保护机制,后来的请求不再去调用这个服务。本地直接返回默认的数据。

2)服务降级

在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。

降级:某些服务不处理,或者简单处理(抛异常、返回NULL、调用Mock数据、调用Fallback处理逻辑)

API网关

提供客户端负载均衡,服务自动熔断,灰度发布,统一认证,限流流控,日志统计等功能。解决API管理难题。

环境搭建

下载安装Centos7

阿里云镜像下载地址https://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/

安装过程省略

配置仓库:

1)备份

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2)下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

3)运行 yum makecache 生成缓存

参考阿里云Centos镜像配置

https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b11lumMFr

安装Docker

官网参考地址:https://docs.docker.com/engine/install/centos/

1)写在旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2)设置仓库

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3)安装DOCKER ENGINE

sudo yum install docker-ce docker-ce-cli containerd.io

4)运行Docker

sudo systemctl start docker

5)开机启动Docker

sudo systemctl enable docker

配置Docker阿里云镜像加速

https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11qdbJJS

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://q10nwbtl.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker安装MySQL

image-20200725221819330

1)下载镜像文件

sudo docker pull mysql:5.7

查看下载的镜像文件docker images

image-20200725222021079

2)创建实例并启动

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

参数说明:

  1. -p 3306:3306 端口映射

  2. --name mysql 容器别名

  3. 目录挂载

-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
  1. -e MYSQL_ROOT_PASSWORD=root 初始化参数

  2. -d mysql:5.7以后台方式启动,以mysql:5.7镜像启动

  • 查看运行的容器

docker ps

image-20200725225402152

  • 进入容器内部

docker exec -it 容器id/容器名 /bin/bash

docker exec -it mysql /bin/bash

  • 从宿主机连mysql容器

运行mysql容器后,可以在宿主机上连mysql

首先查看CentOS的IP

image-20200725225925017

使用mysql客户端工具连接mysql server

image-20200725225959266

配置字符集

/mydata/mysql/conf目录新建文件my.cnf,内容如下:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

重启mysql容器

docker restart mysql

参数mysql是容器的别名

查看所有容器

docker container ls -a

Docker安装Redis

1)下载镜像文件

docker pull redis

2)创建实例并启动

mkdir -p /mydata/redis/conf

cd /mydata/redis/conf

touch redis.conf

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

猜你喜欢

转载自www.cnblogs.com/wozixiaoyao/p/13378841.html