前言
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用Spring Boot的开发风格作到一键启动和部署。Spring Cloud并无重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,经过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud有如下特色:
-
约定优于配置;
-
适用于各类环境。开发、部署PC Server或各类云环境(例如阿里云、AWS等)都可;
-
隐藏了组件的复杂性,并提供声明式、无xml的配置方式;
-
开箱即用,快速启动;
-
轻量级的组件。Spring Cloud整合的组件大多比较轻量。例如Eureka、Zuul等,都是各自领域轻量级的实现;
-
组件丰富,功能齐全。Spring Cloud 为微服务架构提供了很是完整的支持。例如、配置管理、服务发现、断路器、微服务网关等;
-
选型中立、丰富。例如,Spring Cloud支持使用Eureka、Zookeeper或Consul实现服务发现;
-
灵活。Spring Cloud的组成部分是解耦的,开发人员能够按需灵活挑选技术选型。
关于Spring Cloud微服务架构的知识总结了个思惟导图分享给你们
Spring Cloud面试题
三、服务注册和发现是什么意思?Spring Cloud 如何实现?
五、SpringBoot和SpringCloud的区别?
八、什么是 Hystrix 断路器?咱们须要它吗?
九、什么是 Netflix Feign?它的优势是什么?
十、什么是 Spring Cloud Bus?咱们须要它吗?
一、什么是 Spring Cloud?
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
二、使用 Spring Cloud 有什么优点?
使用 Spring Boot 开发分布式微服务时,咱们面临如下问题
(1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
(2)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,而后可以查找并链接到该目录中的服务。
(4)负载平衡 --负载平衡改善跨多个计算资源的工做负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
(5)性能-问题 因为各类运营开销致使的性能问题。
三、服务注册和发现是什么意思?Spring Cloud 如何实现?
当咱们开始一个项目时,咱们一般在属性文件中进行全部的配置。随着愈来愈多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会降低,而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现能够在这种状况下提供帮助。因为全部服务都在 Eureka 服务器上注册并经过调用 Eureka 服务器完成查找,所以无需处理服务地点的任何更改和处理。
四、Spring Cloud 和dubbo区别?
(1)服务调用方式 dubbo是RPC springcloud Rest Api
(2)注册中心,dubbo 是zookeeper springcloud是eureka,也能够是zookeeper
(3)服务网关,dubbo自己没有实现,只能经过其余第三方技术整合,springcloud有Zuul路由网关,做为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
五、SpringBoot和SpringCloud的区别?
SpringBoot专一于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
SpringBoot能够离开SpringCloud独立使用开发项目, 可是SpringCloud离不开SpringBoot ,属于依赖的关系.
SpringBoot专一于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
六、负载平衡的意义什么?
在计算中,负载平衡能够改善跨计算机,计算机集群,网络连接,中央处理单元或磁盘驱动器等多种计算资源的工做负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平衡而不是单个组件可能会经过冗余来提升可靠性和可用性。负载平衡一般涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。
七、什么是 Hystrix?它如何实现容错?
Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,中止级联故障并在复杂的分布式系统中实现弹性。
一般对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协做。
假设若是上图中的微服务 9 失败了,那么使用传统方法咱们将传播一个异常。但这仍然会致使整个系统崩溃。
随着微服务数量的增长,这个问题变得更加复杂。微服务的数量能够高达 1000.这是 hystrix 出现的地方 咱们将使用 Hystrix 在这种状况下的 Fallback 方法功能。咱们有两个服务 employee-consumer 使用由 employee-consumer 公开的服务。
如今假设因为某种缘由,employee-producer 公开的服务会抛出异常。咱们在这种状况下使用 Hystrix 定义了一个回退方法。这种后备方法应该具备与公开服务相同的返回类型。若是暴露服务中出现异常,则回退方法将返回一些值。
八、什么是 Hystrix 断路器?咱们须要它吗?
因为某些缘由,employee-consumer 公开服务会引起异常。在这种状况下使用Hystrix 咱们定义了一个回退方法。若是在公开服务中发生异常,则回退方法返回一些默认值。
若是 firstPage method() 中的异常继续发生,则 Hystrix 电路将中断,而且员工使用者将一块儿跳过 firtsPage 方法,并直接调用回退方法。 断路器的目的是给第一页方法或第一页方法可能调用的其余方法留出时间,并致使异常恢复。可能发生的状况是,在负载较小的状况下,致使异常的问题有更好的恢复机会 。
九、什么是 Netflix Feign?它的优势是什么?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。
Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定性。
在 employee-consumer 的例子中,咱们使用了 employee-producer 使用 REST模板公开的 REST 服务。
(3)利用 REST 模板来使用服务。 前面的代码以下
@Controller
public class ConsumerControllerClient {
@Autowired
private LoadBalancerClient loadBalancer;
public void getEmployee() throws RestClientException, IOException {
ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
System.out.println(serviceInstance.getUri());
String baseUrl=serviceInstance.getUri().toString();
baseUrl=baseUrl+"/employee";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}
catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}复制代码
以前的代码,有像 NullPointer 这样的例外的机会,并非最优的。咱们将看到如何使用 Netflix Feign 使呼叫变得更加轻松和清洁。若是 Netflix Ribbon 依赖关系也在类路径中,那么 Feign 默认也会负责负载平衡。
十、什么是 Spring Cloud Bus?咱们须要它吗?
考虑如下状况:咱们有多个应用程序使用 Spring Cloud Config 读取属性,而Spring Cloud Config 从 GIT 读取这些属性。
下面的例子中多个员工生产者模块从 Employee Config Module 获取 Eureka 注册的财产。
若是假设 GIT 中的 Eureka 注册属性更改成指向另外一台 Eureka 服务器,会发生什么状况。在这种状况下,咱们将不得不从新启动服务以获取更新的属性。
还有另外一种使用执行器端点/刷新的方式。可是咱们将不得不为每一个模块单独调用这个 url。例如,若是 Employee Producer1 部署在端口 8080 上,则调用 http:// localhost:8080 / refresh。一样对于 Employee Producer2 http://localhost:8081 / refresh 等等。这又很麻烦。这就是 Spring Cloud Bus 发挥做用的地方。
Spring Cloud Bus 提供了跨多个实例刷新配置的功能。所以,在上面的示例中,若是咱们刷新 Employee Producer1,则会自动刷新全部其余必需的模块。若是咱们有多个微服务启动并运行,这特别有用。这是经过将全部微服务链接到单个消息代理来实现的。不管什么时候刷新实例,此事件都会订阅到侦听此代理的全部微服务,而且它们也会刷新。能够经过使用端点/总线/刷新来实现对任何单个实例的刷新。
11.springcloud断路器的做用
当一个服务调用另外一个服务因为网络缘由或自身缘由出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源致使更多的请求等待,发生连锁效应(雪崩效应)
断路器有彻底打开状态:一段时间内 达到必定的次数没法调用 而且屡次监测没有恢复的迹象 断路器彻底打开 那么下次请求就不会请求到该服务
半开:短期内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭
十二、什么是SpringCloudConfig?
在分布式系统中,因为服务数量巨多,为了方便服务配置文件统一管理,实时更新,因此须要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
(3)启动类添加注解@EnableConfigServer
1三、Spring Cloud Gateway?
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关做为流量的,在微服务系统中有着很是做用,网关常见的功能有路由转发、权限校验、限流控制等做用。
使用了一个RouteLocatorBuilder的bean去建立路由,除了建立路由RouteLocatorBuilder可让你添加各类predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各类过滤器,用来对请求作各类判断和修改。
欢迎你们关注个人公众号【程序员追风】,2019年多家公司java面试题整理了1000多道400多页pdf文档,文章都会在里面更新,整理的资料也会放在里面。java
最后
欢迎你们一块儿交流,喜欢文章记得关注我点个赞哟,感谢支持!