1、什么是Spring Cloud
Spring Cloud流应用程序是基于springboot的spring集成应用程序,提供与外部系统的集成,Spring Cloud Task(可以让你更简单的创建运行短时微服务),一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
2、使用Spring Cloud有什么优势?
使用Spring Boot开发分布式微服务时,我们面临以下问题,springcloud可以帮我们这解决这些问题:
1.与分布式系统相关的复杂性-这种开销包括网络问题、延迟开销、带宽问题、安全问题。
2.服务发现-服务发现工具管理集群中的流程和服务如何查找和互相交涉。它涉及一个服务目录,在该目录注册服务,然后能够查找并且连接到该目录的服务。
3.冗余-分布式系统中的冗余问题。
4.负载均衡–改善多个计算资源的工作负荷,例如计算机和计算机集群,网络链路,中央处理单元或磁盘驱动器的分布。
5.性能问题,由于各种运营开销导致的性能问题。
6.部署复杂性-Devops技能的要求
3.服务注册和发现是什么意思?springcloud如何实现?
当开发项目时,通常在配置文件进行所有配置,随着越来越多的服务开发和部署,添加和修改这些属性比较复杂,有些服务可能会下降,某些位置也会发生变化,手动更改可能会产生很多问题。Eureka服务注册和发现可以解决这些问题,所有服务都注册到Eureka服务器上并通过调用Eureka服务器查找,因此无需处理服务地点的任何更改和处理。
4.负载均衡的意义是什么?
**负载均衡可以改善计算机,计算机集群,网络连接,中央处理单元或磁盘驱动器等多种资源的工作负载分布。**负载均衡质在优化资源的使用,最大化吞吐量,最小化响应时间并且避免组合单一资源的过载。作用在多个组件而不是单个组件可能会通过冗余来提高可靠性和可用性。负载均衡通常涉及专用软件和硬件,例如多层交换机或域名系统服务器进程。
5.什么是Hystrix?它如何实现容错?
Hystrix是一个延迟和容错库,质在隔离远程系统,服务和第三方库的访问点,当出现的故障是不可避免的故障时;停止级联故障并在复杂的分布式系统中实现弹性。
6.什么是Netflix Feign?他的优点是什么?
Feign的第一个目标是约束的请求的复杂性统一到http apis,而不考虑其稳定性。个人理解简化服务调用者调用服务提供者的url。
7.什么是Spring Cloud Bus?我们需要它吗?
由于多个应用程序使用Spring Cloud Config(读取配置文件的微服务),而Spring Cloud Config从git读取这些属性。当git仓库中的配置文件属性发生改变时,其它微服务不能及时读取到属性的改变(需要重启微服务重新读取),Spring Cloud Bus就为我们提供了跨多个实例刷新配置的功能。
8.什么是微服务?
1.微服务是一种架构风格,也是一种服务。
2.微服务的颗粒比较小,一个大型的复杂软件由多个微服务组成。
3.采用的UNIX设计的哲学,每种服务只做一件事,是一种松散耦合的能独立开发和部署的无状态化服务(独立扩展、升级和可替换)。
9.微服务之间是如何独立通讯的?
1.Dubbo使用的是RPC通信,二进制传输,占用带宽小。
2.Spring Cloud使用的是HTTP RESTful方式。
10.springboot和springcloud
springboot是spring的一套快速配置脚手架,可以基于springboot快速开发单个微服务,springcloud是基于springboot实现云应用开发工具;
springboot专注于快速、方便集成单个为服务个体,springcloud关注全局服务治理。
springboot使用了默认大于配置的理念,很多集成方案已经选好,能不配置就不配置。
springcloud的一大部分都是基于springboot实现的。
11.什么是服务熔断?什么是服务降级?
服务熔断:如果检测到频繁超时,就把服务调用者的请求直接短路,不能实际调用,而是直接返回一个默认值。
服务降级:consumer(服务调用者)发现某个provider出现异常,则会之间返回固定的默认值,如果多次超时则可能触发服务熔断。如果provider发现流量激增,为了保护自身的稳定性,也可能考虑服务降级。
12.微服务的优缺点?
优点:
单一职责:每个微服务仅负责自己的业务领域。
自治:一个微服务是一个独立的实体,可以独立部署、升级,服务与服务之间通过REST等形式的标准接口通信,并且一个微服务实例可以替换成另一种实现,而对其他的微服务不产生影响。
逻辑清晰:由于单一职责特性看起来比较逻辑清晰,易于维护。
简化部署:如果是单系统的话修改一处需要重新部署整个项目,微服务的话可单独部署一个服务。
可扩展:业务拓展方便。
灵活组合:
技术异构:不同微服务,更具自己的业务特点可选择不同的技术架构。
缺点:
复杂度高:服务调用要考虑被调用方的各种情况,以及微服务之间的事务性操作可能采用不同的数据库,无法保证数据库本身的事务机制保证一致性,需要引入二阶段提交等技术。
运维复杂:由于多个为服务的构成,需要设计一个良好的监控系统对各个服务进行监控。
通信延迟:服务之间调用会有时间损耗。
13.eureka服务注册与发现原理
每30s发送心跳检测重新进行租约,如果客户端不能多次租约,它将在90s内从服务器注册中心移除。
注册信息和更新会被复制到其他eureka节点,来自任何区域的客户端可以查找到注册中心的信息,每30s发生一次赋值来定位他们的服务,并进行远程调用。
客户端可以缓存一些服务实例,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的。
14.dubbo的服务注册和发现原理
1.服务容器负责启动,运行服务提供者
2.服务提供者启动时,向注册中心注册自己提供的服务
3.服务消费者启动时,向注册中心订阅自己所需的服务
4.注册中心返回服务提供者地址列表给消费者,如果变更注册,注册中心将基于长链接推送变更的数据给消费者。
5.服务消费者,从提供的地址列表并基于负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6.服务消费者和服务提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
15.springcloud核心组件及其作用,以及springcloud的工作原理
核心组件:
Eureka:各个服务启动时,EurekaClient会将服务注册到EurekaServer,并且EurekaClient还可以反过来从EurekaServer拉去注册表,从而知道其他的服务地址。
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择。
Feign:基于Feign的动态代理,根据注册和选择的机器,拼接请求URL地址,发送请求
Hytrix:发起请求是ton过Hystrix的线程池来走的,不同的服务走不同的线程池,实现不同服务间的调用隔离,避免服务雪崩问题。
Zuul:如果前端、移动端调用后端系统,统一从Zuul网关进入,,由Zuul网管转发请求给对应的服务。
16.eureka的缺点:
某个服务不可用时,各个Eureka Client不能及时知道,需要1-3个周期才能感知到,但是基于Netfix的服务调用都会使用Hytrix来容错和降级,当服务不可用时通过Hytrix也能及时感知,通过熔断机制来降级服务,弥补了客户端不能及时发现的缺陷。
17.Eureka的缓存机制:
第一层缓存:readOnlyCacheMap,是一个JVM只读缓存,主要是为了供客户端获取注册信息时使用,其缓存更新依赖于定时器的更新,通过和readWriteCacheMap的值做对比,如果数据不一致,则以readWriteCacheMap的数据为准。
第二层缓存:readWriteCacheMap,本质上是Guava缓存:此处存放的是最终缓存,当服务下线,过期,注册,状态变更,都会清除这个缓存里的数据。然后通过CacheLoader进行缓存加载,在进行加载的时候会通检测里面有没有该数据,如果没有则会去加载,加载成功后放入缓存。
缓存机制:设置了一个每30s的定时任务,定时去获取服务端的注册信息,获取之后放入缓存。
18熔断原理,以及如何恢复
首先当服务健康(一切请求都正常)的时候熔断器处于关闭状态,当请求失败的次数达到阀值,熔断器打开,请求被禁止通过,经过一段时间后,熔断器进入半开状态,允许部分请求通过,若能正常访问,则熔断器再次进入关闭状态,允许全部请求访问。
19Ribbon和Feign的区别
它们两个都是用来服务调用的
启动类注解不同,Ribbon是@RibbonClient,Feign是@EnableFeignClient
服务指定位置不同,Ribbon是@RibbonClient,Feign是在定义抽象方法的接口中使用@FeignClient上声明
调用方式不同,Ribbon需要自己构建http请求,然后通过RestTemplate发送给其它服务。Feign需要降调用的方法定义成抽象对象。
20服务网关的作用
简化客户端调用复杂度,统一处理外部请求
数据裁剪以及聚合,根据不同的接口需求,对数据加工后对外。
多渠道支持,针对不同的客户端提供不同的网关支持。
遗留系统的微服务化改造,可以作为新老系统的中转组件。
统一处理调用过程中的安全和权限问题
21.访问RESTful微服务的方法是什么?
1.使用负载均衡的REST模板
2.使用多个微服务