当前位置: 首页 > news >正文

Java后端面试题(微服务相关2)(day13)

目录

  • Gateway的三大属性
  • Gateway的三大案例组件
  • 为什么要用服务网关
  • 不同服务之间如何进行通信
  • 在微服务中如何监控服务
  • Openfeign如何使用
  • Openfeign自定义拦截器
  • Seata中2PC和3PC的区别
  • 项目的几种发布方式和特点
  • MongoDB和mysql区别
  • 什么是分布式锁,Redisson有什么用?
  • 下单请求三重防重

Gateway的三大属性


  1. 路由(route):由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则转发到该路由

  2. 断言(Predicate): 路由的筛选条件,允许开发人员匹配 HTTP 请求中的任何内容,比如请求头、请求参数或请求路径

    匹配条件

  3. 过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容

    • 生命周期
      1. PRE:前置过滤器,在请求被路由目标服务之前调用
      2. POST:后置过滤器,在路由到微服务以后执行
    • 作用范围
      1. 局部过滤器: GatewayFilter,应用到单个路由或者一个分组的路由上(需要在配置文件中配置)
      2. 全局过滤器: GlobalFilter,应用到所有的路由上(无需配置,全局生效)

Gateway的三大案例组件


  1. LogTime:下游接口耗时
  2. TokenGlobalFilter:全局Token认证
  3. TraceGlobalFilter:traceId全局链路跟踪

为什么要用服务网关

  1. 简化客户端的工作
  2. 降低函数间的耦合度
  3. 解放开发人员把精力专注于业务逻辑的实现

不同服务之间如何进行通信


可以使用OpenFeign来实现不同服务之间的通信。

OpenFeign是一个声明式的Web客户端,它可以简化编写Web服务客户端的代码。它是Spring Cloud的一部分,主要用于简化与RESTful服务的集成。

在微服务中如何监控服务


可使用Skywalking实现服务监控,Skywalking是一个分布式系统的应用程序性能监控工具 (Application Performance Managment),提供了完善的链路追踪能力。

  1. skywalking主要可以监控接口、服务、物理实例的一些状态,特别是在压测的时候可以看到众多服务中哪些服务和接口比较慢
  2. skywalking还可以设置告警规则,如果项目出现bug可对开发人员进行通知,以便在第一时间进行修复

Openfeign如何使用


  1. 引入依赖
  2. 编写FeignClient接口
  3. 在启动类中开启对OpenFeign注解的支持
  4. 注入FeignClient
  5. 发起调用,像调用本地方法一样调用远程服务

Openfeign自定义拦截器


可以通过在OpenFeign中自定义拦截器的方式,来实现服务远程调用过程中的日志输出、认证授权等应用。

自定义拦截器步骤:

  1. 继承RequestInterceptor
  2. 实现apply方法,编写相应逻辑
  3. 将拦截器类放入Ioc容器中
    拦截器

Seata中2PC和3PC的区别


XA协议包括两阶段提交(2PC)和三阶段提交(3PC)两种实现

  • 2PC(二阶段提交协议)

    1. 第一阶段:预提交阶段
      由事务协调者询问通知各个事务参与者,是否准备好了执行事务
    2. 第二阶段:提交阶段
      协调者收到各个参与者的准备消息后,根据反馈情况通知各个参与者commit提交或者rollback回滚
  • 3PC(三阶段提交协议)

    1. 第一阶段:准备阶段
      协调者向参与者发送 canCommit 请求,判断是否具备执行条件,参与者如果可以提交就返回Yes响应,否则返回No响应
    2. 第二阶段:预提交阶段
      协调者根据参与者的反应情况来决定是否可以进行事务的 PreCommit 操作
    3. 第三阶段:提交阶段
      协调接收到所有参与者发送的ACK响应,根据反馈情况通知各个参与者commit提交或者rollback回滚
  • 区别:与2PC相比,3PC降低了阻塞时长,加入了超时机制,并且在等待超时后,协调者或参与者会中断事务,避免了协调者单点问题,阶段三中协调者出现问题时,参与者会继续提交事务,但是数据不一致问题仍然存在。

项目的几种发布方式和特点


  • jar包发布
    jar包发布过于依赖于环境
  • docker发布
    docker发布虽然解决了环境依赖问题,但是不好管理
  • k8s发布
    k8s发布可以进行流量监控,针对流量规模对容器进行自动伸缩,可以热部署,可结合cicd自动发布,容器的自动化编排,还可以在yaml配置文件里设置调优参数

MongoDB和mysql区别


  1. MongoDB是文档型非关系型数据库,mysql是关系数据库。
  2. MongoDB比较灵活,相比mysql不用建表就可以直接进行存储,针对变化比较频繁的场景,MongoDB比较适合。
  3. 使用场景不同,MongoDB是首页,包括我们的一些活动页,快速开发,快速迭代,MongoDB后台。

什么是分布式锁,Redisson有什么用?


分布式锁 确保在同一时间只有一个节点能获得对共享资源的独占访问权限,从而解决并发访问问题。

Redisson锁,简称看门狗,通过对分布式锁进行独特的续命机制,既避免了锁的时间过长造成的效率低下,又避免了锁的时间不够,业务未执行完时资源被其他线程抢占的问题。

原理:当锁的剩余时间到某个阈值时,业务仍未执行完,就会对锁进行续命,延长锁的时间,直至业务执行完成。

下单请求三重防重


  • 前端:用户点击下单后显示loading层,或者按钮置灰,防止重复发送请求
  • 后端
    1. redis分布式锁:处理完该用户一个下单请求后会设置一个分布式锁(比如实际场景中一般5秒内不会下单两次)
    2. Redisson锁(看门狗):如果业务执行时间超过五秒,就会通过看门狗机制对锁进行续命,直到业务执行结束。

http://www.mrgr.cn/news/34360.html

相关文章:

  • 机器人顶刊IEEE T-RO发布无人机动态环境高效表征成果:基于粒子的动态环境连续占有地图
  • Python 图算法系列29-大规模图关系建立-step1导入数据
  • 预计2030年全球半导体用超高纯氢气市场规模将达到2.5亿美元
  • HTML5 Video标签的属性、方法和事件汇总,以及常用视频插件推荐
  • windows自定义路径docker安装
  • 镭射限高防外破预警装置-线路防外破可视化监控,安全尽在掌握中
  • 跨境专线的网速收到什么影响
  • SpringBoot+Thymeleaf租房管理系统
  • python 斑马打印模板
  • TAPD 提效技巧 - 需求基本信息
  • leetcode 236.二叉树的最近公共祖先
  • Sentence Transformers 教程!
  • 【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)
  • 云原生周刊:Artifact Hub 成为 CNCF 孵化项目|2024.9.23
  • 项目实现:云备份服务端③(热点模块、服务端业务处理模块实现)
  • 三线城市的女玩家们不想“谈恋爱”,小游戏掘金新蓝海
  • 【Transformers基础入门篇4】基础组件之Model
  • 干货:企业微信批量删除客户指南!
  • 13.第二阶段x86游戏实战2-动态模块地址
  • 【Go】Go语言中深拷贝和浅拷贝