分布式项目的学而思1:概念,准备环境,码云仓库,创建各个微服务项目,人人开源搭建后台管理,代码生成器,整合MyBatis-Plus

概念

集群,分布式,节点

集群是个物理形态,分布式是个工作方式。
只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;
分布式是指将不同的业务分布在不同的地方。
集群指的是将几台服务器集中在一起,实现同一业务
节点:集群中的一个服务器

远程调用

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

负载均衡

为了使每一个服务器都不要太忙或者太闲,我们可以负载均衡的调用每一个服务器,提
升网站的健壮性。
常见的负载均衡算法:
轮询,最小连接,散列

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

A 服务调用 B 服务,A 服务并不知道 B 服务当前在哪几台服务器有,哪些正常的,哪些服务
已经下线。解决这个问题可以引入注册中心;
如果某些服务下线,我们其他人可以实时的感知到其他服务的状态,从而避免调用不可用的
服务

配置中心

每一个服务最终都有大量的配置,并且每个服务都可能部署在多台机器上。我们经常需要变
更配置,我们可以让每个服务在配置中心获取自己的配置。

服务熔断&服务降级

在微服务架构中,微服务之间通过网络进行通信,存在相互依赖,当其中一个服务不可用时,
有可能会造成雪崩效应。要防止这样的情况,必须要有容错机制来保护服务。
1)、服务熔断
a. 设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开
启断路保护机制,后来的请求不再去调用这个服务。本地直接返回默认
的数据
2)、服务降级
a. 在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业
务降级运行。降级:某些服务不处理,或者简单处理【抛异常、返回 NULL、
调用 Mock 数据、调用 Fallback 处理逻辑】。

API 网关

在微服务架构中,API Gateway 作为整体架构的重要组件,
它抽象了微服务中都需要的公共
功能,同时提供了客户端负载均衡,服务自动熔断,
灰度发布,统一认证,限流流控,日志统计等丰富的功能,
帮助我们解决很多 API 管理难题。

准备环境

准备Linux虚拟机

安装 docker

卸载之前的docker
sudo yum remove docker \
	docker-client \
	docker-client-latest \
	docker-common \
	docker-latest \
	docker-latest-logrotate \
	docker-logrotate \
	docker-engine

按照这里进行安装

安装后使用阿里云进行镜像加速
可以通过修改 daemon 配置文件/etc/docker/daemon.json 来使用加速器

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

docker 安装 mysql

下载
docker pull mysql:5.7.33
启动
docker run -p 3306:3306 --name mysql01 \
	-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.33
配置
vi /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 连接慢的问题
在配置文件中加入如下,并重启 mysql
[mysqld]
skip-name-resolve
解释:
skip-name-resolve:跳过域名解析
通过容器的 mysql 命令行工具连接
docker exec -it mysql mysql -uroot -proot
设置 root 远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
进入容器文件系统
docker exec -it mysql /bin/bash

docker 安装 redis

本来应该直接执行下面的命令进行启动的,但是
因为/etc/redis/redis.conf中的redis.conf不存在,
怕将/mydata/redis/conf/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

创建文件夹和文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
但是redis不能持久化进行保存
所以修改redis之前挂载的配置文件
vi redis.conf
在里面增加appendonly yes

具体配置可以查看官方文档

使用 redis 镜像执行 redis-cli 命令连接
docker exec -it redis redis-cli

开发环境

Maven
配置阿里云镜像
<mirrors>
	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
</mirrors>
配置 jdk1.8 编译项目
<profiles>
	<profile>
		<id>jdk-1.8</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		<jdk>1.8</jdk>
		</activation>
		<properties>
			<maven.compiler.source>1.8</maven.compiler.source>
			<maven.compiler.target>1.8</maven.compiler.target>
			<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
		</properties>
	</profile>
</profiles>
idea
安装 lombok、mybatisx 插件
Vscode
需要的插件
Vetur —— 语法高亮、智能感知、Emmet 等
		包含格式化功能, Alt+Shift+F (格式化全文),
		Ctrl+K Ctrl+F(格式化选中代码,两个 Ctrl需要同时按着)
EsLint —— 语法纠错
Auto Close Tag —— 自动闭合 HTML/XML 标签
Auto Rename Tag —— 自动完成另一侧标签的同步修改
JavaScript(ES6) code snippets — — ES6 语 法 智 能 提 示 以 及 快 速 输 入 , 除 js 外 还 支
		持.ts,.jsx,.tsx,.html,.vue,省去了配置其支持各种包含 js 代码文件的时间
		HTML CSS Support —— 让 html 标签上写 class 智能提示当前项目所支持的样式
HTML Snippets —— html 快速自动补全
Open in browser —— 浏览器快速打开
Live Server —— 以内嵌服务器方式打开
Chinese (Simplified) Language Pack for Visual Studio Code —— 中文语言包
git
下载安装然后进行配置
进入git bash
# 配置用户名
git config --global user.name "username" //(名字)
# 配置邮箱
git config --global user.email "username@email.com" //(注册账号时用的邮箱)
配置 ssh 免密登录
官网说法在https://gitee.com/help/articles/4181#article-header0
进入 git bash;使用:
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"命令。 
连续三次回车。
然后一般用户目录下会有id_rsa和id_rsa.pub文件
或者 cat ~/.ssh/id_rsa.pub查看密钥内容
然后登录码云,在设置里面找到SSH公钥进行填写上面的公钥
就是登录进入 gitee,在设置里面找到 SSH KEY 将.pub 文件的内容粘贴进去
回到 git bash使用 ssh -T git@gitee.com 测试是否成功即可
成功后,以后git想码云推送代码的时候就不用填写用户名和密码了

码云仓库

新建码云仓库
语言java, .gitignore模板是Maven
然后按照下面进行创建版本控制的项目
将刚才的新建仓库的链接导入粘贴进去就会将仓库克隆下来

在这里插入图片描述

创建各个微服务项目

创建每个微服务的共同点:
	都有web和openfeign模块
	每个服务的包名是:com.jane.shop.xxx(product,ware)
	模块名:shop-product
然后在.gitignore里面设置一些不纳入版本控制的文件

**/mvnw
**/mvnw.cmd
**/.mvn
**/target/
.idea
**/.gitignore
比如这些
人人开源搭建后台管理
然后使用gitee里面的人人开源里面的
https://gitee.com/renrenio/renren-fast.git
https://gitee.com/renrenio/renren-fast-vue.git
这两个对应的前端后端的项目来进行配套使用
其中renren-fast-vue使用vscode进行打开,
因为这个项目使用node等框架来编写的,所以我们还需要安装node.js
Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
http://nodejs.cn/api/
我们关注node.js 的 npm 功能;
NPM 是随同 NodeJS 一起安装的包管理工具,JavaScript-NPM,Java-Maven;
1)、官网下载安装 node.js,并使用 node -v 检查版本
2)、配置 npm 使用淘宝镜像
npm config set registry http://registry.npm.taobao.org/
3)、如果 npm install 安装依赖出现 chromedriver 之类问题,先在项目里运行下面命令
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
然后再运行 npm install

但是运行的时候报错
参考博客

在运行renren-fast-vue前端时,一直报错 
<% if (process.env.NODE_ENV === ‘production‘) { %> <% }else { %> <% } %>
找了很多博客都没有解决,最后都要放弃这个项目时,终于找到解决办法。

1.卸载 node-sass已有的依赖

npm uninstall --save node-sass
1
2.清除缓存

npm cache clean -f
1
3.升级node-sass模块

npm install --save node-sass
1
最后 npm run dev 就大功告成了
人人开源代码生成器

人人开源代码生成器

然后配置好对应的东西

在这里插入图片描述
在这里插入图片描述

然后直接运行就可以了访问了

在这里插入图片描述

然后对生成的代码进行适当的调整
然后生成每个微服务的CRUD代码
整合MyBatis-Plus
/**
* 1、整合MyBatis-Plus
*      1)、导入依赖
*      <dependency>
*             <groupId>com.baomidou</groupId>
*             <artifactId>mybatis-plus-boot-starter</artifactId>
*             <version>3.2.0</version>
*      </dependency>
*      2)、配置
*          1、配置数据源;
*              1)、导入数据库的驱动。
* 					参考:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-versions.html
*              2)、在application.yml配置数据源相关信息
*          2、配置MyBatis-Plus;
*              1)、使用@MapperScan告诉MyBatis-Plusmapper扫描的位置
*              2)、告诉MyBatis-Plus,sql映射文件位置
**/
配置文件的配置
spring:
  datasource:
    username: root
    password: 123
    url: jdbc:mysql://10.235.140.206/gulimall_pms
    driver-class-name: com.mysql.jdbc.Driver

mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml
#  classpath*就是不止扫描自己所在项目的路径,还扫描所依赖的类路径
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ReflectMirroring

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

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

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

打赏作者

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

抵扣说明:

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

余额充值