springcloud-Eureka

一、介绍

  1. 什么是springcloud?

    1. Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控,API 网关 等,都可以用Spring Boot的开发风格做到一键启动和部署。
    2. Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。
    3. Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。(注 * )
  2. springcloud的优缺点

    优点缺点
    集大成者,Spring Cloud 包含了微服务架构的方方面面。项目结构复杂,每一个组件或者每一个服务都需要创建一个项目。
    约定优于配置,基于注解,没有配置文件。部署门槛高,项目部署需要配合 Docker 等容器技术进行集群部署,而要想深入了解 Docker,学习成本高。
    轻量级组件,Spring Cloud 整合的组件大多比较轻量级,且都是各自领域的佼佼者。
    发简便,Spring Cloud 对各个组件进行了大量的封装,从而简化了开发。
    开发灵活,Spring Cloud 的组件都是解耦的,开发人员可以灵活按需选择组件。
  3. springcloud核心子项目
    在这里插入图片描述

    1. Spring Cloud Netflix 核心组件,可以对多个Netflix OSS开源套件进行整合,包括以下几个组件:
    组件介绍
    Eureka服务治理组件,包含服务注册与发现
    Hystrix容错管理组件,实现了熔断器
    Ribbon客户端负载均衡的服务调用组件
    Feign基于Ribbon和Hystrix的声明式服务调用组件
    Zuul网关组件,提供智能路由、访问过滤等功能
    Archaius外部化配置组件
    1. Spring Cloud Config: 配置管理工具,实现应用配置的外部化存储,支持客户端配置信息刷新、加密/解密配置内容等。
    2. Spring Cloud Bus: 事件、消息总线,用于传播集群中的状态变化或事件,以及触发后续的处理
    3. Spring Cloud Security: 基于spring security的安全工具包,为我们的应用程序添加安全控制
    4. Spring Cloud Consul : 封装了Consul操作,Consul是一个服务发现与配置工具(与Eureka作用类似),与Docker容器可以无缝集成

