50道微服务基础高频题整理(附答案背诵版)

简述什么是微服务?

参考回答

微服务是一种架构风格,它将一个复杂的应用程序拆解为一组小的、独立的服务,每个服务都是围绕特定的业务功能构建的。每个微服务可以独立部署、独立运行、并通过网络进行通信。这种架构使得各个服务之间的耦合度较低,开发和维护变得更加灵活。微服务通常采用轻量级的通信协议,如HTTP、REST、gRPC等。

详细讲解与拓展

微服务架构的核心思想是将单一的、庞大的应用拆分为多个小型、可独立部署的服务,每个微服务专注于一个业务领域。比如,一个电商平台中的订单服务、支付服务、用户服务等可以分别作为独立的微服务存在,它们可以在不同的服务器上运行,并通过API(通常是HTTP/REST API)进行通信。

与传统的单体架构不同,微服务架构的优势主要体现在以下几个方面:

  1. 独立部署和扩展:每个微服务都是独立部署的,这意味着我们可以对服务进行单独的升级、修改和扩展。例如,如果支付服务的负载增加,我们只需要单独扩展支付服务,而不必扩展整个应用。

  2. 技术多样性:由于微服务是独立的,我们可以根据每个服务的需求选择最合适的技术栈。例如,用户服务可以使用Java,而订单服务可能使用Node.js,这样就能够根据业务需求灵活选择技术。

  3. 故障隔离:如果一个微服务发生故障,通常不会影响到其他微服务的运行,这样就能增强系统的容错性。比如,如果支付服务宕机,其他服务(如商品浏览、订单管理)仍然能够继续正常运行。

  4. 团队自治:微服务架构通常与小型、跨职能的团队相结合,每个团队负责特定的微服务。这种做法使得团队更加专注于自己的服务,同时提升了开发效率。

然而,微服务也带来了一些挑战,比如:

  • 分布式系统的复杂性:微服务之间需要通过网络通信,带来了一定的延迟和复杂度。如何确保微服务之间的可靠通信,如何处理数据一致性等问题,都是需要解决的挑战。

  • 运维复杂性:微服务的数量通常很多,每个服务都需要单独监控和管理。如何对多个微服务进行有效的日志收集、监控、故障排查等,也是一个需要解决的问题。

  • 事务管理:微服务架构下,每个服务的数据库都是独立的,如何在多个服务之间保证事务的一致性成为了一个难题,通常使用的是最终一致性方案。

总结

微服务是一种将复杂应用拆解成一组小的、独立的服务的架构风格,能够带来更高的灵活性、可扩展性和容错性。然而,它也带来了分布式系统的复杂性和运维挑战,需要采取合适的技术手段来进行管理和优化。

简述微服务的优缺点 ?

参考回答

微服务架构有很多优点,但也存在一些缺点。

优点:

  1. 灵活性高:每个微服务都可以独立开发、部署和扩展,团队可以选择最适合的技术栈。
  2. 可扩展性强:每个服务可以根据负载独立扩展,不需要扩展整个应用系统。
  3. 容错性好:微服务之间是独立的,一个服务的故障不会影响到其他服务,系统的可用性更高。
  4. 团队自治:每个团队可以负责独立的微服务,减少了开发过程中的协调成本,提高了开发效率。

缺点:

  1. 分布式系统复杂性:服务之间需要通过网络通信,带来了一定的延迟和复杂性。
  2. 运维挑战:需要管理和监控大量的服务,增加了运维成本。
  3. 事务管理困难:微服务架构下的数据库通常是独立的,跨服务事务的管理较为复杂。
  4. 数据一致性问题:由于每个服务的数据库是独立的,确保数据一致性可能需要采用最终一致性等复杂的机制。

详细讲解与拓展

优点
  1. 灵活性高:微服务架构支持技术多样性,意味着每个服务可以用最适合的技术实现。例如,一个高并发的服务可能采用Go或Node.js,而一个对计算要求较高的服务可以选择Python或Java。这种灵活性使得团队可以根据具体的需求选择合适的工具和语言,从而提升开发效率。

  2. 可扩展性强:每个微服务独立运行,可以根据负载对特定服务进行水平扩展,而不是扩展整个系统。例如,在电商网站中,用户查看商品和订单管理服务可能并不需要同等扩展,如果只是在促销期间订单量激增,可以只扩展订单服务。这使得系统资源利用更加高效。

  3. 容错性好:微服务之间的耦合度较低,某个服务发生故障时,其他服务可以继续工作。例如,在一个订单系统中,如果支付服务出现问题,用户仍然可以浏览商品和查看订单状态,系统的整体可用性不会受到很大影响。

  4. 团队自治:每个微服务都可以由一个小型、跨职能的团队负责。团队可以根据自己的需求快速进行迭代和开发,减少了团队之间的依赖和协调成本。这种自治性提升了开发效率,尤其是在大规模开发中尤为重要。

