【Springcloud 实用篇】

Spring cloud

微服务的架构特征:

  • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责

  • 自治:团队独立、技术独立、数据独立,独立部署和交付

  • 面向服务:服务提供统一标准的接口,与语言和技术无关

  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

可以认为微服务是一种经过良好架构设计的分布式架构方案

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。

  • 注册中心: eureka、 nacos 【服务注册与发现】

  • 远程调用: feign

  • 负载均衡: ribbon

  • 配置中心: config 、 nacos

  • 网关: gateway

  • 熔断器: hystrix 【熔断、降级、保护】

Eureka

Eureka的主要功能包括: 服务注册:Eureka注册中心会维护一个服务注册表,记录所有注册的服务实例信息,包括服务的IP地址、端口号、服务名称等。 服务发现:当一个服务实例启动后,会向Eureka注册中心注册自己的信息,Eureka会将该服务实例的信息注册到服务注册表中,其他服务可以通过Eureka来获取该服务实例的信息,实现服务之间的调用和发现。 服务续约:Eureka会定期向服务实例发送心跳,以保证服务实例的可用性和稳定性。如果一个服务实例长时间没有发送心跳,Eureka会将其从服务注册表中移除,从而保证服务的高可用性。 服务下线:当一个服务实例下线时,Eureka会将其从服务注册表中移除,从而保证服务的高可用性和可扩展性。 服务状态监控:Eureka会定期对服务实例的状态进行监控,如果一个服务实例出现问题,Eureka会将其从服务注册表中移除,从而保证服务的高可用性和可靠性。 总之,Eureka提供了一系列的功能和特点,可以帮助开发者更好地管理和监控微服务架构下的服务,提高服务的可用性和稳定性。

负载均衡

@LoadBalanced注解,即可实现负载均衡功能

SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。用一幅图来总结一下:

基本流程如下:

  • 拦截我们的RestTemplate

    (RestTemplate是Spring Framework提供的一个用于访问RESTful Web服务的客户端类,它提供了一系列的HTTP客户端接口,可以方便地调用RESTful Web服务,获取服务的响应数据。)请求http://userservice/user/1

  • RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service

  • DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表(dynamic 动态的)

  • eureka返回列表,localhost:8081、localhost:8082

  • IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081

  • RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求

Nacos

Nacos是一款开源的服务发现和配置管理平台,提供了一系列的功能和特点,包括:

  1. 服务注册和发现:Nacos支持基于DNS(它是一种用于将域名转换为IP地址的分布式数据库系统。)和HTTP/HTTPS协议的服务注册和发现,可以通过简单的配置和管理,实现服务的自动化注册和发现。

  2. 服务配置管理:Nacos支持配置管理,可以通过配置中心管理不同环境的配置信息,实现配置的集中管理和更新。

  3. 服务健康检查:Nacos支持服务的健康检查,可以通过健康检查来保证服务的可用性和稳定性。

  4. 服务流量控制:Nacos支持服务的流量控制,可以通过流量控制来限制服务的调用量和流量,保护服务的稳定性。

  5. 服务版本管理:Nacos支持服务的版本管理,可以通过版本管理来支持不同的版本和环境,实现服务的灰度发布和回滚。

  6. 服务元数据管理:Nacos支持服务的元数据管理,可以通过元数据管理来管理服务的元数据,包括服务的描述、标签、版本等。

  7. 服务安全管理:Nacos支持服务的安全管理,可以通过安全管理来保护服务的安全性,包括服务的认证、授权和加密等。

总之,Nacos提供了一系列的功能和特点,可以帮助开发者更好地管理和部署微服务架构下的服务,提高服务的可用性和稳定性。

Feign远程调用

Feign是一种声明式、模板化的HTTP客户端。 让微服务之间的调用变得更简单了,类似controller调用service。

你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

Spring Cloud feign集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

