美文网首页web后端
Spring Cloud构建微服务之三 服务注册与发现的高可用性

Spring Cloud构建微服务之三 服务注册与发现的高可用性

作者: WeiminSun | 来源:发表于2017-05-15 15:57 被阅读176次

    我们在Spring Cloud构建微服务之一中,简单介绍了服务注册和发现。主要演示了如何构建和启动服务注册中心Eureka Server,以及如何将服务注册到Eureka Server中,但是示例中的服务注册中心是单点的,显然这并不适合应用于线上生产环境,那么下面我们来看看该如何构建高可用的Eureka Server集群。
    Eureka架构图


    4.4.png

    此图来自Eureka官方的架构图,大致描述了Eureka集群的工作过程。图中包含的组件非常多,可能比较难以理解,我们用通俗易懂的语言解释一下:

    Application Service 服务提供者,Application Client服务消费者;
    Make Remote Call,可以简单理解为调用RESTful API;
    us-east-1c、us-east-1d等都是zone,它们都属于us-east-1这个region;
    

    由图可知,Eureka包含两个组件:Eureka Server 和 Eureka Client,它们的作用如下:

    Eureka Client是一个Java客户端,用于简化与Eureka Server的交互;
    
    Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Client向Eureka Server进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息;
    微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认90秒);
    每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注册表的同步;
    Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者。
    

    综上,Eureka通过心跳检测、健康检查和客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性。
    以上内容可以参见周立博客:Spring Cloud第一篇 Eureka简介及原理
    Eureka Server的高可用
    Eureka Server除了单点运行之外,还可以通过运行多个实例,并进行互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署。
    下面以eureka-server中的eureka-server为基础,构建双节点的服务注册中心。
    创建application-peer1.properties,作为peer1服务中心的配置,并将serviceUrl指向peer2

    spring.application.name=eureka-server
    server.port=1111
    eureka.instance.hostname=peer1
    eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
    

    创建application-peer2.properties,作为peer2服务中心的配置,并将serviceUrl指向peer1

    spring.application.name=eureka-server
    server.port=1112
    eureka.instance.hostname=peer2
    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
    

    在/etc/hosts文件中添加对peer1和peer2的转换

    127.0.0.1 peer1
    127.0.0.1 peer2
    

    通过spring.profiles.active属性来分别启动peer1和peer2

    java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer1
    java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer2
    
    此时访问peer1的注册中心:http://localhost:1111/,如下图所示,我们可以看到registered-replicas中已经有peer2节点的eureka-server了。同样地,访问peer2的注册中心:http://localhost:1112/,能看到registered-replicas中已经有peer1节点,并且这些节点在可用分片(available-replicase)之中。我们也可以尝试关闭peer1,刷新http://localhost:1112/,可以看到peer1的节点变为了不可用分片(unavailable-replicas)。
    
    图片.png 图片.png

    服务注册与发现
    在设置了多节点的服务注册中心之后,我们主需要简单需求服务配置,就能将服务注册到Eureka Server集群中。我们以person-service中的person-service为基础,修改application.properties配置文件:

    spring.application.name=person-service
    
    server.port=2223
    
    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/
    

    主要对eureka.client.serviceUrl.defaultZone属性做了改动,将注册中心指向了之前我们搭建的peer1与peer2。

    最后,我们启动该服务,通过访问http://localhost:1111/http://localhost:1112/,可以观察到person-service同时被注册到了peer1和peer2上。若此时断开peer1,由于person-service同时也向peer2注册,因此在peer2上其他服务依然能访问到person-service,从而实现了高可用的服务注册中心。

    图片.png

    该工程可参见:eureka-server-ha

    相关文章

      网友评论

        本文标题:Spring Cloud构建微服务之三 服务注册与发现的高可用性

        本文链接:https://www.haomeiwen.com/subject/piehxxtx.html