1.SpringCloud有哪些核心功能?SpringCloud主要提供以下核心功能:分布式/版本化配置分布式/版本化配置管理服务注册与发现服务注册与发现Routing路由Service-to-service调用端到端调用负载均衡负载均衡断路器全局锁全局lockLeadershipelectionandclusterstateElectionandclusterstatemanagementDistributedmessaging分布式消息2.SpringCloud有哪些组件?由于SpringCloudNetflix即将进入维护模式,以下是Netflix阿里其他注册中心EurekaNacosZookeeper、Consul、EtcdfuseHystrixSentinelResilience4j网关ZuulnoSpringCloudGateway负载均衡RibbonDubbospring-cloud-loadbalancer3的一些备选组件。SpringCloud和SpringBoot的区别和关系?SpringBoot专注于快速轻松地开发单个微服务。SpringCloud是一个全球化的微服务协同治理框架和一整套落地解决方案。它集成和管理了SpringBoot开发的单个微服务,为每个微服务提供配置管理和服务发现。、断路器、路由、微代理、事件总线等的集成服务。SpringBoot可以脱离SpringCloud独立使用,但是SpringCloud离不开SpringBoot,是一种依赖关系。总结:SpringBoot专注于快速便捷地开发单个微服务。SpringCloud专注于全局服务治理框架。4、SpringCloud的注册中心可以用什么在SpringCloud中,可以使用的注册中心还有很多,如下:spring-cloud-netflix-eureka-server和spring-cloud-netflix-eureka-client,基于尤里卡实现。spring-cloud-alibaba-nacos-discovery,基于Nacos实现。spring-cloud-zookeeper-discovery,基于Zookeeper实现。5.SpringCloud的注册和发现过程,当以Eureka为注册中心启动服务时,会生成服务的基本信息对象InstanceInfo,然后在服务启动时注册到服务管理中心,之后服务注册完成后,会从服务管理中心拉取所有服务的信息,缓存到本地后,服务会按照配置的指定时间间隔发送心跳消息。如果服务管理中心在90s内没有收到服务更新,则认为该服务挂掉并注册该服务。信息删除服务停止前,会主动发送停止请求,服务管理中心将删除该服务的信息。如果Eureka收到的心跳包小于正常值的85%(可配置),就会进入自我保护模式。这种模式下,Eureka不会删除任何服务信息6.说说SpringCloud的负载均衡,为什么说负载均衡简单,随着业务的发展,单个服务无法支持访问的需求,所以构建多个服务,形成一个簇。那么接下来要解决的是,每个请求调用哪个服务,也就是需要做负载均衡。目前有两种负载均衡模式:客户端模式和服务器模式。在SpringCloud中,我们使用的是前者,即客户端模式。在计算中,负载平衡改善了工作负载在多个计算资源(例如计算机、计算机集群、网络链接、中央处理器或磁盘驱动器)之间的分布。负载平衡旨在优化资源使用、最大化吞吐量、最小化响应时间并避免使任何单个资源过载。使用多个组件进行负载平衡而不是单个组件可以通过冗余提高可靠性和可用性。负载平衡通常涉及专门的软件或硬件,例如多层交换机或域名系统服务器进程。7、Ribbon有哪些负载均衡算法?RoundRobinRule:默认轮询方式RandomRule:随机方式WeightedResponseTimeRule:根据响应时间分配权重的方法,响应越快,分配的值越大。BestAvailableRule:选择并发量最少的方法RetryRule:如果在配置时间段内服务器选择失败,总是尝试使用subRule选择一个可用的服务器ZoneAvoidanceRule:根据性能和可用性选择。AvailabilityFilteringRule:过滤掉那些因为持久连接失败而标记为电路跳闸的后端服务器,并过滤掉那些高并发的后端服务器(活跃连接数超过配置的阈值)8.Ribbon如何与Eureka集成?首先,Ribbon会从EurekaClient获取相应的服务列表。Ribbon然后使用负载平衡算法来获取使用的服务。最后,Ribbon调用相应的服务。9.Feign实现原理Feign的一个关键机制是动态代理的使用。我们来看下图,结合图来分析:首先,如果你在一个接口上定义了@FeignClient注解,Feign会为这个接口创建一个动态代理。那么调用那个接口的话,其实质就是调用Feign创建的动态代理,是核心中的核心。Feign的动态代理会根据你在接口上的@RequestMapping等注解动态构造你要请求的服务地址。最后针对这个地址发起请求,解析响应。10、Feign和Ribbon的区别启动类使用不同的注解。功能区使用@RibbonClient。Feign正在使用@EnableFeignClients。服务的指定位置不同。功能区设置在@RibbonClient注释上。Feign是在定义声明方法的接口中的@FeignClient注解上设置的。调用的用法不同。Ribbon需要自己构建Http请求,模拟Http请求然后使用RestTemplate发送给其他服务。步骤相当繁琐。Feign采用的是使用接口的方式,将需要调用的其他服务的方法定义为声明式方法,不需要自己构造Http请求。但是需要注意的是,声明的方法的注解和方法签名应该与提供服务的方法完全一致。11.Hystrix隔离策略?Hystrix有两种隔离策略:线程池隔离信号量隔离在实际场景中,多采用线程池隔离,因为它支持超时功能。12、什么是Hystrix断路器?Hystrix断路器是通过HystrixCircuitBreaker实现的。HystrixCircuitBreaker有三种状态:CLOSED:关闭OPEN:打开HALF_OPEN:半开其中,当断路器处于OPEN状态时,链路处于不健康状态。命令执行时,直接调用回退逻辑,跳过正常逻辑。HystrixCircuitBreaker的状态转换如下图所示:红线:一开始,断路器处于CLOSED状态,链路处于健康状态。当满足以下条件时,断路器从CLOSED状态变为OPEN状态:在周期内(可配置,HystrixCommandProperties.default_metricsRollingStatisticalWindow=10000ms),请求总数超过一定数量(可配置,HystrixCommandProperties.circuitBreakerRequestVolumeThreshold=20)。错误请求占总请求的比例超过一定比例(可配置,HystrixCommandProperties.circuitBreakerErrorThresholdPercentage=50%)。绿线:断路器处于OPEN状态。命令执行时,如果当前时间超过断路器打开时间一定时间(HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds=5000ms),断路器会变为HALF_OPEN状态,尝试调用正常逻辑,打开根据是否执行成功或关闭保险丝[蓝线]。13.为什么需要网关服务?使用网关服务,我们实现一个统一的功能:动态路由灰度发布健康检查限流熔断认证:全部支持HMAC、JWT、Basic、OAuth2.0等常用协议认证:权限控制、IP黑白名单,还有OpenResty特性可用性和高性能14.Fuse和降级的区别Fuse是指一旦发生故障,底层服务将被打断;降级需要对服务进行分类,丢弃有故障的服务,换成轻量级的解决方案。15、springcloud和dubbo的区别DubboSpringCloud服务注册中心ZookeeperSpringCloudNetfilxEureka服务调用方式RPCRESTAPI服务监控Dubbo-monitorSpringBootAdmin断路器不完善SpringCloudNetfilxHystrix服务网关没有SpringCloudNetfilxZuul分布式配置没有SpringCloudConfig服务跟踪没有SpringCloudSleuth消息栈没有SpringCloudBus数据流没有SpringCloudStream批处理任务没有SpringCloudTask最大的区别:SpringCloud摒弃了Dubbo的RPC通信,使用了基于HTTP的REST。严格来说,这两种方法各有利弊。后者虽然在一定程度上牺牲了服务调用的性能,但也避免了上述原生RPC带来的问题。而且,REST比RPC更灵活。服务提供者和调用者仅依赖一纸契约,不存在代码层面的强依赖。这在强调快速演化的微服务环境中比较合适。解决的问题域不同:Dubbo定位为RPC框架,而SpringCloud的目标是微服务架构下的一站式解决方案4.Dubbo和SpringCloud比较分布式/版本化配置(distributed/versioncontrolconfiguration)服务注册anddiscovery(服务注册和发现)Routing(路由)Service-to-servicecalls(服务到服务调用)Loadbalancing(负载均衡配置)CircuitBreakers(断路器)Distributedmessaging(分布式消息管理)
