目录

1 如何理解

总结:微服务五大组件

2 怎么实现


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就像码头,有很多个集装箱,每个集装箱里都是独立运行的进程(沙箱机制)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