如上图所示,常见的微服务应用包括以上各个方面:网关控制,服务配置中心,服务注册中心,服务熔断降级,负载均衡,消息队列等,而SpringCloud Netflix针对以上问题,都有一个相对应的组件来处理相关问题,如:Eureka,Zuul等等。

Eureka注册中心介绍与使用

练习代码gitee地址: https://gitee.com/longjiamou/spring-cloud-netflix.git

1. 什么是Eureka

Eureka是NetFilx的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,实现服务的发现和故障转移,服务注册与发现对于微服务来说是非常重要的,它可以使我们通过服务的标识符(如:服务名等)来访问其他的服务,不需要修改服务调用的相关配置文件。总之,Eureka就是一个服务统一管理的中心,我们可以将我们开发的服务都注册到里面,然后就可以通过相关的标识符来访问其他服务。

2. Eureka原理

基本架构: Eureka采用了CS的架构设计,EurekaServer作为服务注册功能的服务器,可以设置为注册中心,其实他本身也是一个我们自己搭建的服务,我们也可以将它注册,就是自己注册自己,但普遍不这么用。而系统中的其他微服务,我们可以将它看为EurekaClient,将其他微服务注册到EurekaServer(也就是注册中心)并维持心跳连接。这样子我们就可以监控系统的各个服务状况。

CS架构: Eureka包含俩个组件,分别是Eureka Server和Eureka Client。

  • Eureka Server:Eureka Server提供服务注册,各个节点(服务)启动后,会在Eureka Server中进行注册,我们可以在注册中心中查看所有启动节点的相关信息。
  • Eureka Client:Eureka Client是一个java客户端,用于简化EurekaServer的交互,客户端同时具备一个内置的轮询负载均衡器,可以简单的实现一下负载均衡。在应用启动后,Eureka Client将想Eureka Server发送心跳(默认30秒一周期)。如果server在多个心跳周期中没有接收到某个节点的心跳,那么注册中心将会将这个节点移除掉(默认90秒)。所以,当我们的服务宕机后,注册中心并不会立刻将我们的服务节点删除,而是在等心跳机制,心跳机制后,如果服务还没有重新启动,注册中心才会将相关节点移除。

角色: Eureka Server:提供服务的注册与发现,Eureka Provider:将自身服务注册到Eureka中,方便消费者能够找到,Eureka Consumer:服务消费,从注册中心中找到相关的服务提供者。

3. Eureka原则

原则信息: Eureka遵循原则信息和我们的数据库的原则信息类似,都是:ACID,CPA等等

ACID: ACID泛指原子性,一致性,隔离性和持久性。

  • A(Atomicity):原子性是指事务中的所有操作都是一个整体,里面的操作要么都成功,要么都失败。
  • C(Consistency):执行前后的数据必须保持一致
  • I(Isolation):隔离性是针对多个事务而言的,事务之间不能相互干扰,要隔离开来
  • D(Durability):提交之后,对数据库中的数据的改变时永久性的,接下来即使数据库发生故障也不会影响

CAP: CAP泛指强一致性,可用性和分区容错性,在分布式系统中,不可能同时很好的满足以上三个条件,普遍采取三进二的原则,如:CP,CA,AP,在目前大多数的分布式系统中,因为要保证分区容错性,所以大多数都是在A和C之间选择,但在传统的一些服务来看,如:银行,就必须要保证一致性。

  • C(Consistency):更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致
  • A(Availability):服务一直可用,而且是正常响应时间
  • P(Partition Tolerance):分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,就是说,当一个服务挂掉之后,系统的其他服务还能使用,而不是整个系统不可用。

Eureka采用原则:Eureka采用的是AP原则,优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉都不会影响其他节点的正常工作,没有挂掉的节点依然可用提供注册和服务查询。在Eureka Client在向某个Eureka注册时,如果发现连接失败,客户端会自动切换到另一个节点注册,只要还有一个服务端的存在,客户端都可以完成注册,只不过查到的信息可能不是最新的。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有心跳的话,那么Eureka则会认为客户端和注册中心出现了网络故障,此时Eureka会做出以下行为:

  1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务

  2. Eureka仍然会接收新服务的注册,但是不会同步到其他节点上

  3. 当网络稳定时,当前实例新的注册信息(新服务)重新同步到其他节点上

因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样子使整个注册服务崩掉。

zookeeper采用原则:zookeeper采用的是CP原则,优先保证强一致性。在zookeeper中,当master主节点因为网络故障与其他的节点失去联系时,剩余节点会重新进行leader选举。在选举的过程中,由于所需的时间过长,大概是30~120秒,在这个时间段zookeeper集群是不可用的,所以会导致整个分布式系统出现网络故障问题,直到选举成功出现新的master节点。由于在分布式系统中,因为网络而导致集群失去master主节点是很大概率会发生的事情,所以zookeeper的CP原则也存在很大的弊端。

4. 简单使用

4.1 非集群搭建:

  1. 准备好相关的服务

           Eureka-8081:作为服务的注册中心,提供服务注册管理,server-provider-8083:服务提供者,也可以是消费者,在注册中心注册。

  2. 配置Eureka-8081相关配置

    //pom文件,导入相关依赖
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.6.RELEASE</version>
    </dependency>
    
    #配置yam文件
    server:port: 8081eureka:instance:hostname: localhost                #服务注册中心主机名client:register-with-eureka: false        #声明不注册自身fetch-registry: false           #声明该服务作为注册中心使用service-url:                  #声明界面访问地址defaultZone: http://localhost:8081/eureka/
    
    //启动类添加相关注解
    @SpringBootApplication
    @EnableEurekaServer
    public class Eureka8081Application {public static void main(String[] args) {SpringApplication.run(Eureka8081Application.class, args);}
    }
    
    1. 配置server-provider-8083配置
//pom文件,导入相关依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version>
</dependency>
#配置yam文件
server:port: 8083eureka:client:service-url:         #配置注册中心地址,需要Eureka-8081提供的一样,且尾端要为/eureka/defaultZone: http://localhost:8081/eureka/
spring:application:name: server-provider-8083
//启动类配置注解
@SpringBootApplication
@EnableEurekaClient
public class ServerProvide8083Application {public static void main(String[] args) {SpringApplication.run(ServerProvide8083Application.class, args);}
}
  1. 启动俩个服务后,访问注册中心客户端地址:http://localhost:8081/eureka/

4.2集群搭建:

在上面的基础上,多新建一个注册中心Eureka-8082,Eureka-8082和Eureka-8081的配置基本相同,只不过端口和互相映射的路径有差别。

​ Eureka的集群配置其实原理很简单,主要将俩个注册中心产生连接关系就可以了。

  1. Eureka-8082相关配置:
//pom文件,导入相关依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.6.RELEASE</version>
</dependency>
#配置yam文件
server:port: 8082eureka:instance:#服务注册中心主机名(访问路径和localhost一样,这里写127.0.0.1主要是用来区分的)hostname: 127.0.0.1    client:register-with-eureka: false      fetch-registry: false           service-url:                    #映射Eureka-8081注册中心,将访问路径设置为Eureka-8081的路径(重点)defaultZone: http://localhost:8081/eureka/
//启动类添加相关注解
@SpringBootApplication
@EnableEurekaServer
public class Eureka8082Application {public static void main(String[] args) {SpringApplication.run(Eureka8082Application.class, args);}
}

2.修改Eureka-8081的yam文件

server:port: 8081eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: falseservice-url:#将映射地址修改为Eureka-8082的路径(重点)defaultZone: http://127.0.0.1:8082/eureka/

3.修改server-provider的yaml文件

server:port: 8083eureka:client:service-url:#将注册中心设置为俩个defaultZone: http://localhost:8081/eureka/,http://12.0.0.1:8082/eureka/
spring:application:name: server-provider-8083

4.启动Eureka-8081,Eureka-8082和server-provider三个服务,分别访问http://localhost:8081/eureka/和http://localhost:8082/eureka/可得出:

所以,如果想要建立有三个注册中心以上的集群,可以通过配置yaml文件里面的映射路径,使三个注册中心产生联系,然后在服务注册时向三个注册中心都注册即可。

