微服务精通之Eureka原理解析

微服务精通之Eureka原理解析文章目录前言一 Eureka 是什么 二 Eureka 是干什么的 1 服务治理三 Eureka 原理解析 1 总体流程 2 读入数据总结前言 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 随着互联网技术的发展 系统用户量的增长 很多系统都采用了分布式的方式进行部署 这个固然大大提高了系统的性能和可用性 但是分布式部署导致各种服务数量大增 这给我们进行服务治理和运维带来了困扰 一 Eureka 是什么 nbsp nbsp nbsp nbsp nbsp nbsp

前言

       随着互联网技术的发展,系统用户量的增长,很多系统都采用了分布式的方式进行部署。这个固然大大提高了系统的性能和可用性,但是分布式部署导致各种服务数量大增,这给我们进行服务治理和运维带来了困扰。


一、Eureka是什么?

       Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

二、Eureka是干什么的?

       Eureka分为Eureka客户端和Eureka服务端,Eureka客户端提供服务注册与注销、服务发现的功能,Eureka服务端提供服务治理的功能。

三、Eureka原理解析

1.服务治理流程

在这里插入图片描述
流程说明:
       (1)服务提供者集成Eureka客户端,启动时,Eureka客户端发送注册请求到Eureka服务端;
       (2)Eureka客户端每30秒发送一次续约请求到Eureka服务端;
       (3)若Eureka服务端超过90秒未收到服务提供者的续约请求,则Eureka服务端会将其从服务列表中踢除;
       (4)服务消费者集成Eureka客户端,启动时,Eureka客户端同样会发送注册请求到Eureka服务端;
       (5)服务消费者中,Eureka客户端每隔30秒,会从Eureka服务端获取服务实例列表,其中,首次是全量查询,后续为增量查询;获取到实例列表后,Eureka客户端会将其写入到本地缓存中;
       (6)服务消费者调用服务提供者时,Eureka会总本地缓存获取对应的实例,并进行接口调用。














2.Eureka高可用架构

在这里插入图片描述
       Eureka支持多机房部署的高可用架构,其中各个机房的Eureka客户端会请求本机房的Eureka服务端,而各机房的Eureka服务端则会将服务实例信息进行互相同步,保证各个Eureka服务端的实例信息都是最新的。

3.Eureka服务端缓存架构

在这里插入图片描述
       为避免读写冲突,Eureka采用多层缓存的架构。
       服务注册时,Eureka服务端会将服务实例更新到注册实例列表缓存(register)和读写缓存(readWriteCacheMap)中,然后Eureka服务端每隔30秒会将读写缓存(readWriteCacheMap)的数据更新到只读缓存(readOnlyCacheMap)中。
       消费者从Eureka服务端获取实例列表时,是直接从只读缓存(readOnlyCacheMap)中获取。






4.Eureka健康检查

5.Eureka分区

       Eureka的分区概念分为区域(region)和机房(zone)。如上图,区域(region)是北京,机房分为zone-1和zone-2。消费者(Consumer-1)调用服务时,会优先调用zone-1里面的服务提供者(Service-1),只有zone-1里面的服务提供者(Service-1)不可用,才会去调用zone-2里面的服务提供者(Service-2)。


四、Eureka实战

1.创建Eureka服务端

(1)创建名为eureka-server的maven工程

(2)引入Eureka-server依赖

 
      <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0 
       modelVersion> <parent> <groupId>com.hxq 
        groupId> <artifactId>spring-cloud-hxq 
         artifactId> <version>0.0.1-SNAPSHOT 
          version>  
           parent> <artifactId>eureka-server 
            artifactId> <name>eureka-server 
             name> <properties> <project.build.sourceEncoding>UTF-8 
              project.build.sourceEncoding>  
               properties> <dependencies> <dependency> <groupId>org.springframework.cloud 
                groupId> <artifactId>spring-cloud-starter-netflix-eureka-server 
                 artifactId>  
                  dependency>  
                   dependencies>  
                    project> 

       Eureka-server依赖:spring-cloud-starter-netflix-eureka-server。

(3)创建启动类

package com.hxq; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; / * 注册中心 * @author Administrator * */ @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { 
      public static void main(String[] args) { 
      SpringApplication.run(EurekaServerApplication.class, args); } } 

       启动类要加上@EnableEurekaServer注解。

(4)创建application.yml配置文件

server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${ 
     eureka.instance.hostname}:${ 
     server.port}/eureka/ spring: application: name: eurka-server 

2.创建Eureka客户端

(1)创建名为service-hi的maven工程

