简单微服务架构实现
目录
1 如何理解
单体架构是一个项目只有一个Module,只需要一个端口,前端所有的请求都请求这一个端口,适合小项目;
微服务架构是一个项目拆分成几个模块,各个模块单独运行,每个模块都有一个端口,前端不同的功能请求不同的端口。
比如,一个项目分商品模块、用户模块和订单模块,端口分别为8081、8082、8083.商品的增删改查,应该请求商品模块的端口8081,用户注册登录请求用户模块端口8082,支付相关的功能请求支付模块端口8083。
于是引出了两个问题:
1 前端需要直接与各个微服务模块通信,那么在各个模块中要写硬编码或者配置信息,模块多了怎么解决?
2 存在服务之间的调用,那应该怎么请求?

解决:
1 网关:spring cloud gategway
其实也是一个模块,只有主函数和配置文件,提供一个端口(10010),前端所有的请求都请求网关的端口


网关根据请求的url路径前缀转发到相对应的端口
比如,第一张截图里请求的是/item,那么网关就会找到itemservice

到这里只找到了itemservice这个id,怎么知道请求的是8081端口呢?
用的是服务注册中心nacos,服务每次启动都向nacos注册一遍名字、ip、端口
也就是说,在商品模块启动的时候,就会向服务注册中心注册:itemservice,自己的ip,8081
整个流程是:前端请求网关端口,网关根据请求路径前缀找到对应的id,查服务注册中心,找到对应端口号,进行转发。
2 远程调用:Spring Cloud Feign:微服务之间的调用
订单流程:1调用item微服务,根据id查询商品信息 2调用user微服务查询地址信息 3调用 item微服务扣减库存

写已经实现了的方法接口,那么在别的模块中使用@Autowired注入,可以实现远程调用
总结:微服务五大组件
以上已经提到了微服务五大组件其中的三个:
1 网关 spring cloud gateway、nginx、zuul......
- 作用?对外提供的统一路口
- 如何区分请求到底要访问哪个微服务?根据前端请求的URL前缀区分
- 如何获取服务的实际地址信息? 通过注册中心查询
2 服务注册中心 nacos、Eurka、Zookeeper......
- 服务每次启动都注册一遍名字、ip、端口
3 远程调用 Spring Cloud Feign
- 作用?实现微服务之间的调用
还有另外两个:
4 配置中心 Nacos、Spring Cloud Config......
- 微服务中的配置项目(可有可无,有最好)
5 服务保护 Sentinel
- 功能?限流(能用,只是慢)、熔断(不能用)
2 怎么实现
1 创虚拟机
2 安装远程工具FinalShell
3 安装Docker
Docker镜像操作:
-
docker images #列出本地所有的镜像列表
-
docker pull nginx:1.21.1 #下载镜像(有时候不能直接下载下来,就要单独下载再导入)
-
docker rmi nginx:1.21.1 #删除指定镜像
-
docker load -i mysql.tar #导入镜像
-
docker save -o ./nginx.tar nginx:1.21.1 #导出镜像
4 下载镜像(nacos、redis、nginx、mysql、es)
5 使用FinalShell将镜像传到虚拟机里,导入镜像(load)
6 创建Docker容器(一个镜像可以创建多个容器)
Docker容器操作:
-
docker run:创建并运行一个容器,处于运行状态
-
-d:让容器后台运行
-
--name:指定容器名称,容器名称必须唯一
-
-p:指定端口映射,centos端口:容器端口
-
--restart=always:自动启动

-
-
docker start mysql:让一个停止的容器再次运行
-
docker stop mysql:停止一个运行的容器
-
docker rm -f mysql:强制删除一个容器
-
docker ps 查看所有容器,只显示正在运行的容器
-
docker ps -a 查看所有容器,包括已经停止的 all
-
docker logs -f mysql:查看容器日志
3 附:认识Docker
Docker是一个快速交付应用、运行应用的技术
Docker的两个重要的概念:镜像和容器
-
镜像(Image):Docker 将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
-
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是 Docker 会给容器进程做隔离,对外不可见。
Docker就像码头,有很多个集装箱,每个集装箱里都是独立运行的进程(沙箱机制)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)