- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
微服务面试题及详细答案
一、微服务基础概念
1.什么是微服务?和单体架构的核心区别是什么?
答:微服务是一种架构风格,它将一个复杂的应用拆分成多个小型、独立部署的服务,每个服务围绕特定业务领域构建,通过轻量级通信协议(如HTTP/REST、gRPC)交互,且每个服务拥有独立的数据库和技术栈。
核心区别主要有3点:
(1)架构拆分:单体架构是将所有业务模块打包成一个应用,部署在单一进程中;微服务是按业务域拆分,每个服务独立部署、独立运行。
(2)依赖与扩展:单体架构中模块耦合度高,修改一个模块可能影响整体,扩展时需对整个应用扩容;微服务耦合度低,可针对高并发模块单独扩容,比如电商系统中“订单服务”压力大时,只扩容订单服务即可。
(3)故障影响范围:单体架构一个模块故障可能导致整个应用崩溃;微服务一个服务故障,通过熔断、降级等机制,一般不会影响其他服务,比如评论服务挂了,不影响用户下单、支付。
2.微服务架构的优势和挑战分别有哪些?
答:优势主要体现在4个方面:
(1)灵活性高:每个服务可独立选择技术栈,比如订单服务用Java,推荐服务用Python,适合不同业务场景的技术需求。
(2)迭代效率高:服务拆分后,团队可专注于单个服务开发,无需关注整体应用,上线周期更短,比如只修改商品详情功能,只需测试和部署商品服务,不用全量回归。
(3)可扩展性强:针对高负载服务精准扩容,降低资源浪费,比如电商大促时,只扩容订单、支付、商品这3个核心服务,其他服务保持正常配置。
(4)容错性好:单个服务故障不会扩散到整个系统,通过服务治理机制保障核心业务可用。
挑战主要有6个方面:
(1)分布式系统复杂度提升:需要解决服务通信、分布式事务、数据一致性等问题,比如跨服务下单时,订单服务和库存服务的数据同步。
(2)服务治理难度大:随着服务数量增加,服务注册、发现、配置管理、监控追踪的复杂度会指数级上升。
(3)测试难度提高:单体应用可直接本地测试,微服务需要模拟多服务交互,集成测试、端到端测试更复杂。
(4)运维成本增加:服务数量多,部署、升级、故障排查的工作量大幅增加,需要依赖容器化、自动化运维工具。
(5)数据一致性问题:每个服务有独立数据库,跨服务操作时,很难保证ACID特性,比如下单时“创建订单”和“扣减库存”必须同时成功或同时失败。
(6)接口兼容性问题:服务间通过接口通信,一个服务接口修改后,可能影响所有依赖它的服务,需要做好版本管理。
二、微服务架构设计核心
1.微服务的拆分原则是什么?有哪些常见的拆分方法?
答:核心拆分原则是“高内聚、低耦合”,简单说就是“一个服务只做一件事”,具体可遵循以下4个原则:
(1)业务域原则:按业务模块拆分,比如电商系统拆分为用户服务、商品服务、订单服务、支付服务、物流服务等,每个服务对应一个明确的业务领域。
(2)单一职责原则:一个服务只负责一个核心业务功能,避免出现“大而全”的服务,比如商品服务只负责商品的CRUD、库存管理,不涉及订单相关逻辑。
(3)数据自治原则:每个服务拥有独立的数据库,避免多个服务共享数据库,比如用户服务用MySQL存储用户信息,商品服务用MySQL存储商品信息,互不干扰。
(4)避免过度拆分:拆分过细会导致服务数量激增,通信成本和运维复杂度大幅上升,一般建议一个服务对应一个小团队(5-9人)的维护能力。
常见拆分方法:
(1)按业务功能拆分:最常用的方法,比如将电商系统按“用户管理”“商品管理”“订单管理”等功能拆分为对应服务。
(2)按子域拆分(DDD领域驱动设计):先划分业务领域的子域(核心子域、支撑子域、通用子域),再按子域拆分服务,比如电商领域的核心子域是“订单域”“商品域”,支撑子域是“物流域”,通用子域是“用户认证域”。
(3)按数据拆分:对于数据量大、访问频繁的模块,按数据维度拆分,比如将用户服务拆分为“用户基础信息服务”和“用户行为日志服务”,分别存储不同类型的用户数据。
2.微服务之间如何进行通信?有哪些常见的通信方式?各自的适用场景是什么?
答:微服务通信分为“同步通信”和“异步通信”两大类,不同场景选择不同的通信方式:
(1)同步通信:
①RESTAPI:基于HTTP协议,采用JSON格式传输数据,简单易用、无侵入性,适合服务间简单的请求-响应场景,比如商品服务提供REST接口,供订单服务查询商品信息。
适用场景:跨语言、跨平台通信,服务间耦合度低,请求频率不高的场景。
②gRPC:基于HTTP/2协议,采用ProtocolBuffers(PB)序列化格式,传输效率高、支持双向流通信,适合服务间高频、大数据量的通信场景,比如订单服务和库存服务之间的实时库存扣减。
适用场景:同语言服务间通信(也支持跨语言),对性能要求高的内部服务交互。
原创力文档


文档评论(0)