二、SpringCloud—注册和发现(Eureka)

  1. Eureka 是什么

    1. Eureka是Netflix 开源的服务发现组件,Spring Cloud 将其集成在 Spring CloudNetflix中;
    2. Eureka 是阿基米德洗澡时发现浮力原理时发出的惊叹声,在微服务中寓意发现;
    3. Eureka 是 Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件;
    4. 它主要包括两个组件:Eureka Server(注册中心服务端) 和 Eureka Client(注册中心客户端)。
    组件介绍
    Eureka Client一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)
    Eureka Server提供服务注册和发现的能力(通常就是微服务中的注册中心)
  2. Eureka 能做什么
    主要负责完成微服务架构中的服务治理功能。

  3. Eureka 三大核心要素

    要素介绍
    Eureka Server(服务注册中心)Eureka Server是Eureka提供的服务端,提供服务注册与发现的功能。此服务可以为集群,(集群就是两个或以上),形成高可用的eureka注册中心。
    Service Provider(服务提供者)Service Provider是提供服务的应用,可以是Spring Boot应用,也可以是其他技术平台且遵循Eureka通信机制的应用。它将自己提供的服务注册到Eureka,以供其他应用发现。
    Service Consumer(服务消费者)Service Consumer是服务的消费者,消费者从服务注册中心获取服务列表,通过客户端负载均衡某种算法轮询服务列表,然后调用其所需要的服务,也即调用对应的服务提供者。 上述就是Eureka服务治理基础架构的三大核心要素。但是上述的三个核心要素遵守的都是逻辑角色的原则,意思是上述三个核心要素在实际运行中,可能是两个,甚至有可能是同一个实例。Eureka客户端通常包括Service Provider(服务提供者)与Service Consumer(服务消费者)
  4. Eureka 图示
    在这里插入图片描述

  5. Eureka 启动过程

    1. 各个微服务启动时,会通过 Eureka Client 向 Eureka Server 注册自己,Eureka Server 会存储该服务的信息;
    2. 也就是说,每个微服务的客户端和服务端,都会注册到 Eureka Server,这就衍生出了微服务相互识别的话题。
      Spring Cloud 已经把 Eureka 集成在其子项目 Spring Cloud Netflix 里面
    操作介绍
    同步每个 Eureka Server 同时也是 Eureka Client(逻辑上的);多个 Eureka Server 之间通过复制的方式完成服务注册表的同步,形成 Eureka 的高可用
    识别Eureka Client 会缓存 Eureka Server 中的信息;即使所有 Eureka Server 节点都宕掉,服务消费者仍可使用缓存中的信息找到服务提供者
    续约微服务会周期性(默认30s)地向 Eureka Server 发送心跳以Renew(续约)信息(类似于heartbeat)
    续期Eureka Server 会定期(默认60s)执行一次失效服务检测功能;它会检查超过一定时间(默认90s)没有Renew的微服务,发现则会注销该微服务节点
  6. Eureka 服务治理机制方式
    在实际的运行中,Service Provider会向Eureka Server做
    Register(服务注册)、Renew(服务续约)、Cancel(服务下线)等操作,Eureka Server之间会做注册服务的同步,从而保证状态一致,Service Consumer会向Eureka Server获取注册服务列表,并消费服务。每个角色都有着自己独特的运行方式,来完成整个服务治理。

    1. 服务注册
        在微服务启动时,首先,服务提供者需要将自己的服务注册到服务注册中心,服务提供者在启动的时候会发送REST请求将自己注册到服务注册中心上,并带上一些元信息。
        服务注册中心接收到REST请求,会将元信息存储在一个双层Map中,第一层key是服务名,第二层key是具体服务的实例名。
        注意: 在服务注册时,需要确认一下eureka.client.register-with-eureka=true是否正确,如果为false是禁止向服务注册中心注册的。
    2. 服务同步
        当服务成功的注册到了注册中心之后,由于注册中心可能是高可用的集群,那么我们的服务可能只注册到了一个集群中的一个注册中心上,被一个注册中心所维护,而不被另外一个注册中心所维护,那么这个时候,我们就需要将这个注册中心的信息同步给集群中其他的注册中心,这就叫服务同步。那么他是如何实现的呢?
        由于在集群中,一个注册中心互为其他注册中心的服务,当服务提供者请求到一个服务注册中心后,它会将请求转发到其他服务注册中心,实现注册中心之间的服务同步。
        通过服务同步,服务提供者的服务信息可以通过集群中的任何一个服务注册中心获取。
    3. 服务续约
        在注册完成后。服务提供者会维护一个心跳告诉注册中心服务,心跳间隔大约是30S,防止注册中心剔除服务, 正常情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。这个过程称为服务续约。
    4. 服务获取
        当一切的注册相关工作完成后,我们自然要获取服务清单,那么如何获取服务呢? 启动服务消费者后,消费者会发送一个REST请求给服务注册中心,来获取上面注册的服务清单。 而服务注册中心会维护一份只读清单返回给消费者客户端,该缓存清单30s更新一次。
    5. 服务调用
        消费者获取服务清单后,可以通过服务名获取到具体服务实例与实例的元数据信息。这个时候,我们可以通过Ribbon调用我们的目标服务,默认采用轮询的方式,从而实现负载均衡。
    6. 服务下线
        当我们需要对服务实例进行正常的关闭操作时,它会触发一个服务下线的REST请求给服务端。注册中心接收到请求后,将该服务状态置为DOWN,并把下线时间传播出去。
    7. 失效剔除
        有的时候,我们的服务意外挂掉了,那么Eureka如何识别出我们异常的服务,并将其剔除呢?
        服务注册中心启动时会创建定时任务,默认60s一次,将当前清单中超时(90s)没有续约的服务剔除。
    8. 自我保护
        当失效剔除机制引入的时候,就会有一个问题,如果一个地区网络特别不稳定,那么服务可能不会续约,但我们还需要这个服务存在。这个时候,我们怎么解决呢?
        还好,Eureka拥有自我保护机制,可以很好的解决这个问题。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果低于,就会将当前实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。
         但是保护机制也有可能会出现问题,导致服务实例不能够被正确剔除。比如在保护期间,实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败。
         建议:除非网络情况真的非常不可控,不然请尽量关闭自我保护机制。 可使用:eureka.server.enable-self-preservation=false关闭保护机制,使不可用实例能够正常下线。
  7. Eureka 的架构
    在这里插入图片描述

  8. Eureka 3个模块
       eureka按逻辑上可以划分为3个模块,eureka-server,service-provider,service-consumer。
       值得注意的一点,不同于其他服务注册与发现(zookeeper需要单独以中间件的形式部署集群server),以上3个角色都是逻辑角色,甚至可以在相同的jvm进程上。

    模块介绍
    eureka-server服务端,提供服务注册和发现
    eureka-client-service-provider服务端,服务提供者,通过http rest告知服务端注册,更新,取消服务
    eureka-client-service-consumer客户端,服务消费者,通过http rest从服务端获取需要服务的地址列表,然后配合一些负载均衡策略(ribbon)来调用服务端服务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值