面试专区|【52道微服务架构高频题整理(附答案背诵版)】

简述什么是微服务?

微服务是一种软件架构风格,它将应用程序拆分成一系列小型、独立的服务,每个服务都运行在其自己的进程中,通过轻量级通信机制进行通信。每个服务都具有明确的业务能力,并且可以独立开发、测试、部署和扩展。微服务架构的核心思想是将应用程序分解为多个小型服务,每个服务都具有独立的功能和责任。每个服务都可以独立地开发、测试、部署和扩展,从而提高了应用程序的可维护性、可扩展性和灵活性。

简述微服务的优缺点 ?

微服务的优点主要包括:

  1. 独立性:每个微服务都是独立的、可独立部署和扩展的。
  2. 轻量级通信:微服务之间通过轻量级通信机制进行通信,例如基于HTTP的RESTful API或者消息队列等。
  3. 单一职责:每个微服务都专注于特定的业务能力,具有明确的职责和边界。
  4. 松耦合:微服务之间的依赖关系尽量减少,每个微服务都可以独立地运行和更新。
  5. 灵活性:微服务架构使得系统更加灵活,可以根据实际需求进行灵活的组合和使用,提高了系统的可维护性和可重用性。
  6. 每个服务可以独立使用数据库:每个服务可以使用自己的数据库,这使得每个服务都可以根据其业务需求独立地存储和检索数据。
  7. 开发体验好:由于每个服务都是独立的,开发人员只需要关注自己的业务领域,这使得开发更加快速和高效。
  8. 按需扩容:由于每个服务都可以独立地进行部署和扩展,因此可以根据需求进行灵活的扩容。

微服务的缺点主要包括:

  1. 处理故障难度高:由于微服务是分布式系统,故障的处理可能会更加复杂。例如,当某个服务出现故障时,需要确定故障的原因并进行修复,这可能需要跨多个服务进行调试和排查。
  2. 部署工作量大:由于每个服务都需要进行独立的部署,因此部署的工作量可能会比单体应用程序要大得多。
  3. 测试复杂度高:由于微服务之间存在复杂的依赖关系,因此测试的复杂度可能会比单体应用程序要高。
  4. 运营成本增加:由于每个服务都需要进行独立的监控和管理,因此运营的成本可能会比单体应用程序要高。
  5. 发布风险高:由于每个服务都可能有自己的发布计划和时间表,因此可能会出现不同服务的版本不一致的情况,这可能会导致一些潜在的风险。
  6. 分布性系统问题:由于微服务是分布式系统,因此可能会面临一些分布式系统的常见问题,例如网络延迟、服务调用失败、系统容量规划等。

简述分布式和微服务的区别 ?

分布式和微服务虽然都是一种架构风格,但它们有着不同的设计和部署特点。

微服务架构是一种将应用程序拆分成多个小型、独立的服务,每个服务都运行在其自己的进程中,具有明确的业务能力,并且可以独立开发、测试、部署和扩展。微服务架构的核心思想是将应用程序分解为多个小型服务,每个服务都具有独立的功能和责任。每个服务都可以独立地开发、测试、部署和扩展,从而提高了应用程序的可维护性、可扩展性和灵活性。

分布式系统则是将若干独立计算机的集合,这些计算机对用户来说就像单个相关系统。分布式系统常用于处理大型应用程序,将应用程序的不同部分部署在不同的计算机上,并通过网络通信进行数据交互。分布式系统可以处理大量的并发用户请求,并且具有较高的可靠性和容错性。

总的来说,分布式系统和微服务架构在设计和部署上存在明显的差异。微服务架构更侧重于服务的拆分和独立部署,而分布式系统更侧重于不同计算机的协作和共同工作。

简述微服务的服务怎么划分原则 ?

