0
点赞
收藏
分享

微信扫一扫

微服务常见问题分析

孟佳 2022-02-09 阅读 96

目录

微服务架构入门

Nacos注册中心入门

远程服务调用实践

Nacos配置中心应用实践

Sentinel 限流应用实践

Sentinel 进阶应用实践

Gateway 应用实践

Gateway 应用进阶实践

单点登录系统初步设计及实现

SSO系统中的登录逻辑基本实现

SSO系统颁发令牌及资源服务实践

SSO网关,UI工程,日志记录实践



架构入门

  • 为什么需要微服务?(对系统分而治,解决因并发访问过大带来的系统复杂性(例如:业务,开发,测试,升级,可靠性等)
  • 微服务设计的特点?(单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但会带来一定的维护成本)
  • 微服务解决方案有哪些?(大厂自研,中小企业采用开源Spring Cloud Alibaba,Spring Cloud Netfix等 )
  • 微服务设计中需要哪些关键组件(服务的注册,发现,配置,限流降级,访问入口管理,分布式事务管理等)
  • 创建聚合工程的目的?(实现工程之间资源的的共享,简化工程管理)
  • 如何修改聚合工程中项目的编译和运行版本?(pom.xml:build->plugins->plugin->maven-compiler-plugin)
  • maven工程中build元素的作用?(定义项目的编译,打包方式)
  • maven父工程的packaging元素内的值是什么?(父工程默认打包方式为pom方式)
  • maven父工程中dependencyManagement元素的作用是什么?(项目依赖的版本,当前工程或子工程不需要再指定版本)
  • Maven父工程中如何统一定义JDK编译和运行版本?(配置maven编译插件:maven-compiler-plugin)
  • Maven工程pom.xml文件有删除线怎么解决?(修改idea中maven的配置)

Nacos注册中心入门

  • 如何理解服务注册中心?(存储服务信息的一个服务)
  • 服务注册中心诞生的背景? (服务多了,需要对服务进行更好管理)
  • 市场上常用的注册中心?(Zookeeper,Eureka,Nacos,Consul)
  • 如何对注册中心进行选型?(社区活跃度,稳定性,功能,性能,学习成本)
  • Nacos 是什么?(是Alibaba公司基于SpringBoot技术实现的一个注册中心,本质上也是一个web服务)
  • Nacos 的基本架构?(Client/Server架构)
  • Nacos 主要提供了什么核心功能?(服务的注册,发现,配置)
  • Nacos 服务启动需要什么前置条件?(配置JDK的JAVA_HOME目录,安装MySQL5.7以上版本,配置连接的数据库)
  • Nacos 服务单机模式,window平台下启动时的指令是什么?(startup.cmd -m standalone)
  • 实现Nacos服务注册需要添加什么依赖?(两个:web,discovery)
  • 实现Nacos服务注册时,必须做哪些配置?(服务名,假如是本机服务注册可以省略服务地址)
  • Nacos如何检查服务状态?(通过心跳包实现,服务启动时会定时向nacos发送心跳包-BeatInfo)
  • 服务之间进行服务调用时,使用了什么API?(RestTemplate,用此对象之前要先创建这个对象并交给spring管理)
  • 服务调用过程是怎样的?

远程服务调用实践

  • 为什么要负载均衡?(提高系统的并发处理能力,双管齐下,类似银行的各个营业点)
  • LoadBalancerClient对象的作用是什么?(基于负载均衡算法从注册中心获取服务实例)
  • @LoadBalanced注解作用?(描述RestTemplate对象,让系统底层为RestTemplate对象赋能,对请求过程进行拦截)
  • Ribbon是什么,基于Ribbon可以解决什么问题?(一个负载均衡组件,这个组件中提供一套负载均衡算法)
  • 你了解哪些负载均衡策略?(基于IRule接口去查看,快捷键ctrl+h)
  • 我们如何修改负载均衡策略?(配置文件->例如application.yml,配置类->例如启功类)
  • 为什么使用Feign方式的服务调用?(声明式远程调用,优化结构,简化服务调用过程代码的编写)
  • 如何基于feign方式实现远程服务调用?(依赖-openfeign,配置,feign接口定义)
  • @EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类,告诉底层启动feign starter组件)
  • @FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)
  • 如何理解基于Feign方式的远程服务调用?(底层封装了服务调用过程,明修栈道暗度陈仓)
  • Feign方式如何实现负载均衡?(底层基于ribbon组件实现)
  • Feign接口指向的对象是谁?(代理对象-feign接口的实现类对象)
  •  常用服务发现、服务调用方式有哪些?
  •  这部分内容中你接触到了哪些设计模式呢?(单例,享元,代理,工厂,模板方法,策略,观察者,…)

