Java面试题(五)- Spring Cloud

本文深入探讨SpringBoot与SpringCloud的关系,解析SpringBoot的启动方法及与SpringMVC的对比,阐述Feign、Eureka与Consul、Zuul与Gateway的功能区别,以及注册中心的作用,最后分析SpringCloud的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. SpringBoot与SpringCloud的关系
        Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Boot,看名字就知道是Spring的引导,就是用于启动Spring的,使得Spring的学习和使用变得快速无痛。不仅适合替换原有的工程结构,更适合微服务开发。
        Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。
        Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架;spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,      Spring Cloud很大的一部分是基于Spring boot来实现。
2. SpringBoot应用的启动方法
        1. 运行带有main方法类
        2. 通过命令行 java -jar 的方式
        3. 通过spring-boot-plugin的方式
3. Spring Boot 与 Spring MVC各自的优缺点
        SpringMVC的优点:
                (1)使用简单,学习成本低。
                (2)很容易就可以写出性能优秀的程序.
                (3)灵活性强,Spring MVC的框架易扩展
        SpringMVC的缺点:
                (1)Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行
                (2)太过于细分,开发效率低
        Spring Boot的核心功能:
        (1)独立运行的Spring项目
                 Spring Boot可以以jar包的形式进行独立的运行,使用:java -jar xx.jar 就可以成功的运行项目,或者在应用项目的主程序中运行main函数即可;
        (2)内嵌的Servlet容器
                 内嵌容器,使得我们可以执行运行项目的主程序main函数,并让项目的快速运行;
        (3)提供starter简化Manen配置
                 Spring Boot提供了一系列的starter pom用来简化我们的Maven依赖
        (4)自动配置Spring
                 Spring Boot会根据我们项目中类路径的jar包/类,为jar包的类进行自动配置Bean,这样一来就大大的简化了我们的配置。当然,这只是Spring考虑到的大多数的使用场景,在一些特殊情况,我们还需要自定义自动配置;
        (5)应用监控
                 Spring Boot提供了基于http、ssh、telnet对运行时的项目进行监控;
4. Feign的作用
        通过最少的资源和代码来实现和HTTP API的连接
5. Eureka 与 Consul的区别
Consul保证强一致性(C):
        服务注册相比Eureka会稍慢一些。因为Consul的raft协议要求必须过半数的节点都写入成功才认为注册成功,Leader挂掉时,重新选举期间整个consul不可用。保证了强一致性但牺牲了可用性。

Eureka保证高可用(A)和最终一致性:
        服务注册相对要快,因为不需要等注册信息replicate到其他节点,也不保证注册信息是否replicate成功,当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺牲了一致性。
        其他方面,eureka就是个servlet程序,跑在servlet容器中; Consul则是go编写而成。Consul 不同于 Eureka 需要单独安装。
6. Zuul 与 Gateway的区别
        Zuul基于servlet 2.5(使用3.x),使用阻塞API。 它不支持任何长连接,如websockets。而Gateway建立在Spring Framework 5,Project Reactor和Spring Boot 2之上,使用非阻塞API。比较完美地支持异步非阻塞编程,先前的Spring系大多是同步阻塞的编程模式,使用thread-per-request处理模型。即使在Spring MVC Controller方法上加@Async注解或返回DeferredResult、Callable类型的结果,其实仍只是把方法的同步调用封装成执行任务放到线程池的任务队列中,还是thread-per-request模型。Gateway 中Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的开发体验。
在高并发和潜在的高延迟场景下,网关要实现高性能高吞吐量的一个基本要求是全链路异步,不要阻塞线程。Zuul网关采用同步阻塞模式不符合要求。
        Spring Cloud Gateway基于Webflux,比较完美地支持异步非阻塞编程,很多功能实现起来比较方便。Spring5必须使用java 8,函数式编程就是java8重要的特点之一,而WebFlux支持函数式编程来定义路由端点处理请求。
        Gateway中定义了丰富的路由断言和过滤器,通过配置文件或者Fluent API可以直接调用和使用,非常方便。在性能上,也是胜于之前的Zuul网关。
7. 注册中心的作用
        服务的注册、反注册,服务发现(订阅)、通知

8. springcloud优缺点

优点:

1、服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率

2、可以更精准的制定优化服务方案,提高系统的可维护性

3、微服务架构采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量

4、适于互联网时代,产品迭代周期更短

缺点:

1、微服务过多,治理成本高,不利于维护系统

2、分布式系统开发的成本高(容错,分布式事务等)对团队挑战大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值