微服务的服务划分原则主要包括以下几点:

  1. 单一职责原则:每个微服务应该只负责一个特定的业务功能。单一职责原则有助于保持服务的聚焦和简单,便于独立开发和维护。如果一个服务承担了过多的职责,它可能会变得臃肿和复杂,从而影响到整个系统的健壮性和可维护性。
  2. 业务领域驱动划分:根据应用程序的业务需求和领域知识来对服务进行划分。这通常需要与业务专家和开发人员紧密合作,共同识别和定义各个领域的边界。通过领域驱动的划分,可以确保各个微服务的业务逻辑紧密联系在一起,便于维护和拓展。
  3. 层次结构清晰:微服务要有层次结构,不能形成网状,应该要有比较清晰的层次划分,分为高、低层,每层可以有多个服务,高层单向调用低层,同一层级之间可互调。
  4. 独立性:每个微服务都应该是独立的、可独立部署和扩展的。每个服务都应该具有自己的数据库、通信机制和身份验证等独立的功能模块。
  5. 可扩展性:每个微服务都应该能够独立地进行扩展,例如增加服务器、数据库等资源,以满足不断增长的用户需求。
  6. 松耦合:微服务之间的依赖关系应该尽量减少,每个微服务都可以独立地运行和更新。这可以提高系统的容错性和可维护性。
  7. 独立部署和扩展:每个微服务都应该能够独立地进行部署和扩展,以满足不同用户的需求和服务质量要求。
  8. 服务间通信简单:微服务之间的通信机制应该简单、可靠和高效,例如使用RESTful API或者消息队列等。
  9. 数据一致性:在分布式系统中,数据一致性是一个重要的问题。微服务架构需要处理不同服务之间的数据一致性问题,例如使用分布式事务或者基于消息的异步通信等。
  10. 日志和监控:每个微服务都应该具有独立的日志和监控机制,以便及时发现和解决问题。

总之,微服务的服务划分原则是确保每个微服务都具有清晰的责任和边界,便于独立开发、部署、扩展和维护。同时,要确保整个系统的松耦合和高内聚性,以提高系统的可靠性和可维护性。

请列举微服务设计原则 ?

微服务设计原则主要包括以下几点:

  1. 独立性:每个微服务都应该是独立的、可独立部署和扩展的。这意味着每个微服务都应该具有自己的数据库、通信机制和身份验证等独立的功能模块。
  2. 单一职责原则:每个微服务应该只负责一个特定的业务功能。这有助于保持服务的聚焦和简单,便于独立开发和维护。
  3. 无状态性:每个微服务不应该依赖于外部状态,例如其他服务的状态或者全局状态。如果需要外部状态,应该通过API调用其他服务或者使用缓存来获取。
  4. 轻量级通信:微服务之间应该使用轻量级的通信机制进行通信,例如基于HTTP的RESTful API或者消息队列等。这可以提高通信的灵活性和可扩展性。
  5. 边界明确:每个微服务的边界应该明确,具有清晰的职责和范围。这有助于确保服务的独立性和可维护性。
  6. 高内聚性:每个微服务的内部功能应该紧密联系在一起,共同实现一个特定的业务功能。这有助于保持服务的内聚性和可维护性。
  7. 松耦合:微服务之间的依赖关系应该尽量减少,每个微服务都可以独立地运行和更新。这可以提高系统的容错性和可维护性。
  8. 独立部署和扩展:每个微服务都应该能够独立地进行部署和扩展,以满足不同用户的需求和服务质量要求。
  9. 高度可配置性:每个微服务都应该具有高度可配置性,以便根据实际需求进行灵活的配置和调整。
  10. 安全性:每个微服务都应该具有必要的安全措施,例如身份验证、授权、数据加密等,以确保数据的安全性和隐私保护。

总之,微服务设计原则是确保每个微服务都具有清晰的责任和边界,便于独立开发、部署、扩展和维护。同时,要确保整个系统的松耦合和高内聚性,以提高系统的可靠性和可维护性。

简述微服务之间是如何通讯的?

微服务之间可以通过不同的通信方式进行通信,包括同步通信和异步通信。

