微服务面试题
# 微服务面试题
1、什么是微服务?
答:单个轻量级服务一般为一个单独微服务,微服务讲究的是 专注某个功能的实现,比如登录系统只专注于用户登录方面功能的实现,讲究的是职责单一,开箱即用,可以独立运行。微服务架构系统是一个分布式的系统,按照业务进行划分服务单元模块,解决单个系统的不足,满足越来越复杂的业务需求。
马丁福勒(Martin Fowler):就目前而言,对于微服务业界并没有一个统一的、标准的定义。但通常而言,微服务架构是一种架构模式或者说是架构风格,它提倡将单一应用程序划分成一组小的服务。每个服务运行在其独立的自己的进程中服务之间相互配合、相互协调,为用户提供最终价值。服务之间采用轻量级通信。每个服务都围绕具体业务进行构建,并能够独立部署到生产环境等。另外应尽量避免统一的、集中的服务管理机制。
通俗的来讲:
微服务就是一个独立的职责单一的服务应用程序。在 intellij idea 工具里面就是用maven开发的一个个独立的module,具体就是使用springboot 开发的一个小的模块,处理单一专业的业务逻辑,一个模块只做一个事情。
微服务强调的是服务大小,关注的是某一个点,具体解决某一个问题/落地对应的一个服务应用,可以看做是idea 里面一个 module。
比如你去医院:你的牙齿不舒服,那么你就去牙科。你的头疼,那么你就去脑科。一个个的科室,就是一个微服务,一个功能就是一个服务。
2、微服务之间如何独立通讯的?
答: 同步通信:.Net5通过 RPC GRPC 远程过程调用或者通过 REST 接口json调用 等。
异步:消息队列,如:RabbitMq、ActiveM、Kafka 等。
3、什么是熔断?什么是服务降级?
答:服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。
4、微服务的优缺点是什么?说下你在项目中碰到的坑。
答:优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模降低。在开发中,不需要了解多有业务,只专注于当前功能,便利集中,功能小而精。微服务一个功能受损,对其他功能影响并不是太大,可以快速定位问题。微服务只专注于当前业务逻辑代码,不会和 html、css 或其他界面进行混合。可以灵活搭配技术,独立性比较舒服。
缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调用压力增大,运维工程师压力增大,人力资源增多,系统依赖增强,数据一致性,性能监控。
5、你所知道微服务的技术栈有哪些?列举一二。
答:微服务条目 落地技术 服务开发 AspnetCore、.Net5、.Net6 服务配置与管理 携程公司的Apollo、社区的的Consul等 服务注册与发现 Eurka、Consul、Zookeeper等 服务调用 Rest(服务通信)、RPC、GRpc 服务熔断器 Polly、Envoy等 负载均衡 Nginx等 服务接口调用(客户端简化工具) WebAPI等 消息队列 Kafka、RabbitMQ、ActiveMQ等 服务配置中心管理 Apollo、Chef等 服务路由(API网关) Ocelot等 服务监控 Zabbix,Nagios,Skywalking等 全链路追踪 Zipkin,Brave,Skywalking等 服务部署 Docker,OpenStack,Kubernetes等 数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit,kafka等发送接收消息) 事件消息总线CAP
6、什么是微服务架构?
答:微服务架构 就是 对微服务进行管理整合应用的。微服务架构 依赖于 微服务,是在微服务基础之上的。
例如:上面已经列举了什么是微服务。在医院里,每一个科室都是一个独立的微服务,那么 这个医院 就是 一个大型的微服务架构,就类似 院长 可以 对下面的 科室进行管理。微服务架构主要就是这种功能。
7、设计微服务的最佳实践是什么?
答:
- 为每个微服务分开数据存储
- 将代码保持在类似的成熟度等级上
- 为每个微服务进行单独的构建
- 部署到容器中
- 将服务器视为无状态的
8、单体应用、SOA 和微服务架构有什么区别?**
答:
- 单体应用类似于一个大容器,其中程序的所有组件都被组装在一起并紧密包装。
- SOA是一组相互通信的服务。通信可以涉及简单的数据传送,也可以涉及两个或多个协调某些活动的服务。
- 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。
9、在使用微服务架构时,你面临的挑战是什么?**
答:
开发较小的微服务听起来很容易,但在开发时会经常遇到一些挑战。
- 自动化组件:难以自动化,因为有许多较小的组件。对于每个组件,都必须采取构建、发布和监控的步骤。
- 可感知性:将大量组件维持在一起会带来难以部署、维护、监控和识别的问题。它需要在所有组件周围具有很好的感知能力。
- 配置管理:有时在各种环境中维护组件的配置会很困难。
- 调试:很难找到与产生的错误相关的每一项服务。维护一个集中式的日志和控制面板对调试问题至关重要。
10、为什么需要域驱动设计(DDD)?
答:
- 映射领域
- 降低复杂性
- 可测试性
- 可维护性
- 知识丰富的设计
- 将业务和服务结合在一起
- 上下文集中
- 通用语言
11、你对分布式事务的理解?
答:
分布式事务是单个事件导致两个或多个不能以原子方式提交的单独数据源的突变的情况。在微服务的世界中,它变得更加复杂,因为每个服务都是一个工作单元,并且在大多数情况下,多个服务必须协同工作才能使业务成功。
12、什么是幂等性(Idempotence)及用在那里?
幂等性是能够以同样的方式做两次,而最终结果将保持不变,就好像它只做了一次的特性。
用法:在远程服务或数据源中使用幂等性,以便当它多次接收指令时,只处理一次。
13、什么是有界上下文?
答:有界上下文是领域驱动设计的核心模式。 DDD 战略设计部门的重点是处理大型模型和团队。 DDD 通过将大型模型划分为不同的有界上下文并明确其相互关系来处理大型模型。
14、容器在微服务中的用途是什么?
答:容器是管理基于微服务的程序以便单独开发和部署它们的好方法*。*你可以将微服务封装在容器镜像及其依赖项中,然后可以用它来滚动开发按需实例的微服务而无需任何额外的工作。
15、什么是金丝雀发布(Canary Releasing)?
答:金丝雀发布是一种降低在生产中引入新版本软件风险的技术。通过在将更改传递给整个基础架构之前将更改缓慢地推广到一小部分用户来完成的。