分布式微服务搭建

分布式微服务架构搭建(举出一个项目搭建的例子,其他项目可参考本文档)

基于Nginx作为web服务器、JDK作为Java运行环境、MySQL作为关系型数据库、Nacos作为服务发现和配置中心、Maven作为项目管理工具、Redis作为缓存和消息中间件(视具体需求而定)、Node.js与npm作为某些微服务(如前端服务或特定业务逻辑服务)的开发和依赖管理工具,可以搭建一个完整的分布式微服务架构项目。以下是一个简化的项目搭建例子,供其他项目参考

定义:

分布式微服务架构是一种将大型应用程序拆分成多个小型、自治的服务的方法,每个服务独立运行在自己的进程中,并通过轻量级的通信机制(如HTTP REST API)进行通信。这种架构允许不同的服务使用不同的编程语言、数据库和部署平台,从而实现高度的灵活性和可扩展性。

关键特性:

  1. 服务独立性与自治性:

每个微服务都是一个独立的业务单元,拥有自己的业务逻辑、数据存储和自动化测试。
服务之间通过明确定义的接口进行通信,降低了服务间的耦合度。

  1. 轻量级通信:

微服务之间通常使用轻量级的通信协议(如HTTP、gRPC)进行通信。
消息队列(如RabbitMQ、Kafka)也常用于服务间的异步通信。

  1. 独立部署与扩展:

每个微服务都可以独立部署、更新和扩展,而不会影响其他服务。
这使得团队可以更快地响应业务需求,并优化系统的性能。

  1. 自动化与DevOps:

自动化工具(如CI/CD流水线、Docker容器、Kubernetes编排工具)用于简化微服务的部署、管理和监控。
DevOps文化强调开发与运维的紧密合作,促进了快速反馈和持续改进。

  1. 数据分散与聚合:

每个微服务可能拥有自己的数据库,形成数据分散的架构。
使用API网关或服务网格等技术可以实现数据的聚合和跨服务的数据一致性。

  1. 容错与弹性:

分布式微服务架构天然支持容错设计,因为单个服务的故障不会影响到整个系统。
负载均衡、断路器模式、重试机制等策略用于增强系统的弹性和可用性。

  1. 服务注册与发现:

使用服务注册中心(如Eureka、Consul、Nacos)来管理服务的注册和发现。
服务消费者通过注册中心查询服务提供者的地址,实现动态的服务调用。

优势:

技术异构性: 允许使用最适合特定服务的技术栈。
快速响应市场变化: 独立的团队可以更快地开发和迭代服务。
可扩展性: 可以根据需求独立地扩展单个服务。
容错能力强: 提高了系统的整体可用性和稳定性。

挑战:

服务间的通信开销: 增加了系统复杂性和潜在的性能瓶颈。
数据一致性管理: 需要额外的机制来确保跨服务的数据一致性。
分布式事务处理: 分布式系统中的事务处理比单体应用更加复杂。
运维复杂性: 更多的服务意味着更高的运维成本和复杂度。
分布式微服务架构是现代软件开发中越来越流行的选择,它为大型、复杂的应用程序提供了更高的灵活性、可扩展性和可维护性。然而,它也带来了新的挑战和复杂性,需要团队具备相应的技能和经验来有效地实施和管理。

依赖项:

​ JDK >= 1.8

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

​ Mysql >= 5.7.0

yum install https://repo.mysql.com//mysql80-community-release-el7-11.noarch.rpm

yum install mysql-community-server -y

​ Redis >= 3.0

yum install redis

​ Maven >= 3.0

yum install maven

​ nacos >= 2.0.4

wget https://download.nacos.io/nacos-server/nacos-server-2.3.2.zip
#如果下载失败需要自己去官网下载源码包,而后传输到Linux内
#官网下载地址:https://nacos.io/download/release-history/

​ Node >= 12

yum install nodejs

​ git

yum install git

npm

yum install npm

第一步:使用git将项目包拉到本地

使用Linux克隆到本地

git clone https://gitee.com/qianxuwang/td-cloud.git

#项目地址

https://gitee.com/qianxuwang/td-cloud/tree/master/

第二步:配置MySQL

初始化MySQL并打开

mysqld --initialize-insecure --user=mysql

systemctl start mysqld

#设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