同步通信是指微服务之间通过请求-响应的方式进行通信,例如RESTful API和RPC。在同步通信中,请求方需要等待响应方的返回结果,因此可靠性较高,但可能会出现请求排队、线程阻塞等问题,从而影响系统的响应速度和并发性能。

异步通信是指微服务之间通过消息队列进行异步通信,例如Kafka和RabbitMQ。在异步通信中,发送方向消息队列发送消息,接收方从消息队列中消费消息,消息传输以异步的方式进行,不需要等待接收方的响应。由于解耦性高,消息队列还可以支持发布-订阅模式,消息得以广播到多个服务中,助于构建高可伸缩的系统。不过异步通信也可能导致延迟较高,以及可靠性和容错性较差等问题。

在微服务架构中,通常会根据实际需求选择合适的通信方式。

简述微服务通信协议选择的方式以及考虑因素 ?

微服务通信协议的选择方式以及考虑因素主要包括以下几点:

  1. 性能:性能是服务间通信协议最重要的衡量标准之一。在分布式环境下,服务间通信协议的性能直接影响着系统的整体性能。一些常见的性能指标包括延迟、吞吐量和并发性。因此,在选择通信协议时,需要充分考虑这些性能指标,选择能够满足系统需求的通信协议。
  2. 可靠性:可靠性是指通信协议在传输数据时的可靠性。在微服务架构中,由于服务之间是相互独立的,因此需要保证通信协议的可靠性,以确保数据传输的完整性和准确性。一些常见的可靠性措施包括数据校验、重试机制和容错处理等。
  3. 易用性:易用性是指通信协议的易用程度,包括开发难度、调试和维护的便利性等。在选择通信协议时,需要考虑开发人员的技术水平和经验,选择易于理解和使用的通信协议。
  4. 可扩展性:可扩展性是指通信协议的可扩展性,包括对不同服务之间通信需求的适应能力、对未来技术发展的适应性等。在选择通信协议时,需要考虑系统的扩展需求,选择具有可扩展性的通信协议。
  5. 安全性:安全性是指通信协议的安全性,包括数据传输的加密、身份验证和授权等。在选择通信协议时,需要考虑系统的安全性需求,选择具有安全性的通信协议,以保护数据的安全性和隐私性。

综上所述,微服务通信协议的选择需要结合实际需求和系统特点,综合考虑性能、可靠性、易用性、可扩展性和安全性等因素,以选择最适合的通信协议。

请简述微服务中各组件的作用 ?

微服务中的各组件及其作用如下:

  1. 服务注册中心:这是微服务架构的核心组件,它负责服务的注册和状态维护。通常采用心跳机制,以确保其持有的服务节点列表都是可用的。
  2. 负载均衡器:这个组件通过服务名在注册中心查询该服务拥有哪些可用节点,然后注册中心返回可用节点列表给服务调用者。服务调用者内置负载均衡器,根据负载均衡策略,选择可用节点列表中的服务进行服务调用。
  3. 服务通信组件:这些组件负责实现服务间的调用。它们通常采用轻量级通信协议,如HTTP RESTful风格,并且可以使用Feign和Restemplate等API进行实现。
  4. 服务网关:这是微服务架构中的对外统一调用地址,对内部进行封装。它提供对外的统一调用地址,对内部进行封装,并具有API网关的作用。它还可以提供用户认证与授权、限流和熔断等功能。
  5. 统一配置组件:这是一种基础设施,用于全局的配置,统一管理不同服务的配置。

简述什么是服务注册与发现 ?

服务注册与发现是微服务架构中的重要概念,它们帮助实现服务的动态发现和调用。

服务注册是指将服务实例的信息注册到服务注册中心。在微服务架构中,每个服务都是独立运行的,并通过服务注册中心来管理和调用。当一个服务实例启动时,它会向服务注册中心注册自己的信息,包括服务名称、IP地址、端口号等。

服务发现是指客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表。客户端可以通过查询服务注册表来获取需要调用的服务的相关信息,从而实现服务之间的通信。

