ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Eureka 服务注册与发现

2022-04-18 08:02:48  阅读:160  来源: 互联网

标签:保护模式 服务 Consul Server 注册 Eureka


服务治理

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。

在传统的 rpc 远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

服务注册与发现

Eureka 采用了 CS 的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server 并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息,比如:服务地址、通讯地址等以 别名方式 注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地 RPC(Remote Procedure Call) 调用 RPC。

远程调用框架核心设计思想:在于 注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何 rpc 远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

LA1538.md.png

Eureka 的两个组件

Eureka 包含两个组件:Eureka ServerEureka Client

Eureka Server 提供服务注册服务。各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。

Eureka Client 通过注册中心进行访问。是一个 Java 客户端,用于简化 Eureka Server 的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向 Eureka Server 发送心跳(默认周期为 30 秒)。如果 Eureka Server 在多个心跳周期内没有接收到,Eureka Serve 将会从服务注册表中把这服务节点移除(默认 90 秒);

自我保护机制

概述

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如果在Eureka Server的首页看到以下这段提示,则说明Eureka进入了保护模式:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.
RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE

为什么会产生 Eureka 自我保护机制

为了 EurekaClient 可以正常运行,但是与 EurekaServer 网络不通情况下,EurekaServer 不会立刻将EurekaClient 服务剔除。

默认情况下,如果 EurekaServer 在一定时间内没有接收到某个微服务实例的心跳,EurekaServer 将会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤) 时,微服务与 EurekaServer 之间无法正常通信,以上行为可能变得非常危险了—— 因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka 通过“自我保护模式”来解决这个问题——当 EurekaServer 节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。

开关自我保护机制

server:
	#关闭自我保护机制,保证不可用服务被及时踢除
	enable-self-preservation: false
	eviction-interval-timer-in-ms: 2000

总结

在自我保护模式中,Eureka Server 会保护服务注册表中的信息,不再注销任何服务实例。

它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。自我保护模式是一种应对网络异常的安全保护措施,使用自我保护模式,可以让 Eureka 集群更加的健壮、稳定。

Consul

简介

Consul 是一套开源的分布式 服务发现配置管理 系统,由 HashiCorp 公司用 Go 语言开发。

提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows;

主要特点

服务发现

Consul 的客户端可以注册服务,例如 or ,其他客户端可以使用 Consul 发现给定服务的提供者。使用 DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。相当于是 api 中的 mysql。

健康检查

Consul 客户端可以提供任意数量的健康检查,或者与给定服务相关联(“网络服务器是否返回 200 OK”),或者与本地节点相关联(“内存利用率是否低于 90%”)。操作员可以使用此信息来监控集群的健康状况,服务发现组件使用它来将流量从不健康的主机中路由出去。

KV 存储

应用程序可以将 Consul 的分层键/值存储用于任意数量的目的,包括动态配置、特征标记、协调、领导者选举等。简单的 HTTP API 使其易于使用。

安全服务通信

Consul 可以为服务生成和分发 TLS 证书以建立相互 TLS 连接。意图可用于定义允许通信的服务。可以通过可以实时更改的意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。

多数据中心

Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。

使用指南

https://www.springcloud.cc/spring-cloud-consul.html

四者的对比

对比项 Eureka Zookeeper Consul Nacos
语言 Java Java Go
CAP AP CP CP CP+AP
服务健康检查 可配支持 支持 支持 支持
对外暴露接口 HTTP HTTP/DNS 客户端 HTTP/DNS
Spring Cloud 集成 已集成 已集成 已集成 已集成
跨注册中心同步 不支持 不支持 支持 支持
雪崩保护

标签:保护模式,服务,Consul,Server,注册,Eureka
来源: https://www.cnblogs.com/lhnstart/p/16158102.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有