精华内容
下载资源
问答
  • 首先本机先要安装以下环境,建议先学习了解springboot和springcloud基础知识。 git java8 maven 开发环境搭建 linux和mac下可在项目根目录下执行 ./install.sh 快速搭建开发环境。如要了解具体的步骤,请看如下...
  • spring cloud is aim to support micro-services practice. amqps For project which needs MQ services. beans For entities of projects. caches For cache applications ,such as memcached,redis,MongoDB. ...
  • SpringCloud 之熔断监控 Hystrix Dashboard SpringCloud 之监控数据聚合 Turbine 配置中心 SpringCloud 之配置中心 Config(Git 版) SpringCloud 之配置中心 Config(高可用) SpringCloud 之配置中心 ...
  • 那家公司的面试官突然问我:SpringCloud怎么配置?这个我怎么说啊,项目中的配置都是稍加修改网上抄过来的。我只能心里mmp,嘴上笑嘻嘻地说了SpringCloud的几个还记得的配置。说实话很多配置是不用死记硬背的,官网...

    22eaa52c46dd2e969fe441b177d97e95.png

    之前面试一家公司。

    那家公司的面试官突然问我:SpringCloud怎么配置?

    3fffbff897bb2334c0f13697013f61b6.png

    这个我怎么说啊,项目中的配置都是稍加修改网上抄过来的。

    我只能心里mmp,嘴上笑嘻嘻地说了SpringCloud的几个还记得的配置。

    说实话很多配置是不用死记硬背的,官网上都是样式模板的。

    但是面试官问你这种问题,也是有道理的。

    毕竟谁还不是个社会人呢,随便看看面试材料就去面试的大把人在。

    我们心里明白就好。

    写这篇文章主要是服务刚入行的同学,大牛不要嫌文章啰嗦。

    今天我就教大家怎么配置SpringCloud,10分钟搞定。


    首先准备工作:

    Java的配置我就不说了

    IDEA下载

    用过一次之后,再也不想用eclipse

    IDEA下载www.jetbrains.com

    安装Spring相关组件

    File->Setting->Plugins,搜索Spring,下载Spring Assistant,重启IDEA

    3ebcbd586e43b9a79961fc14498e9be0.png

    Maven的设置,如果没有配置的话可能你的时间和C盘空间就会火葬场

    毕竟时间就是金钱呐,兄弟~~

    Maven下载maven.apache.org

    750f1ffdf88fa22f3af5c4e726140ace.png

    解压后放在D盘,在Maven文件夹中建m2文件夹,在m2文件夹中建repository文件夹,我是随大流这样建,之后Maven下载的包都会放在repository

    当然了,你可以随意建,叫“学习资料”或者“不可删除的私密文件”都可以,看你心情,嘿嘿~~

    进入apache-maven-3.6.3conf修改settings.xml

    如下配置刚才设置的repository的绝对路径

    1c2217437b06ba6fd226817fe7cf554c.png

    继续配置阿里的镜像,加快下载速度,找到mirrors标签

    a8551a7a9d1db662801f655091738543.png
        <mirror>
          <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>

    配置IDEA,设置你的settings.xml文件的位置

    24037fba0b59d2c3154fe47bfe8e52ce.png

    按红色方框的按钮,刷新Maven

    39980bc98446311c7d290bf511d7220d.png

    第一步:建立Eureka注册中心,用于服务提供者发布服务

    396e6671fe494b0cdf4b4313dde54a92.png

    3eb4ff6224dd79e4c699b04e925f9f22.png

    718a9a6755f9e0f9e43ce02f70d3063d.png

    47fbad3657cd533bdbe7c9911fca3d38.png

    pom.xml出现如下依赖

    16129a0ed3d5d881c84bef5a94e1bc89.png

    在application中加入注解@EnableEurekaServer,申明此处为服务的注册中心。

    aec7bea6e5d22ef5803d23cf071c203e.png

    yml中的加入如下配置:registerWithEureka 和 fetchRegistry 设置为false,表明自己属于服务中心主体

    可能resource底下不是yml,而是application.porperties,重新rename该文件为yml即可

    配置如下,注意空格

    server:
      port: 8761
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    启动服务,登陆浏览器查看。http://localhost:8761/

    启动项目很简单,run 你的Application.java就好啦

    SpringBoot自带Tomcat服务

    如下网页就是你的Eureka注册中心的管理页面

    b35d2c4a19d92b3965fd58e0eff462c3.png

    第二步:服务提供者

    创建提供者的moudle方式和上面创建注册中心的方式一样

    。。。。。。掠过

    44714885094c2825225230988dcf0e7a.png

    在application中加入注解@EnableEurekaClient,表明自己属于一个服务提供者。

    58c8acb9258102d91061b9058b326b84.png

    写个测试用例

    @RestController
    public class TestProviderController {
        @RequestMapping("/hello")
        public String hello(){
            return "Hello! I am Provider.";
        }
    }

    配置yml,端口一定不能一样,其他的你们随意,阿猫,阿狗也行

    server:
      port: 8762
    eureka:
      instance:
        hostname: localhost
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/ #注册中心的网址
    spring:
      application:
        name: provider

    启动服务,有PostMan可以用这个测试一下,也可以直接用浏览器测试下

    PostMan下载www.postman.com
    f463c04f578cfd9bf3c8a021fba44e04.png
    Postman教程大全www.jianshu.com
    949b0ca6ae6095b237ea12c3dcbef4c3.png

    9c7a553db03166a98e79892ea9207b30.png

    5e53148371d10aed19c15b0e1f5c4ebe.png

    第三步:消费者

    和上面一样的方式创建消费者module

    。。。。。。

    pom.xml添加如下依赖

                    <dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    			<version>1.4.4.RELEASE</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-ribbon</artifactId>
    			<version>1.4.4.RELEASE</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<!--	断路器	-->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-hystrix</artifactId>
    			<version>1.4.4.RELEASE</version>
    		</dependency>

    在Application.java添加@EnableDiscoveryClient标签

    0c63af329643050fe984b9788294b8ff.png

    创建RestTemplate

    @EnableDiscoveryClient
    @SpringBootApplication
    public class DemoApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    	}
    
    	@Bean
    	@LoadBalanced
    	RestTemplate restTemplate(){
    		return new RestTemplate();
    	}
    
    }

    yml配置

    server:
      port: 8763
    eureka:
      instance:
        hostname: localhost
      client:
        serviceUrl:
          defaultZone: http://localhost:8761/eureka/ #注册中心的网址
    spring:
      application:
        name: consumer

    创建Service和Controller

    Service

    @Service
    public class TestService {
        @Autowired
        RestTemplate restTemplate;
        private static final String URL="http://provider/hello";
    
        public String callHello(){
            return restTemplate.getForObject(URL,String.class);
        }
    }
    

    Controller

    @RestController
    public class TestConsumerController {
        @Autowired
        private TestService testService;
    
        @RequestMapping("callHello")
        public String callHello(){
            return testService.callHello();
        }
    }
    

    浏览器测试

    22b8479936159fbd0d1c2edff9094930.png

    SpringCloud的相关配置已经搞定了,是不是很简单

    一共三个角色,10分钟都不用


    下面是一些额外的配置,不想阅读的可以掠过

    1.增加断路器

    在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。为了解决这个问题,业界提出了断路器模型。
    Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:

    738309b38c1b288c8dbc28e9dea38b0c.png

    较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。

    8dea1ba683bdfe292f566c04167fc5a0.png

    在application中增加@EnableHystrix注解表示开启断路器

    0ba5897bf212c2c30a7771aa88a324dd.png

    在Service上加入@HystrixCommand

    c55d7129e052f083ecffe6e733b1f42e.png

    其中fallbackMethed指的就是熔断方法,当调用方法失败出错时,就会执行fallback的方法,保证服务不会雪崩

    做个测试,将服务提供者停掉,再次调用方法

    fbfc72a136c03512e6c2a2ef07759604.png

    2.Open-Feign的使用

    有了EurekaRestTemplateRibbon, 我们就可以愉快地进行服务间的调用了,但是使用RestTemplate还是不方便。

    每次都得写URL很麻烦,如果能像原来调Service一样就好了

    所以我们引入Open-Feign

    1.pom.xml添加依赖

                    <dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-openfeign</artifactId>
    		</dependency>

    2.消费者Application添加@EnableFeignClients标签

    6f5ab548d4b71c52427525ff25df64f3.png

    3.类似如下创建调用服务的Service

    //服务提供者的名字
    @FeignClient("provider")
    @Component
    public interface TestFeignClient {
        @RequestMapping(value = "hello",method = RequestMethod.GET)
        public String callHello();
    }

    之后就能像原来Service一样调用啦

    Demo代码github.com
    a4599688a70f66fe1a30f1540d201987.png

    喜欢的话可以点个赞咯~~~

    展开全文
  • PS:最近面试了一家公司,其中问到SpringCloud的几大大组件,当时脑子一懵,什么玩意?面试结束之后,才回过神来,真想给自己一嘴巴子。于是痛定思痛,狠补了之前拉下的。哎,人总是在前行的过程中遗忘掉某些东西,...

    PS:最近面试了一家公司,其中问到SpringCloud的几大大组件,当时脑子一懵,什么玩意?面试结束之后,才回过神来,真想给自己一大嘴巴子。于是痛定思痛,狠补了之前拉下的。哎,人总是在前行的过程中遗忘掉某些东西,有些东西忘了也就忘了,而有些是我们舍本逐末导致的。。。

    springcloud

    springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。
    

    通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。

    SpringCloud的组件相当繁杂,拥有诸多子项目。重点关注Netflix

    在这里插入图片描述
    总而言之,SpringCloud是在SpringBoot的基础上进行了进一步的封装。
    重点来了,SpringCloud当中最常用的五大组件!!!!
    服务发现——Netflix Eureka
    客服端负载均衡——Netflix Ribbon
    断路器——Netflix Hystrix
    服务网关——Netflix Zuul
    分布式配置——Spring Cloud Config

    Eureka
    作用:实现服务治理(服务注册与发现)

    简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。
    
    由两个组件组成:Eureka服务端和Eureka客户端。
    
    Eureka服务端用作服务注册中心。支持集群部署。
    
    Eureka客户端是一个java客户端,用来处理服务注册与发现。
    
    在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。
    

    Ribbon
    作用:Ribbon,主要提供客户侧的软件负载均衡算法。

    简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
    

    Hystrix
    作用:断路器,保护系统,控制故障范围。

    简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。
    

    Zuul
    作用:api网关,路由,负载均衡等多种作用

    简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。
    
    在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。
    

    Config
    作用:配置管理

    简介:SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
    
    这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。
    

    PS:不是温故而知新,我只是在一本正经的发博客。。。

    展开全文
  • springcloud常见面试

    2021-01-21 01:11:34
    1.SpringCloud分布式开发五大组件 服务发现——Netflix Eureka 客服端负载均衡——Netflix Ribbon 断路器——Netflix Hystrix 服务网关——Netflix Zuul 分布式配置——Spring Cloud Config 2.SpringBoot和Spring...

    springcloud常见面试题

    1.SpringCloud分布式开发五大组件

    服务发现——Netflix Eureka

    客服端负载均衡——Netflix Ribbon

    断路器——Netflix Hystrix

    服务网关——Netflix Zuul

    分布式配置——Spring Cloud Config

    2.SpringBoot和SpringCloud的区别?

    SpringBoot专注于快速方便的开发单个个体微服务。

    SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,

    为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

    SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系

    SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

    3.Spring Cloud 和dubbo区别?
    (1)服务调用方式 dubbo是RPC springcloud Rest Api

    (2)注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper

    (3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

    4.什么是 Hystrix(嗨死椎)断路器?它如何实现容错?
    Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。

    通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。

    现在假设由于某种原因, 公开的服务会抛出异常。我们在这种情况下使用 Hystrix 定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。

    5.Spring Cloud断路器的作用
    当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)

    断路器有完全打开状态:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务

    半开:短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭

    关闭:当服务一直处于正常状态 能正常调用

    6.什么是Spring Cloud Config?
    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

    使用:

    (1)添加pom依赖

    (2)配置文件添加相关配置

    (3)启动类添加注解@EnableConfigServer (e na ble)

    7. 微服务之间是如何独立通讯的
    1.远程过程调用(Remote Procedure Invocation):

       也就是我们常说的服务的注册与发现
    
       直接通过远程过程调用来访问别的service。
    
       优点:
    
       简单,常见,因为没有中间件代理,系统更简单
    
       缺点:
    
       只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
    
       降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
    

    2.消息:

       使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
    
       优点:
    
       把客户端和服务端解耦,更松耦合
    
       提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
    
       支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
    
       缺点:
    
       消息中间件有额外的复杂
    

    8. 微服务的优缺点分别是什么?说下你在项目开发中碰到的坑
    优点

    每一个服务足够内聚,代码容易理解

    开发效率提高,一个服务只做一件事

    微服务能够被小团队单独开发

    微服务是松耦合的,是有功能意义的服务

    可以用不同的语言开发,面向接口编程

    易于与第三方集成

    微服务只是业务逻辑的代码,不会和HTML,CSS或者其他界面组合

        开发中,两种开发模式
                 前后端分离
                 全栈工程师
    

    可以灵活搭配,连接公共库/连接独立库

    缺点

    分布式系统的负责性

    多服务运维难度,随着服务的增加,运维的压力也在增大

    系统部署依赖

    服务间通信成本

    数据一致性

    系统集成测试

    性能监控

    9.SpringCloud与Dubbo区别

    SpringCloud用Eureka,Dubbo用Zookeeper
    1.注册的服务的区别
    Dubbo是基于java接口及Hession2序列化的来实现传输的,Provider对外暴露接口,Consumer根据接口的规则调用。也就是Provider向Zookeeper注册的是接口信息,Consumer从Zookeeper发现的是接口的信息,通过接口的name,group,version来匹配调用。Consumer只关注接口是否匹配,而对此接口属于什么应用不关心。当然接口的注册信息里会包含应用的ip,hostname等。

    SpringCloud的服务发现是基于Http协议来实现的,Provider对外暴露的是应用信息,比如应用名称,ip地址等等,Consumer发现的是应用的信息,当调用的时候随机选择一个Provider的IP地址,应用名称,然后依据Http协议发送请求。Consumer关注的是应用名称,根据应用名称来决定调用的是哪个服务集群,然后对此名称对应的服务集群做负载均衡。Provider接受到请求后,根据内置的SpringMVC来匹配路由处理请求。

    2 . Server集群服务信息同步的区别

    Dubbo使用Zookeeper做服务发现和治理,Zookeeper是一个分布式协调框架,其有很多很实用的功能,服务发现仅仅是其中的一个。Zookeeper基于著名的CAP理论中的C(一致性),P(分区可用性)实现,它的ZAB(zookeeper atomic broadcast protocol)协议,保证了集群里状态的一致性。Client的每一个事务操作都由Leader广播给所有Follower,当超过半数的Follower都返回执行成功后,才执行事务的ack。对于因网络崩溃或者宕机等问题而执行失败的zookeeper节点,zookeeper会基于zab的崩溃恢复机制来处理,这里不再讲述。每一个操作都需要过半数的zookeeper节点执行成功才确认成功,那么当zookeeper集群过半数节点出现问题时,服务发现功能就不可用。

    SpringCloud使用Eureka做服务发现和治理,它是一个专门用于服务发现和治理的框架,其基于CAP理论中的A(可用性),P(分区可用性)实现。EurekaServer节点间的服务信息同步是基于异步Http实现的。每隔Server节点在接收Client的服务请求时,立即处理请求,然后将此次请求的信息拷贝,封装成一个Task,存入Queue中。Server初始化时会启动一个线程定期的从TaskQueue中批量提取Task,然后执行。服务同步不保证一定成功,虽然有失败重试,但超过一定时限后就放弃同步。当然其有一个特性,当服务丢失后,同步的操作返回400,404后会立即将最新的服务信息同步过去,因此即使中途同步失败,不会对后续的同步有影响。

    3 . 服务更新机制的区别

    Dubbo使用Zookeeper做服务发现和治理,订阅Zookeeper下相应的znode。当节点发生变化,比如有新的元素增加,或者旧的元素移除,Zookeeper会通知所有订阅此节点的Client,将当前的全量数据同步给各Client,Dubbo里根据最新的数据来做相应处理,移除下线的,初始化新增的。每次更新都同步全量数据。

    Eureka在启动时向Server进行一次全量拉取,获取所有的可用服务信息,之后默认情况下都是进行增量拉取。Server会将有变化的服务信息放在一个Queue里,Client每次同步时仅获取增量信息,根据信息里的操作类型,服务信息来对当前持有的服务做相应的处理,移除下线的,初始化新增的等。每次更新仅同步增量数据,也就是更新的数据。

    4 . 服务更新反馈机制的区别

    Dubbo订阅Zookeeper下相应的节点,当节点的状态发生改变时,Zookeeper会立即反馈订阅的Client,实时性很高。

    Eureka Server在接收到Client的更新操作,或者移除服务信息时,仅仅会将更新消息存放入recentlyChangedQueue中,不会主动的反馈其他Client。其他Client只有在拉取服务增量信息时才会感知到某个服务的更新,延时最大为30S,也就是拉取周期。

    5 . 服务信息回收机制的区别

    Dubbo Provider初始化时会创建一个Zookeeper Client,专门用于与Zookeeper集群交互。维持与集群间的长连接,定时发送心跳,维护Zookeeper上自身节点的存在。节点类型是临时节点,也就是当心跳超时或者长连接断开时,会立即移除Provider对应的节点。
    Dubbo Consumer初始化时也会创建一个Zookeeper Client,专门用于与Zookeeper集群交互。维持长连接,创建EvenetListener,监听Provider节点的变动情况。当Provider节点新增或者移除时,Zookeeper会广播这个事件,然后将此节点的当前值(剩下的所有接口信息)发送给那些注册了此节点监听器的Client。Consumer获取到对应Provider节点下的所有接口信息后,移除已下线的,创建新增的。
    Zookeeper对服务信息的维护实时性和一致性比较高,但也可能因为网络问题或者集群问题导致服务不可用。

    SpringCloud的服务信息回收仅基于心跳超时,与长连接无关。当心跳超时后,EurekaServer回收服务信息,然后将此动作同步给其他Server节点。当然可能一个服务信息会存在多个Server上,多次回收操作的同步具备幂等性。也就是说服务回收只需要通知一个Server节点就可以了,回收动作会通过Server节点传播开来。EurekaServer能够回收服务信息由个重要前提:上一分钟内正常发送心跳的服务的比列超过总数的85%,如果因为网络波动等原因造成大量服务的心跳超时,那么EurekaServer会触发自我保护机制,放弃回收那些心跳超时的服务信息。服务发现组件应该优先保证可用性,Consumer能够发现Provider,即使发现的是非可用的Provider,但因为Conusmer一般具备容错机制,不会对服务的正常调用有太多影响。从这点上看Eureka的服务发现机制要比Zookeeper稍微合理一点的。

    6 . 节点性质的区别

    Dubbo只有Consumer订阅Provider节点,也就是Consumer发现Provider节点信息

    Eureka不区分Consumer或者Provider,两者都统称为Client,一个Client内可能同时含有Provider,Consumer,通过服务发现组件获取的是其他所有的Client节点信息,在调用时根据应用名称来筛选节点

    7 . 使用方式的区别

    Dubbo使用Zookeeper作为服务发现和治理的组件,所以需要搭建Zookeeper集群作为依赖。

    SpringCloud使用Eureka作为服务发现和治理组件,在Spring应用中整合Eureka还是很简单的,引入依赖,加个注解,指定集群Server的serviceUrl,其他的都可以使用默认配置即可,启动应用,Eureka集群就搭建好了。同时配合SpringCloudConfg,能够统一管理Eureka的集群配置信息,可以动态的增加或减少EurekaServer的集群节点。Eurerka会每隔15分钟根据配置上的集群信息重新生成集群节点,覆盖之前的。这种机制比Zookeeper要更优秀一些,毕竟Eureka算是Spring生态里的一环,已经被整合的非常好了,能够以很多匪夷所思的方式来使用。

    作者:yhs007
    链接:https://www.jianshu.com/p/f5bf09c0ef0b
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 文章目录一、Spring Cloud1.1 什么是 Spring Cloud1.2 Spring Cloud 优缺点1.2.1 优点1.2.2 缺点1.3 雪崩效应1.4 服务熔断1.5 服务降级二、Spring Cloud 组件2.2 Spring Cloud 五大组件2.3 服务发现与注册2.4 客户端...


    一、Spring Cloud

    1.1 什么是 Spring Cloud

    Spring Cloud 是一系列框架的集合,利用Spring Boot的开发便利性简化了分布式系统基础设施的开发,如服务注册发现、负载均衡、熔断器、服务网管、配置中心等,都可以做到一键启动和部署。

    Spring Cloud 是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。

    1.2 Spring Cloud 优缺点

    1.2.1 优点

    • 出产于Spring大家族
    • 组件丰富功能齐全,例如提供了配置管理、服务发现、断路器、微服务网关等
    • 服务拆分度高系统耦合度低,有利于资源重复利用提高开发效率

    1.2.2 缺点

    • 微服务过多,治理成本高,不利于维护系统
    • 分布式系统开发的成本高,容错,分布式事务等

    1.3 雪崩效应

    是一种因服务提供者的不可用,导致服务调用者的不可用,并将不可用逐渐放大的过程。当某一服务出现异常,拖垮整个服务链路,消耗整个线程队列,造成服务不可用,资源耗尽。

    1.4 服务熔断

    在软件系统中,由于某些服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,类似于现实世界的保险丝。

    1.5 服务降级

    当服务器压力剧增的情况下,根据当前业务情况对一些服务有策略的降级,以此释放服务器资源以保证核心任务的正常运行。


    二、Spring Cloud 组件

    2.2 Spring Cloud 五大组件

    • 服务发现与注册:eureka、nacos
    • 客户端负载均衡:ribbon、feign
    • 服务网关:zuul、zull、gateway
    • 服务熔断和降级:hystrix、sentinel
    • 分布式配置:spring cloud config

    2.3 服务发现与注册

    Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态DNS服务三大功能。

    2.4 客户端负载均衡

    2.4.1 Ribbon

    是一个基于 HTTP 和 TCP 客户端的负载均衡的工具。

    2.4.2 Ribbon 负载均衡机制

    策略 命名 说名
    RandomRule 随机策略 随机选择服务
    RoundRobinRule 轮询策略 按顺序循环选择服务
    RetryRule 重试策略 如果获取服务失败则在指定时间内会进行重试,获取可用的服务
    BestAvailableRule 最低并发策略 过滤多次访问处于断路打开状态的服务,然后选择一个并发量最小的服务
    AvailabilityFilteringRule 可用过滤策略 过滤掉故障服务和高并发服务,再选择并发较小的服务
    WeightedResponseTimeRule 响应时间加权策略 响应速度越快的服务选择权重越大,越容易被选择
    ZoneAvoidanceRule 默认规则 复合判断 server 所在区域的性能和 server 的可用性选择服务器

    2.4.3 Feign

    是在 Ribbon 的基础上进行了一次改进,是一种声明式、模板化的HTTP客户端,可以简化模板代码的开发。

    2.4.4 Feign 基本流程

    Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVA Bean,返回回给调用者。

    2.5 服务网关

    2.5.1 网关

    服务网关 = 路由转发 + 过滤器。

    • 路由转发:接收一切外界请求,转发到后端的微服务上去。
    • 过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等。

    2.5.2 Gateway 组成

    • 路由:网关的基本模块:ID、目标URI、一组断言和一组过滤器组成。
    • 断言:访问该路由的访问规则,可以用来匹配来自http请求的任何内容。
    • 过滤器:实现过滤一些请求,可以自定义过滤器,通过实现 ordered 和 globalfilter 接口。

    2.5.3 Zuul 和 Gateway 的区别

    • 内部实现:gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等。
    • 是否支持异步:gateway 支持异步,理论上更适合于提高系统吞吐量,zuul 仅支持同步。
    • 框架设计:gateway具有更好的扩展性,并且其已经发布了很多版本,稳定性也是非常好的。
    • 性能:gateway可以用来构建异步的、非堵塞的、事件驱动的服务,具有良好的伸缩性,使用非阻塞API。zuul 1.x 是阻塞的,zuul 2.x 基于 netty 是非阻塞的。

    2.6 服务熔断和降级

    2.6.1 Hystrix

    Hystris 是一个处理分布式系统的延迟和容错的开源库,在服务调用失败时,保证在某个服务出问题的情况下,不会导致整体服务失败,避免级联故障,提高分布式系统的弹性。

    2.6.2 Hystrix 熔断和降级

    • 通过注解 HystrixCommand 实现服务熔断和降级,当被调用的方法不可用时,执行注解指定的 fallbackMethod 方法。
    • 通过 FeignClient 实现服务熔断和降级,在启动类中添加注解 EnableCircuitBreaker 启用熔断机制,然后添加 FeignClient 和降级类。

    2.6.3 熔断机制

    • 熔断器关闭CLOSED:熔断关闭,不会对服务进行熔断。
    • 熔断器打开OPEN:请求不再调用当前服务,内部设置平均故障处理时间,当打开时长达到所设时长则进入半熔断状态。
    • 熔断器半开HALF-OPEN:部分请求根据规则调用当前服务,如果请求成功且符合规则则认为当前服务恢复正常关闭熔断。
      在这里插入图片描述

    2.6.4 Sentinel

    Sentinel 是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

    2.7 Spring Cloud 和 Spring Boot 的区别

    • Spring Boot 专注于快速方便的开发单个个体微服务。
    • Spring Cloud 是关注全局的微服务协调整理治理框架以及一整套的落地解决方案,它将 Spring Boot 开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线等的集成服务。
    • Spring Boot 可以离开 Spring Cloud 独立使用,但是 Spring Cloud 离不开 Spring Boot ,属于依赖的关系。
    展开全文
  • Spring Cloud 就是微服务系统架构的一站式解决方案,它包括注册中心Eurake、负载均衡Ribbon、注册中心Spring Config、Histrix服务熔断、Gateway注册网关五大核心组件。 2、微服务与SOA的区别? SOA的特点: 1、系统...
  • SpringCloud学习笔记

    2021-04-23 09:39:44
    学习前提2.SpringCloud五大组件3.常见面试题二、微服务概述1.什么是微服务①微服务②微服务架构2.微服务优缺点①优点②缺点3.微服务技术栈4.核心四问题三、SpringCloud入门概述1.SpringCloud是什么?2.SpringCloud和...
  • SpringCloud框架一、核心二、组件介绍三、Eureka注册中心3.1配置文件3.2启动类3.3对比Zookeeper四、Ribbon客户端负载均衡4.1Ribbon是什么?4.2Ribbon能干嘛?4.3集群的搭建、Feign负载均衡5.1简介5.2feign能干嘛?...
  • 详细讲解了SpringCloud五大核心组件,同时准备了SpringCloud的案例项目,全面提升微服务的编程功底! 教学全程采用笔记+代码案例的形式讲解,每个知识点都有详细的讲解,通俗易懂!!! 部分讲义截图:
  • SpringCloud微服务框架的优缺点 SpringCloud项目部署到k8s的流程 第十三章 SpringCloud组件介绍 服务注册与发现组件Eureka 客户端负载均衡组件Ribbon 服务网关Zuul 熔断器Hystrix API网关SpringCloud Gateway 配置...
  • SpringCloud是目前流行的微服务框架,在各大互联网公司都有广泛的应用,同时在企业招聘面试时也会要求对微服务技术栈有所了解和掌握...详细讲解了SpringCloud五大核心组件,同时准备了SpringCloud的案例项目,全面...
  • SpringCloud是目前流行的微服务框架,在各大互联网公司都有广泛的应用,同时在企业招聘面试时也会要求对微服务技术栈有所了解和掌握...详细讲解了SpringCloud五大核心组件,同时准备了SpringCloud的案例项目,全面...
  • 1.springcloud五大组件 https://juejin.im/post/5be13b83f265da6116393fc7 2.面试技术树 https://www.jianshu.com/p/4d9625205c05

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 150
精华内容 60
关键字:

springcloud五大组件面试

spring 订阅