Spring Cloud之Eureka服务注册与发现

随着微服务的兴起,很多单体架构的项目被拆分成多个微服务,虽然服务的复杂性和耦合性被降低,但是微服务数量的增加,从而增加了多个微服务协同管理的成本,比如不同服务之间请求转发,相同服务器之间的负载均衡等,为了解决这些问题,服务注册和服务发现越发让人青睐。

服务注册,提供一个服务注册中心,它可以和服务提供者交互,服务提供者可以动态的把服务注册到注册中心,并且服务提供者和注册中心保持心跳检测,一旦服务提供者故障或宕机,注册中心可以及时移除该服务,当服务提供者故障修复后能及时重新注册服务,较常用的为Eureka、Consul、Zookeeper等。

服务发现可以分服务端发现和客户端发现。

服务端发现,即服务的发现放在服务端来做,通过服务端和注册中心交互,来实现请求的转发和负载均衡等,这种方式对于客户端来说,调用简单,但是这种方式调度以及存储都由中间件服务器完成,中间件服务器可能会面临过高的负载,如果中间服务器故障,服务将全面受影响。

客户端发现,即服务器的发现放在客户端来做,客户端定时从注册中心拉取相应的服务到客户端,由客户端来做负载均衡和服务器调用,从而把负载均衡和调用的压力分摊到客户端,由于客户端会从注册中心定时拉取服务到本地缓存,即使注册中心故障,只是不能再从注册中心获取新服务而已,也不影响已经缓存在本地的服务正常调用,Eureka的服务发现便是基于这种模式。


什么是Eureka

Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个Java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡,更多可以参考官网:点击打开链接

Eureka的高层架构

这个张架构图来自Eureka的wiki


这个张图首先被竖线分割成3块,这表示这3个区域(Region),即根据地理位置把某个地区的基础设施服务集合称为一个区域,并且每个区域又可以划分为多个可用区(Zone),每个可用区可以由多个数据中心组成,其实这些都是一些大的集群或数据中心才需要考虑的问题,对于小范围内集群,整个集群可以看成一个Region,每台Eureka server可以看做一个Zone。

 EureKa Server: 服务注册中心,它维护服务注册表,并且将信息同步给其他Eureka Server,在默认配置下如果90秒没有收到服务提供发送的续约,则Eureka服务器会将该服务实例从服务注册列表删除。

Application Service:  服务提供者,它通过Eureka的客户端和Euraka注册中心交互,可以向Eureka服务器注册(Registry)服务,服务下线(cancel,服务提供者主动发送服务下线请求让服务下线),服务续约(renew,Eureka客户端会每隔30秒发送一次心跳来续约。 通过续约来告知Eureka Server该Eureka客户仍然存在,服务是可用状态)

Application Client: 服务消费者,客户端从服务注册中心获取注册表信息,并将其缓存在本地,默认配置下该注册列表信息定期(每30秒钟)更新一次,客户端会根据服务注册表查询其他服务,并根据负载均衡算法,从而进行远程服务调用。

 Eureka高可用(HA)集群搭建

HA系统的CAP特性
一致性(C):任何时刻,所用的应用程序都能访问得到相同的数据。
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。

分区容错性(P):分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性或可用性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

由上面描述看,C要求数据一致性,最强的数据一致性便是单机服务器,这样肯定是100%的数据一致性。A要求是系统的可用性,一个系统要可用性高,肯定要大于一台机器,否则存在明显的单点故障,然而随着机器的增加,每台机器都有一个数据备份,从而使得数据一致变得更加困难,从而也降低了数据的一致性,由此可见在某种程度上C和A是互斥的,所以很多系统都选择了AP或CP特性。

CP系统:在尽量保证可用性(A)的情况下,如果发生了分区(P),优先保证数据的一致性(C);一些主备自动切换的系统(多台服务器采用主从模式提供服务,在主机宕机或故障的情况下,备机可以快速接替主机工作,即主备自动切换)基本上都属于这一类,因为备机在切换成主机时不对外提供服务,并且为了保证数据一致性需要进行数据同步,如zookeeper 主节点Leader宕机,Follower节点会自动切换成Leader节点;Hadoop的Active的NameNode节点宕掉,Standby的NameNode节点在Zookeeper的协调下主备切换,Redis中的哨兵模式Slave节点切换成Master节点等。

AP系统:在尽量保证数据一致性(C)的情况下,如果发生分区(P),优先保证系统的可用性(A);采用p2p对等模式提供服务,即多台服务器部不分主从,对等的向外提供服务,即使某台机器故障,时时也不影响对外提供服务。一般客户端需要在服务调用的时候,如果某个台服务器故障需自动屏蔽该服务器,并可以采取一些措施,如服务降级,断路器模式等,暂时避开故障服务,调用可用的服务。Eureka集群便是基于这种模式,Eureka采用节点之间相互注册,尽可能的保证数据一致性,采用对等模式对外提供服务实现AP特性。

HA原理介绍完,下面开始Eureka集群搭建,可上GitHub下载Eureka源码编译打包,然后在web服务器中运行即可,这里不做具体介绍,下面我们介绍通过定制项目的模式来搭建集群。首先建立一个maven项目,pom.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.test.eureka</groupId>
	<artifactId>eureka</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eureka</
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值