微服务面试题
基础部分
1、为什么需要分布式架构?
(1)增大系统容量。当业务量越来越大时,一台机器容量已经无法满足了,我们就需要多台机器。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。
(2)加强系统可用。当所有业务都部署在一台机器上的时候,一旦机器出故障就会导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
2、分布式架构有什么优势?
- 实现更大数据量的存储。
- 可以提高系统的高可用性。
- 提高系统的可重用性。
- 可更好提高系统的性能。
3、分布式架构有什么劣势?
采用任何技术方案都是“按下葫芦浮起瓢”,都是有得有失,分布式架构也有劣势,具体如下:
- 会增加架构设计的难度。
- 部署和维护的成本也会加大。
分布式系统架构的难点在于系统设计,以及管理和运维。所以,分布式架构解决了“单
点”和“性能容量”的问题,但却新增了一堆问题。
4、分布式架构设计有什么难点?
- 异构系统的不标准问题?(软件、协议、格式、运维的不标准)
- 系统架构中的服务依赖问题?(多米诺骨牌效性,一个服务宕机)
- 故障发生的概率更大?(故障恢复时间、影响面)
- 多层架构的运维复杂度更大?(基础层-硬件、平台层-中间件、应用层-业务、接入层-网关)
5、分布式架构设计的目的?
- 提高整体架构的吞吐量,服务更多的并发和流量。
- 提高系统的稳定性,让系统的可用性更高。
6、如何基于架构设计提高其性能?
- 缓存系统。加入缓存系统,可以有效地提高系统的访问能力。从前端的浏览器,到网络,再到后端的服务,底层的数据库、文件系统、硬盘和CPU,全都有缓存,这是提高快速访问能力最有效的手段。
- 负载均衡系统。负载均衡是做水平扩展的关键技术。其可以用多台机器来共同分担一部分流量请求。
- 异步调用。异步系统主要通过消息队列来对请求做排队处理,这样可以把前端的请求的峰值给“削平”了,而后端通过自己能够处理的速度来处理请求。
- 数据分区和数据镜像。数据分区是把数据按一定的方式分成多个区(比如通过地理位置),不同的数据区来分担不同区的流量。
7、如何基于架构提高系统的稳定性?
- 服务拆分,主要有两个目的:一是为了隔离故障,二是为了重用服务模块。
- 服务冗余,可以去除单点故障,并可以支持服务的弹性伸缩,以及故障迁移。
- 限流降级,当系统实在扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。
- 高可用架构,从冗余架构的角度来保障可用性。比如,灾备多活,或是数据可以在其中复制保持一致性的集群。
- 高可用运维,指的是DevOps中的CI(持续集成)/CD(持续部署)。一个良好的运维应做了足够的自动化测试,做了相应的灰度发布,以及对线上系统的自动化控制。这样,可以做到“计划内”或是“非计划内”的宕机事件的时长最短。
8、分布式架构有哪些关键技术?
- 服务治理。服务治理的最大意义是需要把服务间的依赖关系、服务调用链,以及关键的服务给梳理出来,并对这些服务进行性能和可用性方面的管理。
- 架构管理。基于服务所形成的架构需要有架构版本管理、整体架构的生命周期管理,以及对服务的编排、聚合、事务处理等服务调度功能。
- DevOps。分布式系统可以更为快速地更新服务,但是对于服务的测试和部署都会是挑战。所以,还需要DevOps的全流程,其中包括环境构建、持续集成、持续部署等。 自动化运维。有了DevOps后,我们就可以对服务进行自动伸缩、故障迁移、配置管理、状态管理等 一系列的自动化运维技术了。
- 资源调度管理。应用层的自动化运维需要基础层的调度支持,也就是云计算IaaS层的计算、存储、 网络等资源调度、隔离和管理。
- 整体架构监控。如果没有一个好的监控系统,那么自动化运维和资源调度管理只可能成为一个泡影, 因为监控系统是你的眼睛。没有眼睛,没有数据,就无法进行高效的运维。所以说,监控是非常重要 的部分。这里的监控需要对三层系统(应用层、中间件层、基础层)进行监控。
- 流量控制。最后是我们的流量控制,负载均衡、服务路由、熔断、降级、限流等和流量相关的调度都 会在这里,包括灰度发布之类的功能也在这里。
9、能说说你对CAP的理解吗?
- 分布式系统设计中的CAP指的是什么:
C:一致性(Consistency),每次访问都能获得最新数据但可能会出现错误的响应。
A:可用性(Availability),每次访问都能收到非错响应,但不能保证获取最新数据。
P:分区容错性(Partition Tolerance),在任意分区网络故障的情况下系统仍能继续运行。 - 分布式系统中的CAP设计不可能三者都满足。
在一个分布式系统中,首先网络是不可靠的,我们的系统就需要支持分区容错,然后需要在软件可用性和一致性之间做出取舍,也就是鱼和熊掌不能兼得。
CP:一致性和分区容错性,等待分区节点的响应可能会导致延时错误。如果你的业务需求需要原子读写,CP 是一个不错的选择。
AP:可用性与分区容错性,响应节点上可用数据的最近版本可能并不是最新的。当分区解析完后,写入(操作)可能需要一些时间来传播。如果业务需求允许最终一致性,或当有外部故障时要求系统继续运行,AP 是一个不错的选择。