服务注册与发现的作用是解耦了服务之间的直接依赖关系,使得服务之间可以动态地发现和调用。通过服务注册,可以实现服务的高可用性和负载均衡,当某个服务实例不可用时,可以自动剔除或替换,从而保证整个系统的稳定性和可靠性。同时,服务注册还能提供服务的版本管理、动态扩缩容等功能,为微服务架构带来更大的灵活性和可扩展性。

在微服务架构中,常见的服务注册与发现机制包括Eureka、Consul和Zookeeper等。其中,Eureka是Spring Cloud的默认选择,每个服务实例在启动时都会向Eureka服务器注册自己的信息,Eureka服务器会维护一个服务注册表,用于保存所有已注册的服务实例信息。其他服务可以通过查询这个注册表来获取需要调用的服务的相关信息。

请列举常用的服务注册发现的组件 ?

常用的服务注册发现组件包括:

  1. Consul:Consul是一个开源的服务网络解决方案,提供了完整的服务发现、配置和分段功能。它是一个轻量级的解决方案,可以跨平台和跨云使用。
  2. Eureka:Eureka是Netflix开源的一个服务注册和发现框架,用于在分布式系统中管理和发现微服务。Eureka采用了基于HTTP的RESTful API的设计,使得它很容易集成到Spring Cloud生态系统中。
  3. ZooKeeper:ZooKeeper是一个分布式协调服务,提供了基于名称的注册和发现服务。它可以帮助开发人员构建分布式系统中的服务注册和发现解决方案。
  4. etcd:etcd是一个高可用的键值存储系统,用于在分布式系统中管理和发现微服务。etcd提供了基于HTTP的RESTful API,并采用了Raft协议来保证系统的可靠性和一致性。
  5. Nacos:Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了一站式的服务发现和配置管理功能,支持配置管理和服务发现。

这些服务注册发现组件可以帮助开发人员构建高可用、可扩展的微服务架构。不同的组件具有不同的特性和适用场景,开发人员可以根据具体需求选择合适的组件。

简述什么是服务调用 ?

服务调用是指一个软件组件通过调用另一个软件组件提供的服务来实现某种功能。在分布式系统中,服务调用是一种重要的通信方式,它通过网络请求实现组件之间的互相调用。在服务调用的过程中,客户端发起请求,服务端接收请求并处理,然后将处理结果返回给客户端。通过合理的设计和实现,服务调用可以提高系统的可用性、扩展性和灵活性。在使用服务调用时,需要注意网络通信、安全性、异常处理和服务注册与发现等问题,以保证系统的稳定性和可靠性。

请列举常用的服务调用组件 ?

常用的服务调用组件包括:

  1. RestTemplate:在Spring Cloud中,RestTemplate是用于进行HTTP请求的模板类,可以用来调用RESTful风格的Web服务。
  2. Feign:Feign是一个声明式的Web Service客户端,它使得编写HTTP客户端变得更简单。Feign会自动根据接口定义来生成HTTP请求代码。
  3. OpenFeign:OpenFeign是Feign的继任者,它提供了更强大的功能,例如负载均衡和服务发现等。
  4. Dubbo:Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了远程过程调用(RPC)功能。Dubbo可以用来调用其他服务,并提供了负载均衡、容错和路由等功能。
  5. gRPC:gRPC是一个高性能、开源的RPC框架,它提供了面向接口的通信、双向流式传输和头部压缩等功能。gRPC支持多种语言,包括Java、Go和C++等。

这些服务调用组件可以帮助开发人员实现分布式系统中的服务间通信和调用。不同的组件具有不同的特性和适用场景,开发人员可以根据具体需求选择合适的组件。

简述什么服务降级 ?