SpringCloud Netflix---Eureka服务注册相关推荐

  1. SpringCloud[01]Eureka服务注册与发现

    文章目录 Eureka服务注册与发现 1. Eureka基础知识 1. 什么是服务治理 2. 什么是服务注册与发现 3. Eureka包含两个组件:**Eureka Server** 和 **Eure ...

  2. SpringCloud(五)Eureka服务注册与发现

    Eureka基础知识 什么是服务治理   SpringCloud 封装了 NetFlix公司开发的Eureka模块来实现服务治理   在传统的rpc远程调用框架中, 管理每个服务与服务之间依赖关系比较 ...

  3. SpringBoot 2 使用 SpringCloud Netflix Eureka 实现服务注册与发现

    开篇词 该指南将引导你启动和使用 Netflix Euraka 服务注册表. 你将创建的应用 我们将搭建 Netflix Eureka 服务注册表,然后构建一个客户端,该客户端将同时在注册表中注册并使 ...

  4. SpringCloud笔记(Hoxton)——Netflix之Eureka服务注册与发现

    基础应用 Eureka简介 Eureka是一个基于REST的服务,主要在AWS云中使用,定位服务来进行中间层服务器的负载均衡和故障转移. SpringCloud封装了Netflix公司开发的Eurek ...

  5. SpringCloud组件 源码剖析:Eureka服务注册方式流程全面分析

    在SpringCloud组件:Eureka服务注册是采用主机名还是IP地址?文章中我们讲到了服务注册的几种注册方式,那么这几种注册方式的源码是怎么实现的呢?我们带着这一个疑问来阅读本章内容能够让你更深 ...

  6. Eureka服务注册中心---SpringCloud

    Eureka服务注册中心 5.1 什么是Eureka Netflix在涉及Eureka时,遵循的就是API原则. Eureka是Netflix的有个子模块,也是核心模块之一.Eureka是基于REST ...

  7. SpringCloud——Eureka服务注册和发现

    一.SpringCloud和Dubbo SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题. content Dubbo SpringCloud ...

  8. 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)

    跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...

  9. SpringCloud笔记(1)—Eureka服务注册中心

    项目开发练习涉及的模块 Eureka:负责服务发现相关.Eureka Server/Client.高可用.服务发现机制. Config:负责统一配置中心.Config Server/Client.Sp ...

  10. springcloud Eureka服务注册和发现

    一,Eureka基本介绍: Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...

最新文章

  1. C/C++语言编程的隐患!
  2. 年轻人,别动不动就想搞个“大社交”,工具型社交才是正路子
  3. HDU:4185-Oil Skimming
  4. Promise实战AJAX封装
  5. 前端学习(792):返回索引号
  6. python中使用正则模板匹配结果
  7. jinfo命令 Java Configuration Info
  8. 当网络主播也需要考试了!持证上岗能否改善直播圈乱象?
  9. 记一下特殊节日爬取微博表情包
  10. OCJP认证 | 国际上最热门的IT认证之一,开启你高级认证的钥匙
  11. mql5计算机语言函数库,MQL5 函数列表 - MQL5参考 - 参考MetaTrader 5的算法/自动交易语言...
  12. 设置定时器,持续调用接口
  13. 简历中尽量不要出现精通_在个人简历中,熟悉、了解、熟练、精通之间有什么区别?...
  14. 调用Kinect 2.0摄像头
  15. EF中一种简单的多条件动态查询方法
  16. 《高等代数学》(姚慕生),例1.5.10
  17. TestNG - 运行失败的test
  18. OSChina 周三乱弹 —— 程序员的专属小习惯
  19. 腾讯T3亲自讲解!2021年最新Android面试点梳理,附带学习经验
  20. 标准正态分布+标准正态分布概率表+分布函数+积分

热门文章

  1. 网络类型(P2P、MA、BMA、NBMA)
  2. 电话区号信息API接口,免费好用
  3. 爱创课堂每日一题第五十六天-对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?...
  4. 03 学生免费注册Pycharm专业版
  5. Linux文件管理及用户命令
  6. 【git】git下拉项目Pulling is not possible because you have unmerged files解决方案
  7. 用 ListBox 和 DataBinding 显示列表数据 (木野狐译)
  8. 查看系统架构是32位还是64位--用Enki学Linux系列(15)
  9. ajax鼠标悬停,mouseout后触发jQuery Ajax鼠标悬停事件
  10. 80%的人都不知道在Excel中掐头去尾求平均分用这个函数