缺点
  1. 分布式系统复杂性:微服务架构通常是分布式的,这带来了跨服务通信、数据一致性、服务发现等问题。服务之间的通信延迟较高,尤其是在大规模的系统中,这种延迟可能会影响系统的整体性能。此外,网络问题、服务宕机等因素也可能导致服务间的通信失败。

  2. 运维挑战:微服务架构通常包含大量的服务,如何进行有效的监控、日志收集和故障排查是一个巨大挑战。每个服务的部署、更新和扩展都需要单独管理,增加了运维的复杂度。使用容器技术(如Docker)和容器编排工具(如Kubernetes)可以帮助简化这部分工作,但整体运维成本依然较高。

  3. 事务管理困难:在微服务架构中,每个服务通常都有自己独立的数据库。如果需要跨多个服务处理事务,保持数据的一致性就变得非常困难。传统的数据库事务机制(ACID)不适用于跨服务的操作,通常需要使用分布式事务或者最终一致性策略来解决这个问题。这可能导致系统在某些情况下的复杂性增加。

  4. 数据一致性问题:由于每个微服务有独立的数据库,保证数据的一致性变得更加复杂。传统的关系型数据库依赖事务机制来确保数据一致性,但在微服务架构下,由于服务之间的独立性,通常采用最终一致性机制。最终一致性意味着,系统可能暂时存在数据不一致的状态,但最终会达到一致。这种方式适用于一些对实时一致性要求不高的场景,但对于某些关键业务场景(如金融交易)可能不适用。

总结

微服务架构具有灵活性、可扩展性和高容错性等优点,适合大型、复杂的系统。然而,它也带来了一些运维复杂性、分布式系统的问题和数据一致性的挑战。因此,在决定是否采用微服务架构时,必须根据具体的业务需求和技术环境来权衡其优缺点。

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

参考回答

分布式和微服务是两个相关但不同的概念。

分布式系统指的是将多个计算资源分布在不同的计算机上进行协作,目的是为了提高系统的可扩展性和容错性。它强调的是资源和处理能力的分布,通常关注如何将任务分配到不同的节点上,并确保系统的整体可用性。

微服务架构是一种特定的分布式架构风格,它将一个复杂的应用拆解成多个小型的、独立的服务,每个微服务都围绕特定的业务功能构建。微服务是一种设计方法,它强调的是每个服务的自治性、独立性和灵活性。

主要区别:

  1. 关注点不同:分布式系统关注的是资源的分布和协调,而微服务关注的是将业务功能拆分成多个独立的服务。
  2. 粒度不同:分布式系统不一定要求将业务拆分成小的服务,可能只是把一个大应用的不同部分分布到不同的机器上;而微服务则明确要求将应用拆解成多个小型服务,每个服务都有清晰的业务职责。
  3. 通信方式不同:分布式系统中的节点之间通过不同的协议进行通信,但不一定采用微服务中常见的RESTful API或gRPC等协议。

详细讲解与拓展

分布式系统

分布式系统是指由多个计算节点(计算机、虚拟机、容器等)组成的系统,这些节点通过网络连接协作完成任务。分布式系统的关键目标是解决单一机器的资源限制问题,通过分布式存储、计算、负载均衡等手段提高系统的可用性、可扩展性和容错性。

举个例子,假设一个电商平台需要处理大量的用户请求和订单。如果我们将所有计算任务都放在一台服务器上,随着访问量的增加,单台服务器的性能就会达到瓶颈。通过将任务分布到多台机器上(例如,把支付处理、商品展示、用户管理等分布到不同的机器上),就能够分担负载,提高系统的性能和可靠性。

微服务架构

微服务架构是一种特定类型的分布式架构,它不仅仅将任务分布到多台机器上,更重要的是将应用程序的不同功能拆分成多个小型、独立的服务。每个微服务负责特定的业务功能,且通常拥有自己的数据库和独立的部署生命周期。微服务之间通过API(例如RESTful API或gRPC)进行通信。

例如,在一个电商平台中,订单管理、用户管理、支付、库存管理等可以拆分成独立的微服务,每个服务由不同的团队开发和维护。微服务架构强调服务的自治性和解耦性,每个服务可以独立扩展和部署。

核心区别
  1. 粒度和关注点:

    • 分布式系统的核心关注点是如何分布计算和存储资源。它解决的是多节点的协同工作和容错问题,但不要求拆解应用的业务功能。
    • 微服务则将应用从业务逻辑的角度拆解成多个独立的服务,每个服务围绕业务功能独立部署、扩展和维护。
  2. 架构设计:

    • 分布式系统的架构并不一定要求每个模块都具备独立性,某些模块可能依赖于其他模块。例如,在传统的分布式应用中,可能会有一个中心化的数据库来支持多个服务的访问。
    • 微服务架构明确要求每个服务是自治的、独立的,通常每个微服务都有自己的数据库,并且独立开发和部署。
  3. 独立性:

    • 分布式系统中的不同节点和服务并不总是彼此独立,可能会有较强的耦合关系。
    • 微服务架构中的每个服务尽可能独立,服务之间通过明确的API进行通信,减少了彼此间的依赖性。
  4. 通信:

    • 分布式系统中,节点之间的通信可以通过多种协议(如RPC、消息队列、文件传输等)进行,通常不强调业务层的拆分。
    • 微服务架构中,服务之间的通信通常采用标准的轻量级协议(如RESTful API、gRPC等),强调的是服务之间的解耦。

总结

分布式系统关注的是如何将计算和存储资源分布在多台机器上,提高系统的可扩展性和容错性。微服务架构则是在分布式系统的基础上,进一步将应用拆分成多个小型的、独立的服务,以便在业务层面进行灵活的开发和部署。虽然微服务架构是分布式的一种实现方式,但它在粒度、独立性、通信方式等方面与一般的分布式系统有所不同。

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

5. 请列举微服务设计原则 ?

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

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

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

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

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

11. 简述什么是服务调用 ?

12. 简述什么服务降级 ?

13. 简述什么熔断机制 ?

14. 简述熔断有哪几种状态 ?

15. 解释服务熔断原理(断路器的原理&aff=27618) ?

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

17. 简述什么是限流 ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

32. 简述什么是API网关 ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(微服务,架构,云原生)