本期主题:
3天掌握《Java编程与面试2024》的黄金章节技能点,即第3章,微服务配置篇25问。
……
第三章【微服务配置篇:SpringBoot+SpringCloud】(25问)
具体问题如下:
一、什么是SpringBoot?
二、SpringBoot常用的starter?
三、SpringBoot自动配置原理?
四、SpringBoot starter工作原理?
五、SpringBoot的优点?
六、SpringCloud解决了哪些问题?
七、SpringBoot与SpringCloud的关系?
八、微服务是如何调用的?
九、微服务调用的原理?
十、微服务如何实现负载均衡?
十一、配置详解?
十二、Eureka?
十三、Eureka的高可用配置?
十四、谈谈微服务?
十五、微服务和SOA的关系?
十六、SpringCoud是如何实现服务注册与发现的?
十七、Ribbon和Feign的区别?
十八、雪崩效应?
十九、熔断机制?
二十、Eureka的基础架构?
二十一、Eureka和Zookeeper都可以提供服务注册与发现的功能,而两者的区别是?
二十二、CAP理论?
二十三、Ribbon和Nginx的区别?
二十四、服务注册与发现?
二十五、微服务的负载均衡,为何用?怎么用?
......
下面,让我来具体说说这25个问题吧!
一、什么是SpringBoot?
1、用来简化spring初始搭建,以及开发过程中使用特定的方式,进行配置(properties或者yml文件)。
2、创建独立的Spring应用程序main方法运行。
3、嵌入Tomcat无需部署war包,直接打成jar包,用nohup java -jar–&启动就好。
4、简化了maven的配置。
5、自动配置Spring添加对应的starter自动化配置。
...
下面,让我来具体说说…
SpringBoot是由Pivotal团队提供的全新框架…
旨在简化新Spring应用的初始搭建,以及开发过程。
从根本上讲,SpringBoot是一个基于Spring框架的开源框架…
它提供了一套开发工具和约定,使得构建独立、可执行的、生产级别的Spring应用,变得更加容易。
SpringBoot具有4大核心特性,即自动化配置,外部化配置,内嵌容器,健康检查和监控。
1、自动化配置
通过自动配置机制,根据项目中引入的依赖和约定…
自动配置应用程序中的各种组件和功能。
这减少了开发者,手动编写大量XML或注解配置的工作量,降低了出错的可能性。
2、外部化配置
支持将配置信息从代码中分离出来,使开发者能够在不同环境下…
灵活切换配置参数,例如使用不同的数据库或消息队列。
3、内嵌容器
支持内置的Servlet容器(如Tomcat、Jetty、Uow等)…
这意味着,你可以将应用程序,打包为一个可执行的JAR文件…
并直接运行,无需单独安装和配置外部容器。
4、健康检查和监控
提供了健康检查和监控功能,可以监控应用程序的运行状态和性能指标…
确保应用程序的稳定性和可靠性。
此外…
SpringBoot还致力于提供快速的应用开发体验,并使得开发者…
能够更专注于业务逻辑的实现,而不是花费大量时间在配置和部署上。
因此…
无论是Web应用、RESTful服务还是批处理作业,SpringBoot都能帮助开发者…
更快速、更便捷地构建及部署Java应用程序,提高开发效率和项目的可维护性。
划重点:
最新版本的SpringBoot(截至2024年4月)是3.2.x系列,提供了更多的特性和改进…
如系统要求提升、安全性增强、虚拟线程支持以及Jakarta EE迁移等。
这些新特性和改进,使得SpringBoot在构建现代、高效和安全的Java应用程序方面,更加强大和灵活。
…
二、SpringBoot常用的starter?
1、spring-boot-starter-web(嵌入Tomcat和web开发需要的servlet和jsp支持)
2、spring-boot-starter-data-jpa(数据库支持)
3、spring-boot-starter-data-Redis(Redis支持)
4、spring-boot-starter-data-solr(solr搜索应用框架支持)
5、mybatis-spring-boot-starter(第三方mybatis集成starter)
…
三、SpringBoot自动配置原理?
1、@Eofiguration这个注解会“猜“你将如何配置spring,前提是你已经添加了jar依赖项。
如果spring-boot-starter-web已经添加Tomcat和SpringMVC…
这个注释,就会自动假设您在开发一个web应用程序,并添加相应的Spring配置;
会自动去maven中读取每个starter中的spring.factories文件;
该文件里,配置了所有需要被创建spring容器中bean。
2、在main方法中,加上注解@SpringBootApplication和@Eofiguration。
…
四、SpringBoot starter工作原理?
1、SpringBoot在启动时,扫描项目依赖的jar包,寻找包含spring.factories文件的jar。
2、根据spring.factories,配置加载Autofigure。
3、根据@ditional注解的条件,进行自动配置,并将bean注入到Spring text。
…
五、SpringBoot的优点?
1、减少开发、测试时间和努力。
2、使用Javafig有助于避免使用XML。
3、避免大量的maven导入和各种版本冲突。
4、提供意见发展方法,
5、通过提供默认值快速开始开发。
6、没有单独的web服务器需要...
这就意味着,不再需要启动Tomcat、Glassfish,或其它任何东西。
7、需要更少的配置,因为没有web.xml文件。
只需添加用@figuration注释的类,然后添加用@Bean注释的方法…
Spring将自动加载对象,并像以前一样对其进行管理。
甚至可以将@Autowired添加到bean方法中,以使用Spring自动装入需要的依赖关系中。
…
六、SpringCloud解决了哪些问题?
配置管理(注册中心eureka、zk)…
服务发现、服务注册、断路器、路由策略、全局锁、分布式会话…
客户端调用、接口网关(zuul)、服务管理系统。
下面,让我来具体说说…
Spring Cloud主要解决了,在构建微服务架构时,面临的一系列问题。
主要有6个,即服务注册与发现,配置管理,负载均衡,熔断与降级,服务拆分与治理,生态系统丰富。
具体来说,它提供了以下关键解决方案:
1、服务注册与发现
通过集成服务注册中心(如Eureka、sul等)…
Spring Cloud使得微服务之间,能够自动注册和发现彼此…
从而实现了服务之间的无缝通信。
这大大简化了,服务之间的调用过程,提高了系统的可维护性和可扩展性。
2、配置管理
Spring Cloud fig提供了集中式的配置管理功能…
使得开发者,可以方便地管理所有微服务的配置信息。
通过动态更新和版本控制,它确保了配置的一致性和可维护性,降低了因配置错误导致的问题。
3、负载均衡
Spring Cloud提供了多种负载均衡器(如Ribbon、Spring Cloud LoadBalancer等)…
能够在服务消费者之间分配请求,确保每个服务实例,都能得到合理的负载。
这有助于,提高系统的可用性和性能,避免单点故障。
4、熔断与降级
通过集成Hystrix等组件,Spring Cloud实现了熔断和降级机制。
当某个服务,出现故障或响应过慢时…
熔断器会快速失败调用,避免整个系统崩溃。
同时,降级机制,可以在服务不可用时,提供备选方案,确保系统的稳定运行。
5、服务拆分与治理
Spring Cloud支持微服务的细粒度拆分,使得开发者,能够更灵活地设计系统架构。
同时,它提供了服务治理功能,如流量控制、熔断隔离等等…
帮助开发者,更好地管理和维护微服务集群。
6、生态系统丰富
Spring Cloud拥有庞大的生态系统,包括许多开源项目和第三方库。
这些库,可以帮助开发者,更容易地构建各种类型的微服务,如API网关、认证中心、监控中心等。
总的来说:
Spring Cloud通过提供一系列工具和组件…
简化了微服务的开发、部署和管理过程,降低了构建分布式系统的复杂性。
这使得开发者,能够更专注于,业务逻辑的实现,提高开发效率和质量。
…
七、SpringBoot与SpringCloud的关系?
1、SpringBoot简化了xml配置,快速整合框架。
2、Springcloud是一套微服务解决方案—RPC远程调用。
3、关于SpringCloud依赖与SpringBoot(web组件用的SpringMVC),为什么Springcloud会依赖与SpringBoot?
因为SpringCloud写接口就是SpringMVC接口。
4、SpringBootproperties和yml中可以使用${random}设置一些随机值。
…
下面,让我来具体说说…
SpringBoot与SpringCloud的关系可以被视为一种相辅相成、互为补充的协作关系。
具体来说,它们之间的关系主要体现在3个方面,即基础与扩展,互补与协同,依赖与独立。
1、基础与扩展
SpringBoot为开发者,提供了快速构建Spring应用程序的基础能力…
它注重于简化配置、内嵌服务器以及自动配置等特性;
使得开发者,能够更快速地启动和运行单个Spring应用程序。
而SpringCloud,则是在SpringBoot的基础上…
提供了构建分布式系统和微服务架构所需的工具和框架,它关注于全局的微服务协调整理和治理。
2、互补与协同
SpringBoot虽然能够快速构建单个微服务…
但对于微服务之间的协调、配置管理、服务发现等问题,并未提供完整的解决方案。
而SpringCloud,则通过提供一系列的功能组件…
如配置中心、服务发现、断路器、路由等,来弥补SpringBoot在这些方面的不足。
这使得开发者,能够利用SpringBoot快速构建微服务个体…
再利用SpringCloud,将这些微服务整合并管理起来,形成一个完整的微服务架构。
3、依赖与独立
虽然SpringCloud依赖于SpringBoot作为其基础…
但SpringBoot本身并不需要SpringCloud就可以独立使用。
这意味着开发者,可以根据项目的实际需求,选择只使用SpringBoot来构建简单的Spring应用程序…
或者结合使用SpringBoot和SpringCloud来构建复杂的微服务架构。
综上所述:
SpringBoot与SpringCloud之间的关系是一种基础与扩展、互补与协同的关系。
它们各自具有独特的功能和优势,但又能够相互协作…
共同为开发者提供构建高效、稳定、可扩展的分布式系统,及微服务架构的能力。
…
八、微服务是如何调用的?
微服务的调用,主要依赖于服务之间的通信机制。
具体实现方式会根据,所选择的通信协议和框架有所不同,但大致流程是相似的。
微服务调用三步走如下:
首先…
服务消费者(即发起调用的微服务)会通过某种机制获取到服务提供者(即被调用的微服务)的地址信息。
这种机制可以是服务注册与发现中心…
如Eureka、sul或Nacos等;
也可以是静态配置,如直接在配置文件中指定服务地址。
获取到服务地址后,服务消费者,会根据选定的通信协议和框架来构建请求。
常见的通信协议包括HTTP、gRPC、Thrift等,而框架则可能是Spring Cloud、Dubbo等。
例如,如果使用HTTP协议和Spring Cloud框架,服务消费者可能会使用RestTemplate或Webt来构建HTTP请求。
接下来…
服务消费者,会发送请求到服务提供者。
这个过程可能涉及到网络传输、序列化与反序列化等步骤。
网络传输,负责将请求,从服务消费者发送到服务提供者…
而序列化与反序列化,则负责将请求对象,转换为可以在网络上传输的格式,并在接收端,恢复为原始对象。
服务提供者收到请求后,会进行相应的业务处理,并返回结果给服务消费者。
这个过程,同样涉及到网络传输、序列化与反序列化等步骤。
最后…
服务消费者,接收到服务提供者返回的结果,根据需要进行相应的处理。
这样,一个完整的微服务调用过程,就完成了。
在整个过程中,为了确保调用的可靠性和稳定性,可能还会涉及到一些额外的机制…
如超时处理、重试机制、熔断器等等。
这些机制可以在网络故障、服务不可用等情况下,提供一定的容错能力,保证系统的稳定性和可用性。
总的来说:
微服务的调用,是一个涉及到服务发现、通信协议、网络传输、序列化与反序列化等多个步骤的复杂过程。
在设计和实现微服务调用时,我们需要根据具体的业务需求和技术选型,来进行综合考虑和权衡。
…
九、微服务调用的原理?
微服务调用的原理,其实主要基于分布式系统的设计理念。
简单来说,每个微服务都是一个独立的、可独立部署的服务,它们之间通过轻量级的通信机制进行交互。
一、首先…
微服务之间需要有一种机制,来发现彼此的位置。
这通常通过服务注册与发现机制来实现的。
例如使用服务注册中心,如sul、Eureka或Nacos等等。
服务提供方,会将自己的地址,注册到注册中心…
服务调用方,则通过注册中心,查找需要调用的服务的地址。
二、其次…
在微服务调用时,为了实现高可用性和水平扩展,通常会使用负载均衡技术。
负载均衡器,可以将请求分发到多个服务实例上,从而均衡负载,提高系统的吞吐量和稳定性。
在实际调用过程中,微服务之间通常通过HTTP、RPC或消息队列等轻量级通信协议进行通信。
这种通信方式,保证了服务之间的松耦合,使得服务可以独立地升级和扩展,而不会影响到其他服务。
三、此外…
为了保证数据的独立性和隔离性,每个微服务,通常会有自己的独立数据库或数据存储。
这样,当某个服务的数据结构或存储方式需要变更时…
只需要修改该服务即可,不会影响到其他服务。
四、最后…
自动化部署和运维也是微服务调用的重要一环。
通过容器化技术(如Docker)和自动化工具(如Kuberes)…
可以实现微服务的快速部署和管理,提高了开发和运维的效率。
总的来说:
微服务调用的原理,就是通过服务注册与发现、负载均衡、轻量级通信、独立数据库以及自动化部署和运维等技术手段…
实现各个微服务之间的解耦、独立部署和扩展,从而构建出高效、稳定、灵活的分布式系统。
…
十、微服务如何实现负载均衡?
微服务实现负载均衡的方式是多种多样的,这主要取决于具体的业务场景和技术选型。
常见负载均衡实现方式有4种,即通过硬件负载均衡器实现,使用软件负载均衡器实现,基于服务注册与发现机制的负载均衡实现,通过容器编排工具实现。
下面,让我来具体说说…
一、通过硬件负载均衡器实现
硬件负载均衡器通常位于网络的前端,接收来自客户端的请求…
然后根据预设的策略,将请求分发到不同的微服务实例上。
这种方式,具有较高的性能和稳定性,但需要额外的硬件设备投入。
二、使用软件负载均衡器实现
软件负载均衡器,通常集成在微服务框架或中间件中,如Nginx、HAProxy等。
这些软件,可以通过配置,实现请求的分发和路由,支持更灵活的负载均衡策略。
三、基于服务注册与发现机制的负载均衡实现
这也是常见的实现方式。
服务提供者,将自己的地址注册到注册中心…
服务消费者,通过注册中心获取服务提供者的地址列表;
然后根据负载均衡策略,选择一个进行调用。
这种方式可以实现服务的动态发现和调用,对服务的扩展和容错处理具有较好的支持。
在具体实现上,负载均衡策略也是多种多样的。
常见的策略包括轮询、随机、最少连接数等。
1、轮询策略,将请求依次分发给各个服务实例;
2、随机策略,则随机选择一个服务实例进行调用;
3、最少连接数策略,则根据服务实例当前的连接数进行选择,以实现负载均衡。
四、通过容器编排工具实现
随着容器化技术的发展,容器编排工具如Kuberes,也提供了强大的负载均衡能力。
通过Kuberes的Service资源,可以方便地实现微服务的自动发现和负载均衡。
总的来说:
微服务实现负载均衡的方式是多种多样的…
我们需要根据具体的业务场景和技术选型进行选择和配置。
同时,负载均衡策略的选择,也需要根据实际需求和系统特性进行权衡和调整,以达到最佳的负载均衡效果。
…
十一、配置详解?
1、eureka.t.register-with-eureka: