SpringCloud(学习 微服务简介) 一



前言

本文记录学习SpringCloud微服务学习的过程,通过B站视频《谷粒商城》项目进行学习。

技术架构为:

  • 后端:
    Springboot + SpringCloud + Docker
  • 前端:
    Vue + Element-ui

一、什么是微服务?

1.微服务简介

将大型单体应用,基于业务进行服务拆分,每个服务独立部署运行,互不影响。

2.集群、分布式、节点

集群:

多台服务器,实现相同的业务
分布式:
将不同业务部署在不同的服务器上

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

3.远程调用

在分布式系统中,由于不同服务部署在不同的地方,在服务之间需要进行通讯。

SpringCloud中使用HTTP+JSON的方式进行远程调用,可以通过不同语言不同平台进行传输,兼容性高。

4.负载均衡

在服务集群中,为了使集群中每个服务器充分利用,采用负载均衡的方式调用独立服务器。

常用负载均衡算法:

轮询:从服务器健康池中选择第一个服务器分配给第一个请求,然后按顺序依次向后选择,到最后以后从新开始循环。

最小连接:优先选择连接数最少的服务器,在会话时间较长优先选择该方式。

散列:相同IP地址连接相同的服务器,保证特定用户能连接到相同的服务器。如果应用需要处理状态而要求用户连接到相同的服务器,可以采用该方式。

5.服务注册/发现、注册中心

由于有很多的服务,避免调用到不可用(不在线)的服务,为了感知每个服务的状态,在服务上线时,会在注册中心注册这个服务。在调用某个业务服务时会在注册中心查询相关服务进行调用。

6.配置中心

每个业务都有大量的配置,而这个业务又会放在多个服务器形成集群,修改配置后需要在大量服务器上修改配置,这样及其不方便。因此才会有配置中心用来给服务进行管理服务配置。

7.服务熔断、服务降级

  • 服务熔断

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

  • 服务降级

在运维期间,当系统处于高压状态,资源紧张,让非核心业务进行降级运行,被降级的业务将不处理或者简单处理(抛异常、返回NULL、调用Mock数据、调用Fallback处理逻辑)

8.API网关

对所有请求进行拦截并处理,保证服务的正常运行,其中处理包括:负载均衡、服务自动熔断、灰度发布、统一认证、限流流控、日志统计等公共功能,解决API管理困难。

二、项目架构

  • 微服务架构图
    项目架构图

  • 微服务划分图

微服务划分图

三、环境配置

配置开发环境,在虚拟机中进行,虚拟机采用centos9这个版本,在虚拟机中安装docker,在docker中安装mysql等软件。

  • 安装虚拟机

我在VM中安装虚拟机,具体安装可网上查询,版本选择centos9这个版本

  • 安装Docker-CE(社区版)
  • Docker官网给了各种虚拟机的安装流程,我安装的是CentOS版本的
    CentOS安装流程
  • 启动Docker
    sudo systemctl start docker(这里sudo是以管理员身份启动,可以使用“su root”命令进入管理员模式)
  • 设置开机自启
    sudo systemctl enable docker
  • 配置镜像加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-‘EOF’ { “registry-mirrors”: [“https://82m9ar63.mirror.aliyuncs.com”]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  • 在Docker安装mysql
  • docker pull mysql:5.7
  • 创建实例并启动
    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
    参数说明
    -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
    -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
    -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
    -v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
    -e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
  • 配置自启动
    docker update mysql --restart=always
  • 连接mysql
    查看虚拟机ip使用命令 :ifconfig -a
    然后我这里使用navicat连接数据库进行可视化
  • 在Docker安装redis
  • docker pull redi
  • 创建实例并建立配置文件并启动实例
    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
  • 持久化储存(修改配置文件)
    docker exec -it redis redis-cli
    输入“i”进入插入模式
    appendonly yes(开启持久化)
    “ESC"输入”:wq"保存退出
    exit (退出redis)
  • redis可视化
    这里我是用IDEA的插件 “redis” 可以直接可视化redis
    在这里插入图片描述
  • 新建项目

JDK使用1.8,springboot使用2.7.8
后台管理使用码云开源项目“renren-fast"
前台使用”renren-fast-vue
后台项目中给了sql的文件
在这里插入图片描述

  • 微服务划分与创建

根据服务划分图创建对应服务,其中common为全局服务,储存公共bean和依赖等
在这里插入图片描述

  • 利用码云开源项目"renren-generator"逆向出每个服务中表的CRUD功能
  • 在配置文件中配置数据库信息
    在这里插入图片描述
    在这里插入图片描述
  • 运行打开web页面后可选择对应表进行生成
    在这里插入图片描述
  • 将生成的代码替换完成代码生成
  • 在配置文件配置数据源
    spring: datasource: username: root password: root url: jdbc:mysql://192.168.8.124:3306/guli-pms driver-class-name: com.mysql.jdbc.Driver
  • 配置mybatis-plus(关联xml文件和设置主键自增)
    mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: db-config: id-type: auto
  • 主类扫描实体类
    添加注解@MapperScan
    @MapperScan(“com/smz/guli/product/dao”)
  • 启动服务

猜你喜欢

转载自blog.csdn.net/smznbhh/article/details/131392135