SpringCloud学习总结


1、什么是微服务?
     就目前而言,对于微服务业界并没有统一的、标准的定义。
     但目前而言,微服务架构是一种架构模式或者说是一种架构风格,他提倡将单一应用程序划分成一组小的服务,每个服务独立运行在自己的进程中。每个服务之间相互协调、相互配合,为用户提供最终价值。服务之间采用轻量级的通信机制(通常是基于HTTP的RESTful API)。独立的部署,独立的发布。极端情况可以是一个服务连一个数据库,或者多个服务连接一个数据库,非常灵活。
     Cloud通信机制是RestFul api, 而Dubblo的通信机制是RPC(远程过程调用)
 
2、SpringBoot和SpringCloud是什么关系?
SpringBoot关注的是微观层面的,主要是一个个的微服务,可单独使用,SpringCloud关注的是宏观层面的,主要是微服务架构的一站式解决方案,必须依赖于SpringBoot才能使用。
SpringBoot专注于方便快速的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来。为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务。
SpringBoot可以离开SpringCloud独立使用开发项目,但SpringCloud离不开SpringBoot,属于依赖的关系。
 
3、SpringCloud和Dubbo的区别?
最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于Http的Rest API方式。
严格来说:这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约(用json传递数据),不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适。
 
4、SpringCloud中使用Lombok工具
主要是目的是省略了javaBean中冗余代码的编写,如构造器、getset方法等,只需要使用工具会帮你在classes文件中生成对应的方法供调用。
 
 
5、SpringCloud封装了Netflix公司开发的Eureka模块来实现服务注册与发现(请对比Zooker).
Eureka采用了C-S的设计架构。Eureka Server作为服务注册功能的服务器,它是服务注册中心。
而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行,SpringCloud的一些其他模块(如Zuul),就可以通过Eureka Server来发现系统中的其他微服务,并执行相关的逻辑。
请注意和Dubbo架构对比
Eureka包含两个组件:Eureka Server 和 Eureka Client
Eureka Server提供服务注册服务。
各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
EurekaClient是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期是30秒)。如果Eureka Server在多个心跳周期内没有接到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
 
6、假如我们需要引入cloud的一个新技术组件,基本上有两步:
     1)新增一个相关的maven坐标  eureka
          <!--eureka-server服务端 -->
         <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-eureka-server</artifactId>
         </dependency>
     2)在启动类上面,标注启动该组件技术的相关注解标签
          @SpringBootApplication
          @EnableEurekaServer
          public class EurekaServer7001_App {
               public static void main(String[] args) {
                    SpringApplication.run(EurekaServer7001_App.class, args);
               }
          }
 
7、Eureka自我保护。
     在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。直到收到的心跳数重新恢复到阙值以上时,该Eureka Server节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务信息,也不可盲目注销任何可能健康的服务实例。一句话就是:好死不如赖活着。
综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有的微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
在SpringCloud中,可以使用eureka.server.enable-self-preservation = false 禁用自我保护模式。
 
8、端口映射
     修改C:\Windows\System32\drivers\etc\hosts文件。
127.0.0.1      eureka7001.com
127.0.0.1      eureka7002.com
127.0.0.1      eureka7003.com
127.0.0.1      myzuul.com
 
9、CAP
     C: Consistency(强一致性)
     A: Availability(可用性)
     P: Partition tolerance(分区容错性)
 
10、作为服务注册中心,Eureka比Zookeeper好在哪里?
     著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性),A(可用性)和P(分区容错性)。由于分区容错性P在分布式系统中必须要保证的,因此我们只能在AP之间进行选择。
Zookeeper保证的是CP,Eureka则是AP。
Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像Zookeeper那样使整个注册服务瘫痪。
 
11、Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
Ribbon负载均衡配置图

Ribbon在工作时分成两步

第一步先选择EurekaServer,他优先选择在同一个区域内负载较小的Server.
第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。
其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。
 
12、关于Ribbon的自定义算法,官方文档明确给出了警告:这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类会被所有的Ribbon客户端共享,也就是说我达不到特殊化定制的目的了。也就是这个配置类不能放在主启动类所在包及其子包下。
 
13、Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更简单,他的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConvertters.Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
Feign集成了Ribbon
利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要以声明式的方法定义服务且绑定接口,优雅而简单的实现了服务调用。
 
14、Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时不必要的占用,从而避免故障在分布式系统的蔓延,乃至雪崩。
 
15、分布式系统面临的问题
     复杂分布式系统体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败。
     【服务熔断】
     一般是某个服务故障或者异常引起,类似“保险丝”,当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时,进而系统资源被大面积占用。
     【服务降级】
     整体资源快不够用了,忍痛将某些服务先关掉,待度过难关,再开启回来。它是客户端完成的,跟服务端没有关系。
 
16、Zuul包含了对请求的路由和过滤两个最主要的功能:
       其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础,Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的信息,也即以后的访问微服务都是通过Zuul跳转后获取。
     注意:Zuul服务最终还是会注册进Eureka
提供=代理+路由+过滤三大功能。
 
17、Config分布式配置中心是什么?
      SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
     SpringCloud Config分为服务端和客户端两部分。
     服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。
     客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息,配置服务器默认采用Git来存储配置信息,这样就有助于对环境进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM