SpringCloud(H版)学习---服务注册中心

一、概述

  

   1、服务治理:SpringCloud封装了NetFlix公司开发的Eureka模块来实现服务治理。在传统的RPC框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务的发现与注册。

  2、服务注册与发现:

    (1)在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己的服务器的信息(比如服务地址、通讯地址等)以别名的方式注册到注册中心上。另一方(消费者|服务提供者)以该别名的方式去注册中心上获取到实际的通讯地址,然后再实现本地RPC调用RPC远程框架。核心设计思想在于注册中心,因为注册中心管理每个服务与服务之间的依赖关系(服务治理)。在任何RPC远程框架中,都会有一个注册中心(存放服务地址相关信息,接口地址等)。Eureka与Dubbo的架构对比如下:

          

  (2)Eureka采用C/S的设计架构,EurekaServer作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务,使用Eureka客户端连接到Eureka Server并维持心跳。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。

  (3)Zookeeper则采用临时节点的方式,临时节点的声明周期和客户端绑定,一旦客户端会话失效,那么这个客户端创建的所有的节点都会被移除,也是服务注册的原理所在。

     (4) Consul服务注册与发现原理:基于Raft协议,牺牲高可用性来保证数据强一致性,Leader/Follower模式,参考:https://blog.csdn.net/u013982921/article/details/93622716

二、Eureka服务注册与发现

1、Eureka组件

  包含2个组件:Eureka Server和Eureka Client

  Eureka Server提供服务注册。各个微服务节点通过配置启动后,会在Eureka中进行注册,这样Eureka Server的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面直观看到。

  Eureka Client通过注册中心访问。是一个Java客户端,用于简化Eureka Client的交互,客户端同时也具备一个内置的、使用轮询(round-ribbon)负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳(默认周期为30s)。如果Eureka Server在多个心跳周期内没有接受到某个节点的心跳,Eureka Server将会从服务注册表中将这个服务点移除(默认90s)。

2、Eureka集群原理

微服务RPC远程过程调用最核心的是:高可用

3、EurekaServer端搭建

  注意:EurekaServer端应该避免单点故障

  参考之前搭建的Eureka高可用集群:SpringCloud全家桶学习之服务注册与发现及Eureka高可用集群搭建(二)

  启动2个Eureka互相注册为中心,查看服务注册中心已注册服务如下:

4、服务发现

  相关注解:主类添加@EnableDiscoveryClient,对于注册进Eureka里面的微服务,可以通过服务发现来获得该服务的信息。使用方式很简单注解注入DiscoveryClient使用

5、Eureka的自我保护机制

  保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。如果在Eureka Server的首页看到以下提示,则说明Eureka进入了保护模式:

   总结一句话某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存,属于CAP里面的AP分支。

  为什么会产生自我保护机制?为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通的情况下,EurekaServer不会立刻将EurekaClient服务剔除。

  自我保护模式:默认情况下,如果EurekaServer在一定时间内没有接收到某个服务实例的心跳,EurekaServer将会注销该实例(默认时间为90s)。但是当网络分区故障发生(延迟、卡顿、拥挤时),微服务与EurekaServer之间无法正常通信,以上行为就变得非常危险了----因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护机制”来解决这个问题-----当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么节点就会进入自我保护模式。  

   综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何异常的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

  禁用自我保护机制

    ①EurekaServer:修改eureka.server.enable-self-preservation=true(默认为true)改为false;eureka.server.eviction-interval-timer-in-ms=2000(表示2s没接收到心跳则剔除微服务)

    ②EurekaClient:eureka.client.lease-renewal-interval-in-seconds=30(客户端发送心跳间隔,默认30s),eureka.client.lease-expiration-duration-in-seconds=90(Eureka服务端在收到最后一次心跳后等待时间上限,默认90s,超时将剔除微服务)

6、Eureka停更

  Github地址:https://github.com/Netflix/eureka/wiki,Eureka已停更,但不停用。

三、Zookeeper服务注册与发现

   虽然Eureka已停更,现SpringCloud也支持Zookeeper作为注册中心,使用起来也比较简单,下面就操练一把

1、配置文件修改并添加注解@EnableDiscoveryClient

#消费端
server:
  port: 80
spring:
  application:
    # 服务别名
    name: cloud-consumer-order
  cloud:
    zookeeper:
      # 注册到zookeeper地址
      connect-string: localhost:2181


#提供端
server:
  # 8004表示注册到zookeeper服务器的支付服务提供者端口号
  port: 8004
spring:
  application:
    # 服务别名---注册zookeeper到注册中心的名称
    name: cloud-provider-payment
  cloud:
    zookeeper:
      # 默认localhost:2181
      connect-string: localhost:2181
application.yml

2、Zookeeper服务端查看节点

  如下所示,该服务注册进Zookeeper临时节点的信息

 四、Consul服务注册与发现

   官方地址:https://www.consul.io/intro/index.html(Go语言编写)

  Consul是一套开源的分布式服务发现和配置管理系统,由HashCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需求单独使用,也可以一起使用构建全方位的服务网络,总之Consul提供了一种完整的服务网络解决方案。

  下载地址:https://www.consul.io/downloads.html

  安装参考:https://learn.hashicorp.com/consul/getting-started/install

  中文文档:https://www.springcloud.cc/spring-cloud-consul.html

1、进入Consul Web界面

  开发模式启动:consul agent -dev,浏览器访问:http://localhost:8500/即可进入Consul界面

 2、消费者与提供者分别配置Consul

主启动类分别添加@EnableDiscoveryClient

#消费者
server:
  port: 80
spring:
  application:
    name: cloud-consumer-order
  cloud:
    consul:
      # consul注册中心地址
      host: localhost
      port: 8500
      discovery:
        hostname: 127.0.0.1
        service-name: ${spring.application.name}


#提供者

server:
  # consul服务端口
  port: 8006
spring:
  application:
    name: cloud-provider-payment
  cloud:
    consul:
      # consul注册中心地址
      host: localhost
      port: 8500
      discovery:
        hostname: 127.0.0.1
        service-name: ${spring.application.name}
application.yml

3、Consul Web查看微服务

五、Eureka、Zookeeper与Consul异同点

(1)AP架构(例Eureka)

  当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

  结论违背了一致性C的要求,只满足可用性和分区容错即AP

 (2)CP架构

  当网路分区出现后,为了保证一致性,就必须拒绝请求,否则无法保证一致性。

  结论违背了可用性A的要求,只满足一致性和分区容错即CP

  

 六、CAP简介

  理论:C代表强一致性、A代表可用性、P代表分区容错性。由于是分布式系统,所以P必须满足,要么AP、要么CP。

 CAP核心:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足C原则和满足AP原则:

  (1)CA:单点集群,满足一致性、可用性,通常在扩展性上不太强大

  (2)CP:满足一致性、分区容错性,通常性能不是特别高

  (3)AP:满足可用性、分区容错性,通常对一致性要求低一些

Github地址:https://github.com/Simple-Coder/cloud2020

原文地址:https://www.cnblogs.com/rmxd/p/12547231.html