Nacos配置中心应用实践

  • 什么是配置中心?(存储项目配置信息的一个服务,这个服务可以实现配置的动态发布和更新)
  • 为什么要使用配置中心?(集中管理配置信息,动态发布配置信息,服务自动感知配置)
  • 市场上有哪些主流的配置中心?(Apollo,nacos,……)
  • 配置中心一般都会配置什么内容?(可能会经常变化的配置信息,例如连接池,日志、线程池、限流熔断规则)
  • 什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册地址,配置中心地址)
  • 项目中为什么要定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
  • Nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?(可以从服务的本地内存读取)
  • 微服务应用中客户端如何感知配置中心数据变化?(1.4.x版本的nacos客户端会基于长轮询机制从nacos获取配置信息)
  • 服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,bootstrap.yml,配置单词,格式,配置模型)
  • 你项目中使用的日志规范是什么?(SLF4J~门面模式)
  • 你了解项目中的日志级别吗?(debug,info,warn,error可以基于日志级别控制日志的输出)
  • Nacos配置管理模型的背景?(环境不同配置不同)
  • Nacos配置中的管理模型是怎样的?(namespace>group>service/data-id)
  • Nacos客户端(微服务)是否可以读取共享配置?(可以)

Sentinel 限流应用实践

  • 为什么要进行限流、降级? (系统处理能力有限,可以通过限流方式,保证系统可靠运行,以退为进)
  • 你了解Sentinel限流有哪些算法? (计数器,令牌桶,漏桶,滑动窗口算法~sentinel默认)
  • Sentinel常用限流模式?(直接,关联->保证核心业务,链路->红绿灯)
  • @SentinelResource注解的作用,你用过哪些属性?(在链路限流中描述资源节点,切入点方法)
  • Sentinel常用限流效果有哪些?(快速失败,预热,排队)
  • Sentinel中限流被触发时出现的异常类型是什么?(都是BlockException类型的子类)
  • 如何对限流结果进行处理?(有默认处理方案-DefaultBlockExceptionHandler,也可以自定义.)
  • Sentinel限流的基本原理?(底层对服务请求进行拦截,然后通过流控规则限定对资源访问)

Sentinel 进阶应用实践

  • 如何理解熔断?(可以理解为暂时关闭不稳定的服务,要学会舍得)
  • 如何自定义熔断异常处理规则?(实现BlockExceptionHandler接口)
  • 如何理解热点参数?(频繁访问的数据,系统底层如何判定哪些数据是频繁访问-lru)
  • 系统规则是全局规则吗,常见规则有哪些? (是,响应时间-RT,QPS,CPU,线程数)
  • 授权规则需要我们自己写请求解析类吗?(需要,实现RequestOriginParser接口)

Gateway 应用实践

  • 为什么要使用api网关?(服务保护,统一url访问,统一身份认证,统一跨域设计,。。。)
  • 网关入门实践的步骤? (依赖,配置,启动,服务访问)
  • 网关项目中的负载均衡是如何实现?(底层基于Ribbon实现,可以在RibbonLoadBalancerClient中加断点分析)
  • 说说SpringCloud gateway处理请求的基本流程?(官方,断点)
  • 网关中的谓词对象类型?(GatewayPredicate)
  • 网关中的谓词对象是如何创建的?(谓词工厂)
  • 你在网关中配置过哪些常用谓词?(Path,Method,Before,Query,Header,…)

Gateway 应用进阶实践

  • 网关中的过滤器是如何分类的?(GlobalFilter,GatewayFilter:需要手动配置)
  • 我们是否可以自定义谓词,过滤器对象?(可以,参考官方默认的定义)
  • 网关层面如何基于sentinel实现限流?(有关sentinel的两个依赖,配置,JVM参数)
  • 网关层面的限流类型有哪些?(路由id,API分组)
  • 我们是否可以对限流结果进行自定义处理?(可以)

单点登录系统初步设计及实现

  • 为什么要做单点登录设计?(业务简化,代码复用,不需要每个服务都登录一次)
  • 你知道哪些SSO系统解决方案?(基于用户登录状态信息的存储进行方案设计)
  • 单点登录系统中你的服务是如何设计的,工程结构是怎样的?
  • 项目中使用的连接池什么?(HikariCP)
  • Java中连接池设计需要遵循的数据源规范是谁?(javax.sql.DataSource)
  • 连接池这块你能想到的设计模式有哪些?(单例,享元,桥接,slf4j门面)
  • 如何排除springboot工程中junit4依赖?
  •  SpringBoot工程中如何基于junit4的单元测试?
  • SpringBoot工程中如何基于Junit5进行单元测试?
  • SpringBoot单元测试类应该写在哪个位置?
  • 基于idea的为类自动生成序列化id?

