SpringCloud 面试题, 微服务的通讯方式有哪些?
SpringCloud 面试题, 微服务的通讯方式有哪些?
QA
Step 1
Q:: 微服务的通讯方式有哪些?
A:: 微服务的通讯方式主要分为两大类:同步通讯和异步通讯。
1.
同步通讯:
- **HTTP/
REST**:这是最常见的同步通讯方式,基于HTTP协议,使用RESTful API进行数据交换。
-
gRPC:一种高效的开源远程过程调用(RPC)框架,支持多语言,非常适合微服务之间的高性能通讯。
-
GraphQL:一种用于API的查询语言和运行环境,允许客户端明确指定所需数据,从而减少了冗余数据传输。
2.
异步通讯:
- **消息队列(MQ)**:使用如RabbitMQ、Kafka等消息队列系统,服务之间通过发布/
订阅模式进行异步通讯。
-
事件驱动架构:微服务通过事件发布和订阅来通讯,常用的工具包括Kafka、AWS SNS等。
-
WebSocket:用于实时双向通讯,适合需要实时数据推送的场景。
Step 2
Q:: 什么是RESTful API?
A:: RESTful API是一种基于HTTP协议的Web服务设计风格。它利用HTTP动词(如GET、POST、PUT、DELETE等)与资源进行交互,资源通常表示为URI。RESTful API的特点包括:
1.
无状态性:每个请求从客户端到服务器都必须包含理解该请求所需的所有信息。
2.
可缓存性:服务器可以声明响应是否可被缓存,以提高客户端的性能。
3.
层次化系统:客户端通常并不知道它直接连接的服务器或中间层的细节,这使得架构更具弹性和可扩展性。
Step 3
Q:: 微服务之间如何实现服务发现?
A:: 服务发现是微服务架构中一个重要的组件,它解决了服务实例动态注册和查找的问题。
1.
客户端负载均衡:通过像Eureka、Consul这样的服务注册中心,服务消费者可以直接与服务提供者通信,并通过注册中心获取最新的服务实例列表,然后通过客户端负载均衡策略(如Ribbon)选择一个实例进行调用。
2.
服务网格(Service Mesh):在服务网格中,服务发现由数据平面(如Envoy、Istio)代理完成,代理会自动处理服务的注册和发现,应用本身无需关注这些细节。