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

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.kler.cn/a/322680.html

相关文章:

  • STL序列式容器之list
  • 使用WebSocket技术实现Web应用中的实时数据更新
  • java常用工具包介绍
  • 【Linux内核剖析】深入分析inet_init的处理机制
  • SOLIDWORKS Toolbox:一键自动化,让紧固件与零部件管理更高效
  • ElasticSearch学习笔记二:使用Java客户端
  • DRF实操学习——收货地址的设计
  • Oracle逻辑备份脚本【生产环境适用】
  • 深入浅出CSS盒子模型
  • 命令行基础指令速查(Linux/Mac适用)
  • 【HTTP 和 HTTPS详解】2
  • 【30天玩转python】并发编程
  • 黎巴嫩BP机爆炸事件启示录:我国应加快供应链安全立法
  • 理论-同步、异步、阻塞、非阻塞
  • 微信小程序 - 最新详细安装使用 Vant weapp UI 框架环境搭建详细教程
  • 蓝桥杯15届C/C++B组省赛题目
  • Python的包管理工具pip安装
  • 【前端】ES13:ES13新特性
  • 人工智能开发实时语音识别系统应用
  • 试用Debian12.7和Ubuntu24.4小札
  • 计算机网络--HTTP协议
  • 酒店智能门锁SDK接口pro[V10] 对接酒店收银-模块封装C#-SAAS本地化-未来之窗行业应用跨平台架构
  • C++ 类与对象(上)
  • 关于Mysql数据库的日常维护,包括配置、优化、备份、故障处理等工作的50道运维面试题
  • 关于使用/bin/sh -c 用于Dockerfile的Entrypoint的问题
  • 【第十五章:Sentosa_DSML社区版-机器学习之关联规则】