第一步:修改idea中的配置。

 第二步:在User类上按alt+enter,例如:

  •  @Autowired注解描述的Mapper对象有红色波浪线,但运行没有错误,如何去除红色波浪线。

SSO系统中的登录逻辑基本实现

  • UserMapper接口如何交给Spring管理(@Mapper,@MapperScan)
  • 用户业务逻辑对象中你是如何开启事务的?(@Transactional)
  • @Transactional中的readOnly属性默认值是什么?(false,这个值一般应用在非只读事务上)
  • 用户业务逻辑对象中如何开启本地缓存?(@EnableCaching用于开启缓存,@Cacheable用于定义切入点方法)
  • 系统服务(system)工程中事务开启,缓存应用都是基于什么设计思想实现的?(AOP)
  • SpringBoot工程中默认的AOP代理对象是基于什么方式创建的?(CGLIB)
  • 为什么定义RemoteUserService 接口(Feign)?(基于此接口调用远程sso-system服务)
  • sso-auth服务中用户业务数据的获取在哪里?(客户端提交的用户名,sso-system服务提供的数据库数据)
  • 为什么要构建SecurityConfig对象?(配置加密算法,提供认证管理器对象)
  • 为什么要让SecurityConfig类要继承WebSecurityConfigurerAdapter类型?(重写默认的认证规则)
  • 认证过程中使用的密码加密对象是谁?(BCryptPasswordEncoder,不可逆加密对象)
  • 用户登录时,需要从数据库查询哪些信息?(用户信息以及用户的权限信息)
  • 如何基于用户id查询用户权限,你有什么方案?(3种)
  • 单体架构中的用户的状态的存储是如何实现的?(了解,默认是存储到了tomcat的session对象中) 

SSO系统颁发令牌及资源服务实践

  • JWT是什么?(是JSON WEB TOKEN这几个单词的缩写,描述的是web应用的一种令牌格式)
  • JWT有几部分构成?(头:令牌类型,签名算法,负载:允许包含用户登录状态 ,签名:防止令牌被篡改)
  • 为什么要采用JWT令牌?(可以存储用户登录状态信息,避免访问资源时从数据库查询认证信息)
  • 基于Oauth2协议的认证服务器默认的令牌生成策略是什么?(UUID.randomUUID())
  • 认证服务器中常见令牌相关设计存储方案有哪些?(Mysql,Redis,Jwt)
  • 认证服务器对用户进行认证时,客户端提交了哪些关键信息?(username,password,client_id,grant_type,client_secret)
  • 认证服务器完成认证操作后,服务端返回哪些信息?(访问令牌,刷新令牌,令牌类型,作用域,编号)
  • 认证服务器中完成认证业务的关键对象有哪些?(Filter,AutenticationManager,UserDetailService,.)
  • 资源服务器如何设计的认证,授权规则?(三个维度:匿名,登录,授权)
  • 访问令牌与刷新令牌有什么不一样?(客户端是要携带访问令牌访问资源的,刷新令牌是为了再次生成访问令牌)
  • 访问令牌,刷新令牌有有效时长吗?(刷新令牌有效时长一般要大于访问令牌有效时长)

SSO网关,UI工程,日志记录实践

  • 网关服务器在哪里做了负载均衡(lb://)?
  • 为什么网关层面要做跨域设计?(Ajax技术不支持跨域请求,将所有服务的跨域共性提取到网关层面)
  • UI工程中用户端如何提交ajax请求的?(axios,底层ajax对象为XMLHttpRequest)
  • System工程中如何记录用户行为日志的?(通过异步方式将日志写到数据库,@EnableAsync,@Async)
  • 系统工程中的用户行为日志来自哪里?(资源服务器,此服务器记录用户访问资源的一些信息)
  • 资源服务器通过什么样的方式获取用户行为信息?(AOP)
  • 如何在非@Controller对象(例如切面,工具类)中获取请求对象?(RequestContextHolder)
  • 如何在资源服务器中获取登录用户对象?(借助SecurityContextHolder对象)
  • 我们如何通过连接点对象(JoinPoint)获取的方法签名(MethodSignature)?
  • 我们在资源工程中如何应用Feign组件的?(添加依赖,定义远程日志服务接口,启动类开启feign应用)
  • Feign是基于什么方式进行远程服务调用的?(声明式-声明要调用服务以及url资源-restful 风格,)
     
举报

相关推荐

0 条评论