2021年SpringCloud精选⼤⼚⾯试题-【附详细答案】1. 微服务是什么?
微服务与微服务架构
微服务的优缺点
2. 微服务之间是如何独⽴通讯的
微服务通信机制
系统中的各个微服务可被独⽴部署,各个微服务之间是松耦合的。每个微服务仅关注于完成⼀件任务并很好地完成该任务。
围绕业务能⼒组织服务、⾃动化部署、智能端点、对语⾔及数据的去集中化控制。
微服务通信⽅式:
同步:RPC,REST等
异步:消息队列。要考虑消息可靠传输、⾼性能,以及编程模型的变化等。
消息队列中间件如何选型
1.协议:AMQP、STOMP、MQTT、私有协议等。
2.消息是否需要持久化。
3.吞吐量。
4.⾼可⽤⽀持,是否单点。
5.分布式扩展能⼒。
6.消息堆积能⼒和重放能⼒。
7.开发便捷,易于维护。
8.社区成熟度。
RabbitMQ是⼀个实现了AMQP(⾼级消息队列协议)协议的消息队列中间件。RabbitMQ⽀持其中的最多⼀次和最少⼀次两种。⽹易蜂巢平台的服务架构,服务间通过RabbitMQ实现通信。
3. 使⽤ Spring Cloud 有什么优势?
使⽤ Spring Boot 开发分布式微服务时,我们⾯临以下问题
(1)与分布式系统相关的复杂性-这种开销包括⽹络问题,延迟开销,带宽问题,安全问题。
(2)服务发现-服务发现⼯具管理集中的流程和服务如何查和互相交谈。它涉及⼀个服务⽬录,在该⽬录中注册服务,然后能够查并连接到该⽬录中的服务。
(3)冗余-分布式系统中的冗余问题。
(4)负载平衡 --负载平衡改善跨多个计算资源的⼯作负荷,诸如计算机,计算机集,⽹络链路,中央处理单元,或磁盘驱动器的分布。
(5)性能-问题 于各种运营开销导致的性能问题。
(6)部署复杂性 evops 技能的要求。
4. Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别
1.ZooKeeper保证的是CP,Eureka保证的是AP
ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可⽤的
Eureka各个节点是平等关系,只要有⼀台Eureka就可以保证服务可⽤,⽽查询到的数据并不是最新的
⾃我保护机制会导致
Eureka不再从注册列表移除因长时间没收到⼼跳⽽应该过期的服务
Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(⾼可⽤)
当⽹络稳定时,当前实例新的注册信息会被同步到其他节点中(最终⼀致性)
Eureka可以很好的应对因⽹络故障导致部分节点失去联系的情况,⽽不会像ZooKeeper⼀样使得整个注册系统瘫痪
2.ZooKeeper有Leader和Follower⾓⾊,Eureka各个节点平等
3.ZooKeeper采⽤过半数存活原则,Eureka采⽤⾃我保护机制解决分区问题
4.Eureka本质上是⼀个⼯程,⽽ZooKeeper只是⼀个进程
5. 什么是 Hystrix?它如何实现容错?
Hystrix 是⼀个延迟和容错库,旨在隔离远程系统,服务和第三⽅库的访问点,当出现故障是不可避免的故障时,停⽌级联故障并在复杂的分布式系统中实现弹性。
通常对于使⽤微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。
思考以下微服务
假设如果上图中的微服务 9 失败了,那么使⽤传统⽅法我们将传播⼀个异常。但这仍然会导致整个系统崩溃。
随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以⾼达 1000.这是 hystrix 出现的地⽅ 我们将使⽤ Hystrix 在这种情况下的 Fallback ⽅法功能。我们有两个服务 employee-consumer 使⽤由 employee-consumer 公开的服务。
简化图如下所⽰
现在假设由于某种原因,employee-producer 公开的服务会抛出异常。我们在这种情况下使⽤ Hystrix 定义了⼀个回退⽅法。这种后备⽅法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退⽅法将返回⼀些值。
6. 什么是 Netflix Feign?它的优点是什么?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。
Feign 的第⼀个⽬标是将约束分母的复杂性统⼀到 http apis,⽽不考虑其稳定性。
在 employee-consumer 的例⼦中,我们使⽤了 employee-producer 使⽤ REST模板公开的 REST 服务。
但是我们必须编写⼤量代码才能执⾏以下步骤
(1)使⽤功能区进⾏负载平衡。
(2)获取服务实例,然后获取基本 URL。
(3)利⽤ REST 模板来使⽤服务。 前⾯的代码如下
@Controller
public class ConsumerControllerClient {
@Autowired
private LoadBalancerClient loadBalancer;
public void getEmployee() throws RestClientException, IOException {
ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
System.out.Uri());
String Uri().toString();
baseUrl=baseUrl+"/employee";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
hange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);分布式和微服务的关系
}
catch (Exception ex)
{
System.out.println(ex);
}
System.out.Body());
}
之前的代码,有像 NullPointer 这样的例外的机会,并不是最优的。我们将看到如何使⽤ Netflix Feign 使呼叫变得更加轻松和清洁。如果Netflix Ribbon 依赖关系也在类路径中,那么 Feign 默认也会负责负载平衡。
7. 说⼀下SpringCloud整体架构
Spring Cloud的⼦项⽬,⼤致可分成两类,⼀类是对现有成熟框架"Spring Boot化"的封装和抽象,也是数量最多的项⽬;第⼆类是开发了⼀部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的⾓⾊。
Spring Cloud Config
集中配置管理⼯具,分布式系统中统⼀的外部配置管理,默认使⽤Git来存储配置,可以⽀持客户端配置的刷新及加密、解密操作。
Spring Cloud Netflix
Netflix OSS 开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核⼼组件。
Eureka:服务治理组件,包括服务端的注册中⼼和客户端的服务发现机制;
Ribbon:负载均衡的服务调⽤组件,具有多种负载均衡调⽤策略;
Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能⼒;
Feign:基于Ribbon和Hystrix的声明式服务调⽤组件;
Zuul:API⽹关组件,对请求提供路由及过滤功能。
Spring Cloud Bus
⽤于传播集状态变化的消息总线,使⽤轻量级消息代理链接分布式系统中的节点,可以⽤来动态刷新集中的服务配置。
Spring Cloud Consul
基于Hashicorp Consul的服务治理组件。
Spring Cloud Security
安全⼯具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进⾏⽀持。
Spring Cloud Sleuth
Spring Cloud应⽤程序的分布式请求链路跟踪,⽀持使⽤Zipkin、HTrace和基于⽇志(例如ELK)的跟踪。
Spring Cloud Stream
轻量级事件驱动微服务框架,可以使⽤简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。
Spring Cloud Task
⽤于快速构建短暂、有限数据处理任务的微服务框架,⽤于向应⽤中添加功能性和⾮功能性的特性。
Spring Cloud Zookeeper
基于Apache Zookeeper的服务治理组件。
Spring Cloud Gateway
API⽹关组件,对请求提供路由及过滤功能。
Spring Cloud OpenFeign
基于Ribbon和Hystrix的声明式服务调⽤组件,可以动态创建基于Spring MVC注解的接⼝实现⽤于服务调⽤,在Spring Cloud 2.0中已经取代Feign成为了⼀等公民。
8. 说⼀下Monolith
通常情况下,这个项⽬所对应的代码由可以多个模块所组成,各个模块会根据⾃⾝所提供功能的不同具有⼀个明确的边界。在编译时,这些项⽬将被打包成为⼀个个JAR包,并最终合并在⼀起形成⼀个jar或WAR包

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。