- 服务注册中心Eureka
- 一、什么是服务治理
- 二、什么是服务注册与发现
- 三、Eureka两个组件
- 三、单机版Eureka
- 1.依赖引用
- 2.yml相关配置
- 3.主启动类
- 3.测试
- 4.服务注册
- 1.pom依赖
- 2.yml配置
- 3.主启动类
- 4.测试
- 四、Eureka的工作流程
- 五、集群版Eureka
- 1.修改host文件
- 2.修改yml配置
- 3.测试
- 4.服务注册
- 5.修改服务请求配置
- 6.测试
- 六、Eureka的自我保护机制
- 1.为什么会产生Eureka自我保护机制?
- 2.什么是自我保护机制?
一、什么是服务治理
二、什么是服务注册与发现Spring Cloud 封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的rpc远程调用框架中,管理每个服务于服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用,负载均衡,容错等,实现服务发现与注册。
Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每一个服务与服务之间的一个依赖关系(服务治理概念)。任何RPC远程调用框架中,都会有一个注册中心(存在服务地址相关信息(接口地址))。
Eureka相关架构图:
- Eureka Server:提供服务注册服务,各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中的服务注册表中会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
- EurekaClient:通过注册中心进行访问,是一个Java客户端,用于简化EurekaServer的交互,客户端同时也具备一个内置的,使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接受到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)。
三、单机版Eureka 1.依赖引用
2.yml相关配置org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.cloud spring-cloud-starter-netflix-eureka-client
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka 服务端的实例名称
client:
#false 表示不向注册中心注册自己
register-with-eureka: false
#false 表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7001.com:7002/eureka/
3.主启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args){
SpringApplication.run(EurekaMain7001.class,args);
}
}
3.测试
访问:localhost:7001 后会出现该页面,表示启动成功。
4.服务注册将服务的提供者注册进Eureka注册中心。
1.pom依赖2.yml配置org.springframework.cloud spring-cloud-starter-netflix-eureka-client
server:
port: 8001
spring:
application:
name: cloud-payment-service #该名称为注册进Eureka的服务名称
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据库操作类型
driver-class-name: org.gjt.mm.mysql.Driver #mysql驱动包
url: jdbc:mysql://localhost:3306/db2021?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
eureka:
client:
#表示是否将自己注册进EurekaServer,默认为true
register-with-eureka: true
#是否从EurekaServer抓取自己的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetch-registry: true
service-url:
#注册地址
defaultZone: http://eureka7001.com:7001/eureka
mybatis:
mapper-locations: classpath:mapper
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
6.测试
通过不停访问同一个地址:http://localhost/consumer/payment/get/1 发现,8001和8002交替乱换着提供服务。
为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除。
2.什么是自我保护机制?默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销实例(默认90秒)。但是当网络分区故障发生(延迟,卡顿,拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在段时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。
在自我保护模式中,EurekaServer会保护服务注册表中的信息,不在注销任何服务实例。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。一句话讲解:好死不如赖活着。
综上:自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留)也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮,稳定。



