Springcloud初学总结

一、Springcloud相关问题

  1、什么是微服务?

    微服务是一种程序设计架构,强调把一个整体的应用按照功能划分为多个小而独立的进程。

  2、微服务之间是如何建立通讯的?

    微服务之间采用轻量级的通信机制互相沟通(一般都基于HTTP的REATfulAPI)

  3、SpringCloud与Dubbo有哪些区别?

    从架构上来看,SpringCloud是一套系统的分布式服务方案,Dubbo更像是SpringCloud下面的其中一个组件。

  4、SpringBoot和SpringCloud的关系?

    SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。SpringBoot专注于快速、方便的开发单个微服务个体。SpringBoot可以单个发布运行,但Springcloud必须依赖于SpringBoot构建整个微服务。

  5、什么是服务熔断?什么是服务降级?

   

 

  6、微服务的优缺点分别是什么?

    优点:(1)、每个服务足够内聚,足够小,代码容易理解。(2)、开发简单,效率提交,一个服务专注于一件事。(3)、微服务是松耦合,无论在开发和部署阶段都是独立的。(4)、微服务能够使用不同语言开发。(5)、微服务可以融合其他最新的技术。

    缺点:(1)、开发人员要处理分布式系统的复杂性。(2)、随着服务的增加,运维难度也加大。(3)、服务间通信成本.(4)、数据一致性等。

二、SpringCloud构建之工程模块

  1、构建一个父工程,将Packageing设置为pom模式。主要功能:将后续的各个子模块的公共依赖提取出来。

  2、构建一个通用API,子类都需要用到的类。主要功能:将公用的实体类提取出来打成jar包后给其他模块应用。

  3、构建第一个微服务提供者。主要功能:提供部门的增删改查。实现技术:SpringBoot+mybatis整合。

  4、构建第一个消费者。主要功能:通过消费者访问微服务提供者。实现技术:RestTemplate。注意事项:需要创建一个类并打上注解@Configuration(表示这是一个配置文件),然后引入RestTamplate类,在引入的类上面打上@Bean注解。例如:

            @Configuration
            public class ConfigBean
            {
              @Bean
              public RestTemplate getRestTemplate()
              {
              return new RestTemplate();
              }
            }

三、SpringCloud构建之Eureka服务注册与发现

  1、Eureka是什么?

  CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

  2、构建第一个Eureka服务注册中心。主要功能:将SpringCloud下的微服务注册进Eureka中。实现过程:引入Eureka服务端依赖,增加YML配置,代码修改(主启动类注解添加@EnableEurekaServer)。测试:http://localhost:port

  4、将第一个微服务提供者注册进Eureka中。实现过程:引入Eureka客户端依赖,增加YML配置,代码修改(主启动类注解添加@EnableEurekaClient)。测试:打开Eureka注册中心,查看是否注册成功。

四、SpringCloud构建之Ribbon负载均衡

  1、Ribbon是什么·?

  Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。

  2、LB(load Balance)集中式LB和进程内LB的区别。

  集中式:即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方

  进程内:将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。

  3、引入Ribbon配置。实现过程:新增依赖、修改代码(只需要引入依赖+Configuration类增加注解)

  4、Ribbon负载均衡启用,配置一个消费者+Eureka+多个生产者。

  5、Ribbon核心组件IRule,为微服务选择一个负载均衡算法。默认:RoundRibbonRule(轮询)

  6、Ribbon自定义负载算法:@RibbonClient(name="MICROSERVICECLOUD-DEPT(微服务的名字)",configuration=MySelfRule.class(自定义算法类))

五、SpringcCoud构建之Feign负载均衡

  1、Feign是什么?

  Feign创建了一个生产者接口供多个消费者调用,消费者无需知道微服务再Eureka中的注册名。Feign集成了Ribbonfeign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

  2、构建接口。

  在公共模块中构建接口,依赖引入,代码构建(创建接口类、创建接口实现类(功能:接口方法返回异常则返回接口实现类方法))

  3、接口调用

  在消费者中,依赖引入,Controller中引入Feign接口,调用接口方法,主启动类添加注解。

六、SpingCloud构建之Hystrix断路器

  1、Hystrix是什么?

  Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

  “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

  2、能干什么?

  服务降级:Hystrix服务降级,其实就是线程池中单个线程障处理,防止单个线程请求时间太长,导致资源长期被占有而得不到释放,从而导致线程池被快速占用完,导致服务崩溃。

  服务熔断:这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

  服务限流:提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。

  Hystrix能解决如下问题:

  (1).请求超时降级,线程资源不足降级,降级之后可以返回自定义数据

  (2).线程池隔离降级,分布式服务可以针对不同的服务使用不同的线程池,从而互不影响

  (3).自动触发降级与恢复

    (4).实现请求缓存和请求合并

  (5).接近实时的监控

  3、服务熔断实现过程:引入依赖、增加YML配置、修改Controller代码、主启动类新增代码

  4、服务降级实现过程:Feign接口类模块实现 implements FallbackFactory<DeptClientService> ,消费者新增YML配置

  5、服务监控:单独创建一个模块,引入依赖,增加YML端口配置,主启动类新增注解@EnableHystrixDashboard,给需要监控的生产者增加依赖

  6、服务监控打开地址:http://localhost:port/hystrix,填写监控地址 http://productor:port/hystrix.stream

7、SpringCloud构建之Zuul路由网关

  1、是什么?

  Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。提供=代理+路由+过滤三大功能

  2、路由基本配置:引入依赖、增加YML配置、主启动类新增注解@EnableZuulProxy

  3、测试地址:通过路由访问:http://ZuulIP:post/微服务名称/dept/get/2 等同于 http://localhost:port/dept/get/2

  4、路由映射配置:微服务名称可在YML中配置,就不用输入长长的名字,且可以屏蔽掉通过微服务名称访问,只能通过路由配置的微服务匿名访问

8、SpringCloud构建之Config分布式配置中心

  1、分布式系统面临的配置问题

   微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题。

  2、SpringCloud Config是什么?

  SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

  SpringCloud Config分为服务端和客户端两部分。 
服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

  3、在GitHub上建立一个放配置文件的仓库,本地硬盘上新建git仓库用于配置文件的增删改。

  4、Config服务端模块构建:引入依赖、增加YML配置、主启动类新增注解  

  5、测试:http://localhost:port/application-dev.yml 或者 http://localhost:port/application-test.yml

  6、Config客户端配置:新增依赖、修改YML

  



  

  

  

  

posted @ 2019-11-11 18:07  鼠小小  阅读(237)  评论(0编辑  收藏  举报