#授权远程登录
update user set host = '%' where user = 'root';

#刷新权限
flush privileges;

配置MySQL,创建需要的nacos和td项目数据库、创建td用户和nacos用户及密码,并授权远程访问和数据库权限,也可以直接使用root用户

#有条件可以直接使用navicat或者其他管理工具创建
CREATE DATABASE `nacos` CHARACTER SET 'utf8mb3' COLLATE 'utf8mb3_bin';
CREATE DATABASE `ry-cloud` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';
CREATE USER 'nacos'@'%' IDENTIFIED BY '123456';	#密码根据自己需要设定
CREATE USER 'td'@'%' IDENTIFIED BY '123456';	#密码根据自己需要设定
grant all privileges on *.* to 'nacos'@'%';
grant all privileges on *.* to 'td'@'%';
#刷新权限
flush privileges;

第三步:将项目包内./sql/下的数据库文件导入

mysql -unacos -p123456 nacos < ry-config.sql

mysql -utd -p123456 ry-cloud < ry-cloud.sql

第四步:配置redis

修改redis配置文件

vim /etc/redis.conf

#大约在61行修改为

bind 0.0.0.0

#根据需要设置redis密码,在配置文件480行左右修改为以下内容

requirepass 123456

启动redis

systemctl start redis

第五步:配置本地nacos

将下载的nacos包进行解压

unzip nacos-server-2.3.2.zip	#根据自己下载的包执行此条命令

修改nacos配置文件,使其连接数据库

vim nacos/conf/application.properties
#直接将下面复制进配置文件内

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.236.144:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=123456

后台启动nacos

#进入nacos的bin目录

bash startup.sh -m standalone

#如果nacos启动失败,将上述的MySQL配置用户密码改为root的用户密码

第六步:管理nacos内的代码块

浏览器访问 IP:8848/nacos

#`**注意:将内部配置列表内的所有配置都要打开查看,如有redis或者MySQL的要把IP、数据的连接库、连接账号密码修改**`

第七步:*将每一个模块的nacos配置IP改为自己使用的nacos_IP

使用Linux

vim ruoyi-auth/src/main/resources/bootstrap.yml
……
vim ruoyi-gateway/src/main/resources/bootstrap.yml
……
vim ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
……

使用Windows

同上,修改文件内的IP

第八步:在项目包内的主目录下执行以下命令

使用Linux

#进入项目包的主目录执行以下命令

mvn clean package -Dmaven.test.skip=true

nohup java -jar ruoyi-auth/target/ruoyi-auth.jar &> auth.out &

nohup java -jar ruoyi-gateway/target/ruoyi-gateway.jar &> gateway.out &

nohup java -jar ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar &> system.out &

#以上命令启动信息都会存放在auth.out、gateway.out、system.out文件内,可以使用tail -f命令实时查看信息

使用Windows

1.运行bin/目录下的package.bat文件
#前提要安装maven软件,参考以下文档
https://blog.csdn.net/m0_53022813/article/details/137148345

2.运行之后将整个项目目录拷贝至Windows(也可以Windows上部署)

第九步:在项目包内的ruoyi-ui/目录内执行以下命令开启项目访问

npm install --registry=https://registry.npmmirror.com

npm run dev

第十步:打包

第九步没有问题后,在项目包ruoyi-ui/目录下执行以下命令进行打包部署

npm run build:prod

第十一步:部署

在第十步执行后会出现dist目录,如果需要单独配置前端需要将此目录压缩至前端服务器

zip -r dist.zip dist	#打包

unzip dist.zip	#解包

配置nginx来指定该目录为资源文件

建议将nginx主配置文件内的server块注释掉,使用虚拟主机

vim /etc/nginx/conf.d/td.conf


server {
        listen       80;	#监听端口,根据需要修改
        server_name  _;

        location / {
            root   /data/dist;	#资源目录,根据自己资源目录位置配置
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        location /prod-api/{
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080/;	#后端的监听IP和端口,如果未配置就按照8080端口
        }

        # 避免actuator暴露
        if ($request_uri ~ "/actuator") {
            return 403;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

部署完毕后开启nginx

systemctl start nginx

第十二步:浏览器访问测试

访问前端服务器 I P : 端口 访问前端服务器IP:端口 访问前端服务器IP:端口

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值