(2)引入Eureka-client依赖

 
      <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0 
       modelVersion> <parent> <groupId>com.hxq 
        groupId> <artifactId>spring-cloud-hxq 
         artifactId> <version>0.0.1-SNAPSHOT 
          version>  
           parent> <artifactId>service-hi 
            artifactId> <name>service-hi 
             name> <dependencies> <dependency> <groupId>org.springframework.boot 
              groupId> <artifactId>spring-boot-starter-web 
               artifactId>  
                dependency> <dependency> <groupId>org.springframework.cloud 
                 groupId> <artifactId>spring-cloud-starter-netflix-eureka-client 
                  artifactId>  
                   dependency>  
                    dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot 
                     groupId> <artifactId>spring-boot-maven-plugin 
                      artifactId>  
                       plugin>  
                        plugins>  
                         build>  
                          project> 

(3)创建启动类

package com.hxq; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; / * 服务提供者 * * @author Administrator * */ @SpringBootApplication @EnableEurekaClient @RestController public class ServiceHiApplication { 
      public static void main(String[] args) { 
      SpringApplication.run(ServiceHiApplication.class, args); } / * 服务端口 */ @Value("${server.port}") private String port; @RequestMapping("/hi") public String home(@RequestParam(value = "name", defaultValue = "hxq") String name) { 
      return "hi " + name + " ,i am from port:" + port; } } 

       启动类要加上@EnableEurekaClient注解。

(4)创建application.yml配置文件

server: port: 9100 spring: application: name: service-hi eureka: serviceUrl: defaultZone: http://localhost:8761/eureka/ 

3.服务验证

(1)启动eureka-server服务

在这里插入图片描述

(2)启动service-hi服务

在这里插入图片描述

(3)打开Eureka服务列表

五、微服务精通系列文章

  • 微服务精通之Eureka原理解析
  • 微服务精通之Ribbon原理解析
  • 微服务精通之Hystrix原理解析
  • 微服务精通之Feign原理解析
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178675.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:44
下一篇 2026年3月26日 下午4:44


相关推荐

  • 详解单调栈算法

    详解单调栈算法前言如果你对这篇文章可感兴趣,可以点击「【访客必读-指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。栈属于基础数据结构之一,基础到仅用「后进先出」这四个字即可完整概括其核心特征。然而,基础并不代表着简单,「后进先出」的背后反而隐藏着多样的变化与极其广泛的应用。在本篇文章中,我们将针对在基础栈上稍加改动所形成的「单调栈」算法进行详解。该算法与「单调队列」组成了算法题中最常考察的线性数据结构,属于面试中必知必会的算法知识。栈首先我们来回忆一下「栈」。「栈」是一种「后进先出」的线

    2026年2月19日
    6
  • SharePoint2007中的WCM

    SharePoint2007中的WCM

    2021年7月29日
    60
  • BeanUtils.copyProperties忽略null值/只拷贝非null属性

    BeanUtils.copyProperties忽略null值/只拷贝非null属性问题场景例如有个对象要提交 提交一次 第二次提交我们希望是对上次提交的完善 那么用其他方式实现很麻烦 本身的 BeanUtils copyProperti 也是不大支持 解决方案 hutool 开源库为我们提供了更为强大的 Bean 工具 BeanUtil 只需要一句代码就搞定 BeanUtil copyProperti oldDetail get userDetail true Copy

    2026年3月17日
    5
  • 安卓搭建虚拟服务器,安卓手机搭建云服务器

    安卓搭建虚拟服务器,安卓手机搭建云服务器安卓手机搭建云服务器内容精选换一换本文介绍使用云手机服务时需要了解的基本概念 云手机是一台包含原生安卓操作系统 具有虚拟手机功能的云服务器 简单来说 云手机 云服务器 AndroidOS 您可以远程实时控制云手机 实现安卓 APP 的云端运行 也可以基于云手机的基础算力 高效搭建应用 如云游戏 移动办公 直播互娱等场景 服务器是用来提供云手机的物理服务器 云手机目前以服务器华为云云手机服务帮助中心

    2026年3月17日
    1
  • 基于大数据的舆情分析系统架构(架构篇)

    前言互联网的飞速发展促进了很多新媒体的发展,不论是知名的大V,明星还是围观群众都可以通过手机在微博,朋友圈或者点评网站上发表状态,分享自己的所见所想,使得“人人都有了麦…

    2022年4月5日
    219
  • 【iOS开发-图层】图层的获取与一些属性

    【iOS开发-图层】图层的获取与一些属性

    2022年2月5日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号