谷粒商城项目1——分布式基础概念、环境搭建

二、分布式基础概念

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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HotRabbit.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值