java面试题微服务篇

本文深入探讨了Spring Cloud微服务架构,包括Nacos服务注册与健康检查、Sentinel限流策略、Gateway网关负载均衡以及Ribbon和Feign的区别。同时,详述了Redis在分布式缓存中的高可用实现,如数据类型、持久化机制、单线程优势及应对雪崩、击穿、穿透策略。此外,文章还提到了项目中服务调用的方法和前后端分离实践。
摘要由CSDN通过智能技术生成

1.Spring Cloud

1.1概述

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

1.2Nacos

1.2.1Nacos服务注册及健康状态如何检测?

nacos服务客户端(要注册到nacos的服务)启动时会每隔一段时间(默认为5秒)向nacos发送心跳包,nacos注册中心15秒内没有检测到心跳包会默认认为nacos处于一种不健康状态,30秒还收不到心跳包则认为这个服务已不可用。

1.2.2Nacos的配置管理模型以及配置数据的获取?

Nacos配置管理模型中,为了实现更好的环境隔离给出了namespace,group,dataId的感念,一个配置中心可以有多个命名空间,一个命名空间可以有多个分组,一个分组内可以有多个groupId,服务启动时会每隔30描述向配置中心请求一次数据,2.0之前默认采取的时长轮询拉取模式。

1.3Sentinel

1.3.1为什么要限流,Sentinel 限流常用算法?

限流的目的是为了保证服务更加可靠的运行,不至于系统在遇到突发流量时,出现系统宕机的现象。常用的限流算法有计数器法,滑动窗口算法,漏斗算法,漏桶算法等。

1.4Gateway

1.4.1网关层面如何实现负载均衡以及常用算法?

网关层面的负载均衡我们借助了Ribbon进行实现,常用算法有轮询,权重,随机,hash等,这个算法都可以在配置中心进行配置,然后基于业务不同,做动态调整。

1.5Ribbon

Ribbon:负载均衡客户端,需要结合RestTemplate(HttpClient)进行服务的调用

  • 默认的负载均衡:轮询
  • 服务器启动时,先从Eureka server获取服务列表,然后在请求微服务时,通过RestTemplate进行http调用
  • 自定义访问策略 实现步骤: 自定义一个类, 实现Rule接口,那么我们自定义的类就是一个策略类(代码里面就是算法,确定访问方式) 方式一:
    在定义的类上面加上@Configuration这个注解(注意: 该配置类不能被springboot扫描到)
    方式二:在全局配置文件application.yml配置 策略类.

1.6Feign

Feign:Feign默认集成了Ribbon,用它来管理服务(管理controller配置的路径)
Feign可以通过@FeignClient注解标识一个接口,通过该接口生成一个代理类来进行远程的微服务调用。

1.7Ribbon和Feign的区别

  • Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value=“服务名称”)
    使用RestTemplate调用远程服务对应的方法
  • feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用
    在接口上使用@FeignClient(“指定服务名”)
  • Ribbon和Feign的区别: Ribbon和Feign都是用于调用其他服务的,不过方式不同。
  • 启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
  • 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
  • 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

2.项目技术说明

2.1前后端分离

前后端分离的目的: 实现前端和后台的数据不耦合,最终的效果是前后端都能够独立存在
前端人员开发: 独立开发前端代码
对于前端工程师:调用接口地址,接收json,解析json
后端人员开发: 独立开发后端代码
对于后端java工程师:提供业务的具体接口,响应json数据
后端人员通过swagger自动生成接口地址文档,
swagger使用参考地址:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老汤姆.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值