二、分布式基础概念
1.微服务架构
-
一个单体应用开发为一套小服务,每个小服务在自己的进程中,并使用轻量级机制通信
-
拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行
2.集群、分布式、节点
-
集群是个物理状态,一群机器就可以叫做集群,将几台服务器集中在一起实现同一业务
-
分布式是个工作方式,将不同的业务分布在不同的地方,分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
-
京东是一个分布式系统,众多业务运行在不同的机器,所有业务构成一个大型的业务集群
-
节点是集群中的每一个服务器,分布式的每一个节点都可以叫做集群。而集群不一定是分布式的
3.远程调用
-
在分布式系统中,可能处在不同主机的各个服务需要相互调用称为远程调用
-
spring cloud使用HTTP+JSON的方式完成远程调用
4.负载均衡
A服务需要调用B服务,B服务在多台机器中都存在,A调用任意一个服务器均可完成功能
常见的负载均衡算法:
-
轮巡:依次调用
-
最小连接:优先调用连接数最小的服务器
-
散列:同一个ip地址的请求都会被分配到一个固定的服务器
5.服务注册/发现&注册中心
注册中心:实时监控哪些服务可用,哪些服务不可用
6.配置中心
每个服务最终都会有大量的配置,并且每个服务都可能部署在多个服务器上,我们需要经常变更配置,可以让服务在配置中心获取配置。
配置中心用来集中管理微服务的配置信息
7.服务熔断&服务降级
在微服务架构中,服务之间存在着依赖关系,当一个服务不可用时,很容易发生雪崩效应,所以需要容错机制来保护服务
-
服务熔断:设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开启断路保护机制,后来的请求不再去调用这个服务。本地直接返回默认的数据
-
服务降级:在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行:某些服务不处理或者简单处理【抛异常、返回NULL、调用MOCK数据、调用Fallback处理逻辑】
8.API网关
在微服务架构中,API Gateway作为整体架构的重要组件,它抽象了微服务中都需要的公共功能,同时提供了客户端负载均衡、服务自动熔断、灰度发布、统一认证、限流流控、日志统计等丰富的功能,帮助我们解决了很多API管理难题。
三、环境搭建
1.安装linux虚拟机
这里使用的是云服务器
2.安装docker
docker安装推荐:Docker学习篇1_Docker概述、Docker安装、Run的流程和Docker原理、Docker常用命令、Docker安装Nginx、tomcat练习_scl、的博客-CSDN博客
docker 容器与容器之间是相互隔离的,每一个容器都是一个完整的运行环境
3.docker安装mysql
//安装mysql
docker pull mysql:5.7
//查看拉取的docker镜像
docker ps
//docker 启动mysql 容器文件挂载与端口映射
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
//查看运行的docker容器
docker images
//进入mysql容器内部
docker exec -it mysql /bin/bash
//获取目录结构 发现mysql就是一个完整的linux目录结构
ls /
修改mysql配置:
将mysql默认的拉丁字符编码改成utf8
//进入linux中挂载的mysql配置文件
cd mydata/mysql/conf
//创建mysql配置
vi my.cnf
//随意敲一个英文字母开始编辑 复制粘贴以下内容 esc ":wq" 退出
[client]
default-character-set=utf-8
[mysql]
default-character-set=utf-8
[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
//修改配置之后一定要记得重启
docker restart mysql
在mysql容器中查看修改配置文件:
docker exec -it mysql /bin/bash
cd /etc/mysql
ls
cat my.cnf
4.安装redis
//拉取redis镜像
docker pull redis
//创建挂载的目录
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/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
因为我们这里挂载第三行的redis.conf是一个conf文件,但是直接挂载会被系统认为是一个文件夹而之间创建,所以需要我们先创建这个conf文件。
测试redis:
docker exec -it redis redis-cli
现在的redis数据都是存储在内存中的,如果重启redis再次"get a"就会查不到数据,接下来实现redis 的持久化。
redis的持久化:
//修改刚创建的redis.conf
vi redis.conf
//修改内容
appendonly yes
//重启redis
docker restart redis
//测试
[root@iZ2ze30iuo2wom5i3mm5qlZ conf]# docker exec -it redis redis-cli
127.0.0.1:6379> set kaigu keai
OK
127.0.0.1:6379> exit
[root@iZ2ze30iuo2wom5i3mm5qlZ conf]# docker restart redis
redis
[root@iZ2ze30iuo2wom5i3mm5qlZ conf]# docker exec -it redis redis-cli
127.0.0.1:6379> get kaigu
"keai"
将redis、mysql设置为docker启动是自启:
[root@iZ2ze30iuo2wom5i3mm5qlZ conf]# docker update mysql --restart=always
mysql
[root@iZ2ze30iuo2wom5i3mm5qlZ conf]# docker update redis --restart=always
redis
5.开发环境配置
(1).maven配置阿里云镜像
(2).配置默认jdk版本
(3).idea整合maven
(4).vscode安装插件
(5).安装配置git
Git - Downloading Package (git-scm.com) 官网下载安装
百度网盘在设置-传输 里面把下载提速打开还是要比官网快的😓
链接:https://pan.baidu.com/s/1ik7x2KnyU1MQAJXcyayRCQ 提取码:a3rw
安装之后 随意右键菜单点击git bash here
配置一个用户名(随便起)和注册github时用的邮箱
10418@DESKTOP-9G94D81 MINGW64 ~/Desktop
$ git config --global user.name "merist"
10418@DESKTOP-9G94D81 MINGW64 ~/Desktop
$ git config --global user.email "1041837264@qq.com"
配置ssh免密登录(输入命令回车后 三次回车 中间加一次输入“y"):
获取完整的密钥并且复制
进入gitee官网 --->设置
测试连接成功
6.创建项目微服务
(1).从gitee初始化一个项目
复制项目地址
idea新建一个项目
项目地址复制进去 点击clone
clone成功
记得先修改maven,不要向博主一样傻了半天才反应过来
(2).创建商城微服务模块
先导入两个依赖
按照相同配置建好另外四个
右下角会有一个提示,选择”use service",就可以在service看到所有的模块了
正在上传…重新上传取消
修改pom,在maven中添加gulimall的pom ,gulimall执行clean,其子模块也clean
正在上传…重新上传取消
先complie一下生成target文件夹 再设置忽略文件
IDEA Version Control 窗口 local changes显示Michael.的博客-CSDN博客_idea显示localchange 调出local changes
(3).gitee上传项目
想要在gitee上传项目,想要安装gitee插件
gitee上传代码
登录一下
推送成功
7.数据库初始化
Sybase PowerDesigner是一个很方便的建模工具,你只需要拉个图形然后自动生成sql语句。
PowerDesigner 安装+汉化+破解+使用过程 - 沦陷 - 博客园 (cnblogs.com) 下载、安装地址
打开gmall_数据库设计.pdm
(1).生成sql语句
先生成sql语句
(2).创建数据库并执行sql文件
因为每一个微服务都是独立存在的,相应的数据库也应该是独立的。
所以先创建各个数据库。字符集选择utf8mb4(可以兼容utf8)
执行sql即可