微服务架构面试题
目录
三、你的项目中是怎么保证微服务敏捷开发的?微服务的链路追踪、持续集成、AB发布要怎么做?
一、能说下HTTP和RPC的区别吗
严格来讲,HTTP和RPC不是一个层面的东西
HTTP(Hypertext TransferProtocol)是一种应用层协议,主要强调的是网络通信;
RPC(RemoteProcedureCall,远程过程调用)是一种用于分布式系统之间通信的协议,强调的是服务之间的远程调用。
一些RPC框架比如gRPC,底层传输协议其实也是用的HTTP2,包括Dubbo3,也兼容了gRPC,使用了HTTP2作为传输层的协议。
二、为什么CAP原则最多只能同时满足其中两个?
假设有一个分布式数据库,分布在两个数据中心A和B。如果A和B之间的网络连接断开:
如果我们选择保证一致性(C)和分区容错性(P),那么我们必须让至少一个数据中心停止接受写操作,以避免数据不一致,这就牺牲了可用性(A)。
如果我们选择保证可用性(A)和分区容错性(P),那么两个数据中心都可以继续独立工作,但可能会导致数据不一致,因此牺牲了一致性(C)。
三、你的项目中是怎么保证微服务敏捷开发的?微服务的链路追踪、持续集成、AB发布要怎么做?
开发运维一体化。
敏捷开发:目的就是为了提高团队的交付效率,快速迭代,快速试错。
每个月固定发布新版本,以分支的形式保存到代码仓库中。快速入职。任务面板、站立会议。团队人员灵活流动,同时形成各个专家代表。测试环境-生产环境-》开发测试环境SIT、集成测试环境、压测环境STR、预投产环境、生产环境PRD。文档优先。晨会、周会、需求拆分会。
链路追踪:1、基于日志。形成全局事务ID,落地到日志文件。filebeat-logstash-Elasticsearch形成大型报表。2、基于MQ,往往需要架构支持。经过流式计算形成一些可视化的结果。
持续集成: SpringBootmaven pom->build -> shell;Jenkins。
AB发布:1、蓝绿发布、红黑发布老版本和新版本是同时存在的。2、灰度发布、金丝雀发布。
四、什么是服务雪崩?什么是服务限流?
1.当服务A调用服务B,服务B调用C,此时大量请求突然请求服务A,假如服务A本身能抗住这些请求,但是如果服务C抗不住,导致服务C请求堆积,从而服务B请求堆积,从而服务A不可用,这就是服务雪崩,解决方式就是服务降级和服务熔断。
2,服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,在秒杀中,限流是非常重要的。
五、什么是服务熔断?什么是服务降级?区别是什么?
1.服务熔断是指,当服务A调用的某个服务B不可用时,上游服务A为了保证自己不受影响,从而不再调用服务B,直接返回一个结果,减轻服务A和服务B的压力,直到服务B恢复。
2.服务降级是指,当发现系统压力过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级。
相同点:
1.都是为了防止系统崩溃
2.都让用户体验到某些功能暂时不可用
不同点:熔断是下游服务故障触发的,降级是为了降低系统负载
六、高并发场景下如何实现系统限流?
限流一般需要结合容量规划和压测来进行。当外部请求接近或者达到系统的最大阈值时,触发限流,采取其他的手段进行降级,保护系统不被压垮。常见的降级策略包括延迟处理、拒绝服务、随机拒绝等。
计数器法:
1.将时间划分为固定的窗口大小,例如1s
2.在窗口时间段内,每来一个请求,对计数器加1。
3.当计数器达到设定限制后,该窗口时间内的之后的请求都被丢弃处理。
4.该窗口时间结束后,计数器清零,从新开始计数。
滑动窗口计数法:
1.将时间划分为细粒度的区间,每个区间维持一个计数器,每进入一个请求则将计数器加一。
2.多个区间组成一个时间窗口,每流逝一个区间时间后,则抛弃最老的一个区间,纳入新区间。
3.若当前窗口的区间计数器总和超过设定的限制数量,则本窗口内的后续请求都被丢弃。
漏桶算法:如果外部请求超出当前阈值,则会在容易里积蓄,一直到溢出,系统并不关心溢出的流量。从出口处限制请求速率,并不存在计数器法的临界问题,请求曲线始终是平滑的。无法应对突发流量,相当于一个空桶+固定处理线程
令牌桶算法:假设一个大小恒定的桶,这个桶的容量和设定的阈值有关,桶里放着很多令牌,通过一个固定的速率,往里边放入令牌,如果桶满了,就把令牌丢掉,最后桶中可以保存的最大令牌数永远不会超过桶的大小。当有请求进入时,就尝试从桶里取走一个令牌,如果桶里是空的,那么这个请求就会被拒绝。
更多推荐
所有评论(0)