`
liujiekasini0312
  • 浏览: 147596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Cloud构建微服务架构(六)高可用服务注册中心

 
阅读更多

近期因工作原因减缓了更新频率,同时为了把Spring Cloud中文社区搭建起来也费了不少时间,几乎每天都在挤牙膏般的凑时间出来做一些有意义的事。未能按原计划更新博文,在此对持续关注我博客的朋友们深表歉意。

之前在写Spring Cloud系列文章的时候,列过一个较粗的计划,现在由于收到不少反馈和问题,因此准备做一些调整,先将一些大家关注较为集中的点拉出来写一些内容。

今天这篇主要就说说Eureka Server的高可用问题。

前言

Spring Cloud系列文章的开始,我们就介绍了服务注册与发现,其中,主要演示了如何构建和启动服务注册中心Eureka Server,以及如何将服务注册到Eureka Server中,但是在之前的示例中,这个服务注册中心是单点的,显然这并不适合应用于线上生产环境,那么下面在前文的基础上,我们来看看该如何构建高可用的Eureka Server集群。

单点Eureka Server的样例:

Eureka Server的高可用

Eureka Server除了单点运行之外,还可以通过运行多个实例,并进行互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署。

下面以Chapter1-1-1中的eureka-server为基础,对其改造,构建双节点的服务注册中心。

  • 创建application-peer1.properties,作为peer1服务中心的配置,并将serviceUrl指向peer2
1
2
3
4
5
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
1
2
3
4
5
spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
  • /etc/hosts文件中添加对peer1和peer2的转换
1
2
127.0.0.1 peer1
127.0.0.1 peer2
  • 通过spring.profiles.active属性来分别启动peer1和peer2
1
2
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)。

服务注册与发现

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

1
2
3
4
spring.application.name=compute-service
server.port=2222
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/

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

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

深入理解

虽然上面我们以双节点作为例子,但是实际上因负载等原因,我们往往可能需要在生产环境构建多于两个的Eureka Server节点。那么对于如何配置serviceUrl来让集群中的服务进行同步,需要我们更深入的理解节点间的同步机制来做出决策。

Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。什么意思呢?不妨我们通过下面的实验来看看会发生什么。

  • 场景一:假设我们有3个注册中心,我们将peer1、peer2、peer3各自都将serviceUrl指向另外两个节点。换言之,peer1、peer2、peer3是两两互相注册的。启动三个服务注册中心,并将compute-service的serviceUrl指向peer1并启动,可以获得如下图所示的集群效果。

访问http://localhost:1112/,可以看到3个注册中心组成了集群,compute-service服务通过peer1同步给了与之互相注册的peer2和peer3。

  • 场景二:依然假设我们有3个注册中心,我们将peer1的serviceUrl指向peer2,peer2的指向peer3,peer3的指向peer1,此时peer1、peer2、peer3通过单向边形成环。分别启动peer1、peer2、peer3,并访问信息页面,我们可以找到下面的规律,peer1成为了peer2的分片节点,peer2成为了peer3的分片节点,peer3则成为了peer1的分片节点,再将compute-service的serviceUrl指向peer1并启动。放别访问peer1、peer2、peer3的信息页面,可以发现compute-service均被peer2和peer3同步过去了,所以单向边也能进行服务的传播与同步。此时,我们断开peer2,可以看到peer3中的compute-service消失了。重新开启peer2并断开peer3,可以看到peer2依然能同步到compute-service。所以我们可以得出结论,Eureka Server的传播与同步是具备方向性的。

通过上面的实验,我们可以得出下面的两点结论来指导我们搭建服务注册中心的高可用集群:

  • 两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
  • Eureka Server具备单方面有指向的服务传播与同步机制,在一些对服务发现有限制的情况下,可以利用这样的机制进行服务注册与发现的的单向控制
分享到:
评论

相关推荐

    Spring Cloud构建微服务架构.doc

    Spring Cloud构建微服务架构是现代企业级应用开发的热门选择,尤其在Java生态系统中,它利用Spring Boot的便利性,简化了云应用的构建过程。Spring Cloud作为一个集合体,涵盖了多个子项目,如Config用于配置管理,...

    使用Spring Cloud和Docker构建微服务

    在使用Spring Cloud构建微服务时,可以发现如下几个核心组件:配置管理、服务发现、断路器和分布式会话。配置管理遵循了十二因素应用原则中的配置管理部分,服务发现则是微服务架构中的关键组件,它允许服务间相互...

    目前倾力于平台架构的升级,原计划使用springboot+springcloud构建微服务架构

    标题提到的"目前倾力于平台架构的升级,原计划使用springboot+springcloud构建微服务架构",这表明了一个正在或即将进行的项目升级,其核心是将原有的单体架构转变为微服务架构,以提高系统的可扩展性、灵活性和可靠...

    Spring cloud与docker高并发微服务架构设计实施(试读)

    通过Spring Cloud可以轻松构建一些常见的分布式系统模式,比如配置中心、服务注册与发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。Spring Cloud的目标是让...

    使用Spring-Cloud构建微服务.pptx

    使用Spring Cloud构建微服务 Spring Cloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本。虽然Spring Cloud时间最短,但是相比Dubbo等RPC框架,Spring Cloud提供的全套的分布式系统解决方案。 ...

    Spring Cloud与Docker高并发微服务架构设计实施.rar

    其次,Eureka是Spring Cloud的服务注册与发现组件,它允许服务实例在启动时向注册中心注册自身,其他服务可以通过注册中心找到并调用这些服务。这样就实现了服务间的松耦合和解耦。 再者,Zuul和Netflix OSS的...

    基于Spring Cloud的微服务架构实践指南 .zip

    基于Spring Cloud的微服务架构实践指南 项目概述 本项目是一个基于Spring Cloud的... 《Spring Cloud构建微服务架构》系列博文 Dalston版 [服务注册与发现(Eureka、Consul)](http:blog.didispace.comsprin

    spring boot 2.6.11+springcloud Swagger3构建微服务项目源码

    在本项目中,我们主要关注的是使用Spring Boot 2.6.11、Spring Cloud以及Swagger3构建微服务架构的过程。这些技术都是现代云应用开发中的核心组件,它们各自提供了强大的功能来简化开发和增强应用的可维护性。 首先...

    springcloud 微服务架构

    SpringCloud微服务架构是当前企业级应用开发中的热门选择,它提供了一整套服务发现、配置管理、服务间通信以及负载均衡等工具,使得开发者能够快速构建复杂的分布式系统。在这个框架下,我们可以利用Eureka作为注册...

    SpringCloud学习之服务注册与发现

    本教程将深入探讨Spring Cloud中的服务注册与发现机制,这是构建微服务生态系统的关键组成部分。 首先,我们要理解什么是服务注册与发现。在分布式环境中,服务不再像单体应用一样运行在同一台服务器上,而是分散在...

    SpringCloud全套完整架构

    在IT行业中,SpringCloud被视为构建微服务架构的重要框架,它为开发者提供了丰富的工具和服务来简化分布式系统开发。本文将深入探讨SpringCloud的核心组件及其在实际应用中的作用。 首先,我们来看Eureka,它是...

    基于Spring Cloud框架的微服务架构项目.zip

    本项目是一个基于Spring Cloud框架的微服务架构项目,涵盖了服务注册与发现、配置中心、服务调用、负载均衡、断路器、分布式事务等多个微服务核心功能。项目通过Spring Cloud的各种组件,如Eureka、Feign、Hystrix、...

    springcloud 完整练习项目

    这个项目将会展示如何在实际场景中使用 Spring Cloud 构建微服务架构,包括服务注册、服务发现、客户端负载均衡、API 网关等功能的实现。通过对这些组件的深入学习和实践,开发者可以更好地理解和掌握 Spring Cloud ...

    springcloud视频学习

    3. SpringCloud在国内的实际应用案例:分析了国内互联网巨头以及中小企业如何利用SpringCloud构建高可用、可扩展的微服务体系。 二、SpringCloud Rest微服务案例-总体概述 15.尚硅谷_SpringCloud_Rest微服务案例-...

    Spring Cloud实战指南:构建微服务架构的配置、教程与源代码分析.pdf

    ### Spring Cloud实战指南:构建微服务架构的配置、教程与源代码分析 #### 一、Spring Cloud概述 Spring Cloud是一个全面且系统的框架集合,它基于Spring Boot开发,为分布式系统提供了一系列工具,使得开发者可以...

    [云框架]基于SpringCloud的微服务架构-用户指南

    - Eureka:服务注册与发现,允许服务实例向中心注册并查找其他服务。 - Ribbon:客户端负载均衡器,可以在调用远程服务时实现负载均衡。 - Hystrix:断路器,防止服务雪崩效应,当服务出现故障时可以快速失败并...

    基于SpringCloud分布式微服务+微信小程序实现短视频社交app设计源码.zip

    总结来说,构建基于SpringCloud分布式微服务和微信小程序的短视频社交App,需要深入了解微服务架构原理,熟练掌握SpringCloud组件的使用,同时熟悉微信小程序的开发流程和API。通过对这些技术的综合运用,我们能够...

    Ideal版SpringCloud框架参考---分布式微服务架构参考

    本文将深入探讨标题" Ideal版SpringCloud框架参考---分布式微服务架构参考"所涵盖的关键知识点,并结合描述中的组件进行详细解析。 首先,Eureka是Spring Cloud中的服务注册与发现组件。它允许微服务实例向中心...

    spring cloud demo

    "spring cloud demo"项目为开发者提供了一个直观的Spring Cloud应用示例,涵盖了消费者、生产者和服务注册中心等核心组件的使用。通过对这个项目的理解和实践,你可以更好地掌握Spring Cloud的精髓,从而在实际工作...

    Spring cloud 服务注册与发现

    总之,Spring Cloud 的服务注册与发现机制是构建大规模微服务架构的重要基石,它简化了服务之间的交互,提高了系统的容错性和可用性。无论是选择Eureka还是Consul,都能帮助我们构建出更加健壮、灵活的分布式系统。...

Global site tag (gtag.js) - Google Analytics