面试题
如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?
面试官心理分析
服务治理,这个问题如果问你,其实就是看看你有没有服务治理的思想,因为这个是做过复杂微服务的人肯定会遇到的一个问题。
服务降级,这个是涉及到复杂分布式系统中必备的一个话题,因为分布式系统互相来回调用,任何一个系统故障了,你不降级,直接就全盘崩溃?那就太坑爹了吧。
失败重试,分布式系统中网络请求如此频繁,要是因为网络问题不小心失败了一次,是不是要重试?
超时重试,跟上面一样,如果不小心网络慢一点,超时了,如何重试?
面试题剖析
服务治理
一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成。那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的清楚了,因为服务实在太多了,可能几百个甚至几千个服务。
那就需要基于 dubbo 做的分布式系统中,对各个服务之间的调用自动记录下来,然后自动将各个服务之间的依赖关系和调用链路生成出来,做成一张图,显示出来,大家才可以看到对吧。
需要自动统计各个接口和服务之间的调用次数以及访问延时,而且要分成两个级别。
一个级别是接口粒度,就是每个服务的每个接口每天被调用多少次,TP50/TP90/TP99,三个档次的请求延时分别是多少; 第二个级别是从源头入口开始,一个完整的请求链路经过几十个服务之后,完成一次请求,每天全链路走多少次,全链路请求延时的 TP50/TP90/TP99,分别是多少。 这些东西都搞定了之后,后面才可以来看当前系统的压力主要在哪里,如何来扩容和优化啊。
其它
服务分层(避免循环依赖)
服务降级
比如说服务 A 调用服务 B,结果服务 B 挂掉了,服务 A 重试几次调用服务 B,还是不行,那么直接降级,走一个备用的逻辑,给用户返回响应。
举个栗子,我们有接口 HelloService 。 HelloServiceImpl 有该接口的具体实现。
往期回顾:
【Java问答学堂】1期 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?
【Java问答学堂】3期 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?
【Java问答学堂】4期 如何保证消息的可靠性传输?(如何处理消息丢失的问题?)
【Java问答学堂】6期 如何解决消息队列的延时以及过期失效问题?
【Java问答学堂】7期 如果让你写一个消息队列,该如何进行架构设计?
【Java问答学堂】8期 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)?
【Java问答学堂】9期 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?
【Java问答学堂】10期 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
【Java问答学堂】11期 es 生产集群的部署架构是什么?每个索引的数据量大概有多少?
【Java问答学堂】12期 项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?
【Java问答学堂】13期 redis 和 memcached 有什么区别?
【Java问答学堂】14期 redis 都有哪些数据类型?分别在哪些场景下使用比较合适?
【Java问答学堂】15期redis 的过期策略都有哪些?内存淘汰机制都有哪些?
【Java问答学堂】16期如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍
Kafka、ActiveMQ、RabbitMQ、RocketMQ的区别?【Java问答学堂】19期
如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?【Java问答学堂】21期
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?【Java问答学堂】22期
如何解决消息队列的延时以及过期失效问题?【Java问答学堂】24期
如果让你写一个消息队列,该如何进行架构设计?【Java问答学堂】25期
ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?【Java问答学堂】26期
ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?【Java问答学堂】27期
ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?【Java问答学堂】28期
ES 生产集群的部署架构是什么?每个索引的数据量大概有多少?【Java问答学堂】29期
项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?【Java问答学堂】30期
Redis 和 Memcached 的区别?Redis 的线程模型是什么?【Java问答学堂】31期
Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?【Java问答学堂】32期
Redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?【Java问答】33期
如何保证 redis 的高并发和高可用?【Java问答】34期
Redis 集群模式的工作原理能说一下么?【Java问答】36期
了解什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?【Java问答】37期
Redis 的并发竞争问题是什么?如何解决这个问题?【Java问答】39期
生产环境中的 Redis 是怎么部署的?【Java问答】40期
为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?【Java问答】41期
如何设计才可以让系统从未分库分表动态切换到分库分表上?【Java问答】42期
你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?【Java问答】44期
为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗?【Java问答学堂】46期
dubbo 的工作原理?注册中心挂了的问题?说说一次 rpc 请求的流程?【Java问答】47期
dubbo 支持的通信协议?有哪些序列化协议?说下 Hessian 的数据结构?【Java问答】48期
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。