服务降级是指在面对系统负载过高、资源不足或外部依赖故障等异常情况下,通过临时屏蔽某些功能或改变服务行为,以保证核心功能的可用性和性能稳定性的一种策略。服务降级的目的是在极端或异常情况下提供有限但可靠的服务,而不是完全失败或导致系统崩溃。服务降级可以在多个层面进行,包括前端、业务逻辑和数据访问层。前端降级主要通过控制用户界面上的展示和交互来减少对后端服务的请求,例如在高负载时暂时去除某些耗时的图表或功能按钮,只展示核心内容,以提高用户体验。业务逻辑降级则是在服务层面进行降级,即在业务逻辑中根据当前系统状态或用户需求进行判断,决定是否执行某些非关键的功能或采取替代性方案,例如可以减少搜索的结果数目、缓存数据、限制操作频率等。数据访问降级则是在数据库或其他外部依赖出现故障或性能问题时,使用缓存、降低查询精确度或返回默认值等方式进行数据访问降级,以保证系统的可用性,尽管可能牺牲了一些实时性或准确性。

简述什么熔断机制 ?

熔断机制是一种在分布式系统中常用的容错措施,它能够自动发现故障并隔离故障服务,以保证系统可用性。当某个服务单元发生故障时,该服务单元会向熔断器发出警报,熔断器判断出故障服务,并且立即将故障服务与其他服务隔离,从而防止故障服务影响到整个系统。熔断机制的具体实现方式因系统而异,但通常包括设置一个熔断价格,使合约买卖报价在一段时间内只能在这一价格范围内交易,或者通过轻量级通信机制实现服务之间的调用。在2020年3月9日的纽约股市暴跌事件中,熔断机制被触发并恢复交易后,股市跌幅一度有所收窄。

简述熔断有哪几种状态 ?

熔断有三种状态:

  1. 关闭状态(Closed):所有请求都可以正常通过。
  2. 打开状态(Open):所有请求都会被降级处理,即请求不能通过。
  3. 半开状态(HalfOpen):允许一部分请求通过,以便检测服务是否恢复正常。如果在指定时间内,这部分请求都是健康的,那么断路器就会完全关闭;否则,断路器会继续保持打开状态。

由于内容太多,更多内容以链接形势给大家,点击进去就是答案了

16. 解释服务熔断原理(断路器的原理) ?

17. 简单描述降级,熔断, 限流区别 ?

18. 简述什么是限流 ?

19. 简述REST/RESTful ?它的用途是什么?

20. 简述什么是通用语言(UL)?

21. 简述什么时候需要使用DDD?

22. 为什么需要域驱动设计(DDD)?

23. 简述领域驱动设计(DDD)?

24. 详细阐述SOA 和微服务架构之间的主要区别 ?

25. 简述使用微服务架构时,你面临的挑战是什么?

26. 详细阐述微服务特点和重要特性 ?

27. 解释设计微服务的最佳实践是什么?

28. 简述SpringCloud Alibaba的整体架构 ?

29. 请列举目前的主流服务网关有哪些 ?

30. 简述微服务中基本概念消费者与提供者 ?

31. 简述市面常用微服务框架 ?

32. 请列举服务网关基本功能 ?

33. 简述什么是API网关 ?

34. 简述什么是服务网关 ?

35. 简述微服务中的API定义?

36. 如何保障微服务通信安全 ?

37. 简述关于 Rest 和微服务的要点?

38. 简述什么是不同类型的微服务测试?

39. 简述什么是幂等性(Idempotence)?

40. 简述什么是DDD有界上下文?

41. 简述 PACT 在微服务架构中的用途是什么?

42. 简述契约测试(contract test)是什么?

43. 简述什么是端到端微服务测试?

44. 简述容器在微服务中的用途是什么?

45. 解释微服务架构中的DRY是什么?

46. 简述消费者驱动的契约(CDC)是什么?

47. 简述微服务架构中的语义监控是什么?

48. 简述微服务中的反应性扩展是什么?

49. Web, RESTful API在微服务中的作用是什么?

50. 简述什么是微服务中服务配置统一管理 ?

51. 简述服务链路追踪以及实现机制 ?

52. 阐述Zookeeper、Eureka、Consul、Nacos对比区别 ?

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值