Eureka服务注册与发现
1.什么是Eureka?
-
Netflix 在设置Eureka时,遵循的就是AP原则
-
Eureka是Netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务而言是非常重要的,有了服务发现与注册,只需要使用服务的标识符就可以访问服务,而不需要修改服务调用的配置文件,功能类似于Dubbo的注册中心–Zookeeper;
2.基本原理
- Eureka的基本原理
- springCloud封装了NetFlix公司开发的Eureka模块来实现服务注册和发现
- Eureka使用了C-S的架构设计,EurekaServer作为服务注册功能的服务器,它是服务注册中心
- 系统中的其他微服务模块,通过使用Eureka的客户端连接到EurekaServer并维持心跳连接【每隔一段时间就发送信息,告诉服务中心,我还在正常工作】,这样系统的维护人员就可以通过EurekaServer来监控系统中各个微服务是否正常运行,springCloud的一些其他模块(例如Zuul)就可以通过EurekaServer来发现系统中的其他微服务,并执行相关逻辑。
- Eureka包含两个组件 Eureka Server 和Eureka Client
- Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有的可用服务节点的信息,服务节点的信息可以在页面中直观的看到。
- Eureka Client是java客户端,用于简化Eureka Server的交互,客户端同时具备一个内置的,使用轮询负载算法的负载均衡器,在应用启动后,将会向Eureka Server发送心跳(默认周期30s),如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳(默认周期90s),Eureka Server 就会将该服务从表中移除。
3.Eureka Server的简单注册和使用
-
在一个已经创建了生产者和消费者的springBoot工程中,创建一个新的model,导入Eureka Server依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.7.RELEASE</version> </dependency>
-
在resource下创建配置文件application.yml,进行配置
server: port: 8090 # eureka配置 eureka: instance: hostname: localhost # Eureka服务端实例名称 client: register-with-eureka: false # 表示是否向服务端注册自己 fetch-registry: false # 为false,表示自己为注册中心 service-url: # 监控页面的url defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
-
创建Eureka主启动类
package com.zhang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServer_8090 { public static void main(String[] args) { SpringApplication.run(EurekaServer_8090.class,args); } }
-
打开浏览器访问:http://localhost:8090/ ,如下页面,成功!
-
在上一部分写的provider模块,将这个模块注册到Eureka Server中;
-
在provider模块的pom.xml文件中导入依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!--用于完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
# Eureka的配置,服务注册到哪里 eureka: client: service-url: defaultZone: http://localhost:8090/eureka/ instance: instance-id: springcloud-provider-dept-8001 # 该服务节点名称 # actuator中显示的信息 info: app.name: zhang-springCloud-provider-8080
-
在启动类中加注解:@EnableEurekaClient
-
启动两个部分:http://localhost:8090/
-
**代码根据模块id查询详细信息:可以在controller层创建关于discoveryClient的方法;**
-
Eureka集群环境搭建(创建多个Eureka,多个Eureka相互关联)
就是在配置文件中使用不同的端口号;defaultZone写其他的Eureka地址,就完成了关联
-
CAP原则和zookeeper对比
-
回顾CAP原则
-
RDBMS(mysql Oracle SQLServer): ACID
A:原子性 C:一致性 I:隔离性 D:持久性
-
NoSQL(Redis mongdb): CAP
C:强一致性 A:可用性 P:分区容错性 CAP的三进二:CA,AP,CP CAP的理论核心: 1.一个分布式系统不可能同时很好的满足一致性,可用性和分区容错这三个需求 2.根据CAP原理,将NoSQL数据库分成满足CA原则,AP原则,CP原则三大类 a.CA:单点集群,满足一致性,可用性的系统,通常可扩展性差 b.CP: 通常性能不是很高 c.AP: 通常可能对一致性要求低一些
-
-
Eureka和Zookeeper对比:
- 分区容错性是分布式系统必须保证的:
- Zookeeper是CP (在服务节点失去联系后,会导致服务瘫痪)
- Eureka是保证的AP (自我保护机制就是保证某个节点失效不会瘫痪,甚至会保存一段时间)
- 分区容错性是分布式系统必须保证的:
-
Eureka和Zookeeper对比:
- 分区容错性是分布式系统必须保证的:
- Zookeeper是CP (在服务节点失去联系后,会导致服务瘫痪)
- Eureka是保证的AP (自我保护机制就是保证某个节点失效不会瘫痪,甚至会保存一段时间)
- 分区容错性是分布式系统必须保证的:
-