Feign的作用包括:

  1. 提供一种简单的方式来调用HTTP服务,避免了手动拼接HTTP请求和解析HTTP响应的麻烦。

  2. 支持多种编码方式,包括JSON、XML、表单等,可以根据不同的需求选择不同的编码方式。

  3. 支持Feign的注解和函数式编程两种方式,可以根据不同的需求选择不同的方式来调用HTTP服务。

  4. 支持异步请求和回调处理,可以更方便地处理长时间运行的任务和异步请求的结果。

  5. 提供了一些高级特性,例如支持Hystrix、Ribbon等服务容错和负载均衡算法,支持Spring Cloud的服务发现和注册机制等。

总之,Feign是一个Java Http客户端,它可以帮助我们更方便地调用HTTP服务,提高开发效率和代码质量。

Feign的优化:

1.日志级别尽量用basic

2.使用HttpClient或OKHttp代替URLConnection

① 引入feign-httpClient依赖

② 配置文件开启httpClient功能,设置连接池参数

网关是一种网络设备,它作为网络通信的中介,负责将从客户端发送来的请求转发到服务器,并将服务器返回的数据转发回客户端。网关的功能包括:

  1. 协议转换:网关可以将不同协议的数据转换为统一的协议,使得客户端可以透明地访问不同的服务。

  2. 负载均衡:网关可以根据负载均衡算法将请求分发到不同的服务器上,提高服务的可用性和性能。

  3. 安全控制:网关可以对请求进行安全控制,包括身份验证、访问控制、流量控制等,保护服务的安全性。

  4. 缓存:网关可以缓存一些数据,提高服务的响应速度和效率。

  5. 日志记录:网关可以记录客户端的请求和服务器的响应,方便开发和调试。

总之,网关是一种重要的网络设备,它可以帮助企业实现网络通信的集中管理和控制,提高网络的安全性和效率。

网关的核心功能特性

  • 身份认证和权限校验

  • 服务路由、负载均衡

  • 请求限流

注意:Spring Cloud Gateway本身也是一个微服务,需要注册到注册中心。

网关在架构中的位置:

  • 不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都可经过网关,然后再由网关来实现 鉴权、动态路由等等操作。Gateway就是我们服务的统一入口。

过滤器

路由过滤器的作用是什么?

① 对路由的请求或响应做加工处理,比如添加请求头

② 配置在路由下的过滤器只对当前路由的请求生效

defaultFilters的作用是什么?

  • 对所有路由都生效的过滤器

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。

定义方式是实现GlobalFilter接口。

public interface GlobalFilter {
    /**
     *  处理当前请求,有必要的话通过{@link GatewayFilterChain}将请求交给下一个过滤器处理
     *
     * @param exchange 请求上下文,里面可以获取Request、Response等信息
     * @param chain 用来把请求委托给下一个过滤器 
     * @return {@code Mono<Void>} 返回标示当前过滤器业务结束
     */
    Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

在filter中编写自定义逻辑,可以实现下列功能:

  • 登录状态判断

  • 权限校验

  • 请求限流等

  • 全局过滤器的作用是什么?

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

    实现全局过滤器的步骤?

    • 实现GlobalFilter接口

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

    • 编写处理逻辑

    执行顺序:

    • order值越小,优先级越高,执行顺序越靠前。

    • 当过滤器的order值一样时,会按照 defaultFilter > 局部路由过滤器 >全局 GlobalFilter的顺序执行。

    Gateway与Feign、nginx的区别:
    • Gateway:接收系统外部请求, 作为整个应用的流量入口,接收所有的请求,如PC、移动端等,并且将不同的请求转发至不同的处理微服务模块,其作用可视为nginx;大部分情况下还可以用于权限鉴定、服务端流量控制;

    • Feign :系统内部调用,则是将当前微服务的部分服务接口暴露出来,并且主要用于各个微服务之间的服务调用;

    • nginx: 一般在大型项目中,存放静态资源,还可以用作反向代理和负载均衡服务器

gateway和nginx在架构上的区别:

gateway 是前端工程 到 后台服务器之间的一个 对内网关

nginx是用户到 前端工程 的网关,对外网关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值