微服务技术详解之SpringCloudAlibaba

一、认识微服务

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

优点:

  • 架构简单
  • 部署成本低

缺点:

  • 耦合度高

2、分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。

优点:

  • 降低服务耦合
  • 有利于服务升级拓展

缺点:

  • 架构复杂,难度大

3、微服务(高内聚、低耦合)

微服务是一种经过良好架构设计的分布式架构设计方案,微服务架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立、技术独立、数据独立、部署独立

4、微服务技术对比

二、服务拆分及远程调用

服务拆分:

1、微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务

2、微服务可以将业务暴露为接口,供其它微服务使用

3、不同微服务都应该有自己独立的数据库

服务调用:

  • 基于RestTemplate发起的http请求实现远程调用

步骤:

1、注册RestTemplate

2、服务远程调用RestTemplate

三、Ribbon负载均衡

1、负载均衡流程

2、负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:

1、代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:(全局)

2、配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:(只针对指定的微服务)

饥饿加载

Ribbon默认采用的是懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

四、nacos注册中心

1、Nacos服务搭建

①下载安装包

②解压

③在bin目录下运行指令:startup.cmd -m standalone

2、Nacos服务注册或发现

①在cloud-demo父工程中添加spring-cloud-alibaba的管理依赖

②添加nacos的客户端依赖

③配置nacos地址

在user-service&order-service中的aplication.yml文件,添加nacos地址:

④、启动并测试

3、Nacos服务分级存储模型

3.1、概念

①一级是服务,例如:userservice

②二级是集群,例如杭州或上海

③三级是实例,例如杭州机房的某台部署了userservice的服务器

3.2、如何设置实例的集群属性

①修改application.yml文件,添加如下内容:

②在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务:

NacosRule负载均衡策略:

优先选择同集群服务实例列表,本地集群找不到提供者,才会去其它集群寻找,并且会报警告,确定了可用实例列表后,再采用随机负载均衡挑选实例。

4、实例的权重控制

①Nacos控制台可以设置实例的权重值,0 ~ 1之间

②同集群内的多个实例,权重越高被访问的频率越高

③权重设置为0则完全不会被访问

用途:可以根据服务器的性能调整访问的权重、实现服务升级时的灰度发布

5、nacos环境隔离

在nacos上创建一个命名空间,然后修改order-service的application.yml,添加namespace:

①namespace用来做环境隔离

②每个namespace都有唯一id

③不同namespace下的服务不可见

面试题:Nacos和Eureka区别:

五、Nacos配置管理

1、nacos可以实现配置更改热更新

2、将配置交给Nacos管理的步骤

配置获取流程:

①在Nacos中添加配置文件

②在微服务中引入nacos的config依赖

③在微服务中添加bootstrap.yml文件,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个配置文件。(这个文件是引导文件,优先级高于application.yml)

3、配置热更新

  • 方式一:通过@Value注解注入,结合@RefreshScope来刷新

在@Value注入的变量所在类上添加注解@RefreshScope

  • 方式二:通过@ConfigurationProperties注入,自动刷新

注意事项:不是所有的配置都适合放到配置中心,维护起来会比较麻烦。建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置。

4、多环境配置共享

① [服务名]-[spring.profile.active].yaml,环境配置

② [服务名].yaml,默认配置,多环境共享

优先级:

5、Nacos集群搭建

集群搭建步骤:

① 搭建MySQL集群并初始化数据库表

②下载解压nacos

③ 修改集群配置(节点信息)、数据库配置

④ 分别启动多个nacos节点

⑤ nginx反向代理

六、http客户端Feign

Feign的使用步骤

①引入依赖

②添加@EnableFeignClients注解

③编写FeignClient接口

④使用FeignClient中定义的方法代替RestTemplate

七、统一网关Gateway

为什么需要网关?

网关功能:

  • 身份认证和权限校验
  • 服务路由负载均衡
  • 请求限流

1、搭建网关的步骤:

①、创建新的moudle,引入SpringCloudGateway的依赖和nacos的服务发现依赖:

②、编写路由配置及nacos地址

2、路由断言工厂(Route Predicate Factory)

作用:读取用户定义的断言条件,对请求做出判断

Spring提供了11种基本的Predicate工厂

3、路由过滤器GatewayFilter

作用:

  • 对路由的请求或响应做加工处理,比如添加请求头
  • 配置在路由下的过滤器只对当前路由的请求生效,而defaultFilters对所有路由都生效

spring提供了31种不同的路由过滤器工厂

4、全局过滤器

作用:对所有路由都生效的过滤器,并且可以自定义处理逻辑

实现全局过滤器的步骤

① 实现GlobalFilter接口

② 添加@Order注解或实现Ordered接口

③ 编写处理逻辑

例:自定义过滤器

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

  • 参数中是否有 authorization
  • authorization参数值是否为 admin

如果满足则放行,否则拦截

5、过滤器执行顺序

  • 每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序就越靠前
  • GlobalFilter通过实现Ordered接口,或者通过@Order注解来指定order值,由我们自己指定
  • 路由过滤器和defaultFilter的order由spring指定,默认是按照声明顺序从1递增
  • 当过滤器的order值一样时,会按照defaultFilter > 路由过滤器 > GlobalFilter的顺序执行

6、跨域问题处理

跨域:请求的协议、ip地址、端口号中有一个不同都会受到浏览器同源策略的限制。

跨域问题:浏览器禁止请求的发起者与服务器端发生跨域ajax请求,请求被浏览器拦截的问题

网关处理跨域采用的同样是CORS方案,并且只需要简单配置即可实现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值