微服务相关知识点及其组件

一.单体架构与微服务

(1)单体架构:将业务所有功能集中在一个项目中开发,打成一个包部署。

(2)微服务:将单体架构中的多个功能模块拆分成多个独立的项目(拆分之后利用Maven聚合,每一个module都是一个微服务),分别打包,分别部署。

微服务技术栈:SpringCloud

二.微服务相关技术

1.远程调用:

1.1定义

进行微服务分模块拆分后,不同的微服务之间相互隔离,有自己独立的依赖管理,独立的数据库绑定,独立的启动项。所以在进行功能实现的过程中如果需要访问其他模块的数据是访问不到的,因为在yaml配置文件中只连接了自己单独的数据库,所以只能通过联网,进行接口请求拿到需要的数据。

1.2远程调用的问题

前面用RestTemplate进行远程调用时,输入的是具体ip及端口地址,固定写死的,就会出现以下几个问题:

(1)如果该模块部署到多台服务器上,进行负载均衡时,每一台服务器都有自己的端口地址,怎么能写死呢,如果写死了,就始终访问一个无法进行负载均衡

(2)固定访问的服务器挂了怎么办。

1.3注册中心(Nacos技术)

(1)注册中心原理

(2)Nacos注册中心*

国内企业中占比最多的注册中心组件,是阿里巴巴的产品,目前已经加入SpringCloudAlibaba中。

(3)注册中心的使用(注册与发现)

服务注册:服务提供者将可以提供服务的微服务模块写入注册中心,供别人调用。

服务发现:服务消费者连接nacos进行拉取和订阅服务。

1.4远程调用技术(OpenFeign)

(1)介绍:让发送http请求变得更简单。

用到OpenFeign组件的这种远程调用的开发模式,让远程调用像本地方法调用一样简单。
其实远程调用的关键点就在于四个:

  • 请求方式

  • 请求路径

  • 请求参数

  • 返回值类型
    所以,OpenFeign就利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理帮我们生成远程调用的代码,而无需我们手动再编写,非常方便。

(2)使用流程

1:引入依赖 在目标服务的pom.xml中引入OpenFeign(该组件的依赖)的依赖和loadBalancer依赖(负载均衡器,内置各种负载均衡算法)

2:启用OpenFeign

cart-serviceCartApplication启动类上添加注解,启动OpenFeign功能

3:编写OpenFeign客户端

cart-service中,定义一个新的接口,编写Feign客户端:

4:使用FeignClient

依赖注入+调用方法

2.网关

2.1定义:

网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由转发以及数据安全的校验

网关本身也是一个微服务,所以可以在Nacos注册中心进行拉取信息。

2.2实现方案(SpringCloud Gateway)

在SpringCloud当中,提供了两种网关实现方案:

  • Netflix Zuul:早期实现,目前已经淘汰
  • SpringCloudGateway:基于Spring的WebFlux技术,完全支持响应式编程,吞吐能力更强

2.3快速入门

  • 创建网关微服务

  • 引入SpringCloudGateway、NacosDiscovery依赖

  • 编写启动类

  • 配置网关路由

    gateway:网关,routes:路由

  • id:路由的唯一标示

  • predicates:路由断言,其实就是匹配条件

  • uri:路由目标地址,lb://代表负载均衡,从注册中心获取目标微服务的实例列表,并且负载均衡选择一个访问。