SpringCloud精通
什么是微服务?
微服务是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调,最终对外提供服务。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
从技术维度来说:微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的独立服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够单独启动或销毁。
微服务之间是如何通信?
第一种:远程过程调用,即RPC(Remote Procedure Invocation)直接通过远程过程调用来访问别的service,如:RESTful、Apache。
第二种:消息使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。如:Apache Kafka、RabbitMQ
什么是SpringCloud?
Spring Cloud应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。Spring Cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
SpringCloud有什么优势?
使用Spring Boot开发分布式微服务时,我们面临以下问题
1、分布式系统构建的复杂性:包括网络问题,延迟开销,带宽问题,安全问题。
2、服务-服务发现工具管理集群中的流程和服务如何查找和互相通信:它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
3、冗余:分布式系统中的冗余问题。
4、负载均衡:负载均衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
5、性能问题:由于各种运营开销导致的性能问题。
6、部署复杂性:Devops技能的要求。
SpringCloud如何实现服务的注册和发现?
服务在发布时指定对应的服务名(服务名包括了IP地址和端口):
将服务注册到注册中心(eureka)这一过程是Springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient
同一个服务修改端口就可以启动多个实例调用方法:
传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务
作为服务注册中心,Eureka比Zookeeper好在哪里?
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。
因此,Zookeeper 保证的是CP, Eureka 则是AP。
什么是ribbon和feign,他们的区别?
SpringCloud的Netflix中提供了两个组件实现软负载均衡调用:ribbon 和 feign。
Ribbon和Feign都是用于调用其他服务的,不过方式不同
Ribbon使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法
Feign使用@FeignClient("指定服务名")调用提供方提供对外接口;
Ribbon和Feign的区别:
1),启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2),服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
3),调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可
什么是服务熔断?什么是服务降级?
服务直接的调用,比如在高并发情况下出现进程阻塞,导致当前线程不可用,慢慢的全部线程阻塞,导致服务器雪崩。
服务熔断:相当于保险丝,出现某个异常,直接熔断整个服务,而不是一直等到服务超时。
服务降级:通过维护一个自己的线程池,当线程到达阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值。
什么是Hystrix(断路器)?它如何实现容错?
Hystrix是一个【延迟和容错】库,旨在隔离远程系统,服务和第三方库的访问点,当出现不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。
在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等, Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
什么是 zuul路由网关?
Zuul 包含了对请求的路由和过滤两个最主要的功能:
路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,
过滤器功能:负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
注意:Zuul服务最终还是会注册进Eureka, 提供=代理+路由+过滤 三大功能
什么是SpringCloud Config分布式配置中心?
SpringCloud Config分布式配置中心:为微服务架构中的微服务提供集中化的外部配置支持,为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
Config分布式配置中心能干嘛?
1),集中管理配置文件, 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release;
2),运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取,配置自己的信息;
3),当配置发生变动时,服务不需要重启即可感知到配置的变化, 并应用新的配置;