启动指定eureka地址_2021升级版微服务教程3—Eureka完全使用指南

2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」

323711299392f9a4150235e99e85e653.png
5344b5370752134fc21f0584e91692ad.png

Eureka服务注册和发现

本文要点:

  • 什么是服务注册和发现
  • Eureka的使用
  • CAP
  • Eureka集群搭建

什么是服务注册和发现

2e72b81f72ab075de438422f35196dfc.png
  • 治理中心
  • 服务注册
  • 服务发现
  • 心跳机制

以上都可以通过 Eureka 可以实现

Eureka基本使用

基本概念

Spring Cloud 封装了 Netflix 公司开发的 Eureka 组件来实现服务注册和发现。

e10d45cb0019177d66f3477821f983b0.png

在Eureka的架构中有两个角色: 服务注册中心 Eureka Server服务客户端 Eureka Client

  • Eureka注册中心 Eureka ServerEureka Server 作为服务注册功能的服务器,是服务注册中心。系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。
  • Eureka客户端 Eureka ClientEurekaClient是一个Java客户端,用于简化Eureka Server的交互在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势首先可以降低Eureka Server的压力,其次当所有的Eureka Server宕机,服务调用方依然可以完成调用

Eureka注册中心搭建

  1. 在Project中创建moduleimage-20210109160624673
  2. 导入依赖 <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId> dependency> dependencies>
  3. 启动类上加注解
528e4cf4139d923a3503f2d0f5eba4e4.png
  1. 配置文件server: port: 8800 eureka: client: # eureka.client. register-with-eureka:由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己 registerWithEureka: false # 不主动发现别人 fetchRegistry: false # 声明注册中心的地址 serviceUrl: defaultZone: http://localhost:8800/eureka/ #给当前应用起个服务名称 不能通过路径访问的 这个服务名称 在微服务中使用代表当前服务 spring: application: name: eureka-server
  2. 启动注册中心 访问注册中心的监控页面 http://localhost:8800image-20210109160155304

客户端搭建—用户服务

以用户服务为例

  1. 创建项目![image-20200420164741922](../07班之前SpringCloud H版本/https://gitee.com/bingqilinpeishenme/blogimg/raw/master/img/image-20200420164741922.png)
  2. 导入相关依赖 org.springframework.cloud spring-cloud-starter-netflix-eureka-client
  3. 启动类上加注解image-20200420165233554
  4. 配置文件server: port: 8804 #指定当前服务的名称 这个名称会注册到注册中心 spring: application: name: cloud-user-8804 # 指定 服务注册中心的地址 eureka: client: serviceUrl: defaultZone: http://localhost:8800/eureka

通过以上四步 就完成了一个 Eureka客户端的搭建 直接启动项目 通过Eureka的注册中心可以看到

e4983c5d54e4c00461855d371a63db0b.png

按照上述步骤,将商品服务和订单服务改造为Eureka客户端。

Eureka进阶使用

CAP理论

目前,大型网站几乎都是分布式的,分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency 一致性
  • Availability 可用性
  • Partition tolerance 分区容错性

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

  • 分区容错性大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。Node1 和 Node2 是两台跨区的服务器。Node1 向 Node2 发送一条消息,Node2可能无法收到。系统设计的时候,必须考虑到这种情况。一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。
  • 数据一致性由于系统问题,Node1 的数据不能即时同步给Node2,此时如果获取数据,会获取到不一致的数据,所有为了保证分布式系统对外的数据一致性,选择不返回任何数据【或者所有节点不响应任何请求】。
  • 可用性要求系统内的节点在接受到请求的时候能够即时给出响应,具体来说就是:一方面需要在合理的时间内给出响应,另一方面即便是部分节点宕机,那么其他未宕机的节点也需要能够正常处理请求,即时返回的数据有问题。

一致性和可用性,为什么不可能同时成立?

答案很简单,因为可能通信失败(即出现分区容错),所以,对于分布式系统,我们只能能考虑当发生分区错误时,如何选择一致性和可用性。

需要强调的是:C 和 A 的抉择是发生在有分区问题的时候,正常情况下 系统就应该有完美的数据一致性和可用性

例子:

比如,我们有个分布式系统,有三个节点 a、b、c 组成。其中节点 a 存放了 A 表的数据,b 存放了 B 表的数据,c 存放了 C 表的数据。

如果有一个业务,它的意图是想往 A 表插入一条新数据,在 B 表删除一条已有数据,在 C 表更新一条老数据,这个分布式系统该怎么处理这种业务?

技术上我们对这种一个意图想做多件事的情况往往会包装成一个事务。当我们包装成一个事务以后,我们可能会通过先在 a 节点执行,然后去 b 节点执行,最后去 c 节点执行,等到都成功了,才会返回成功。

但是,发生了分区以后怎么办?现在 a、b 节点都成功了,到 c 发现发生了通信故障?

此时,根据 CAP 定理,你有两个选择,要么就直接返回一个部分成功的结果给客户端,要么直接卡死等客户端超时或者返回失败给客户端。当返回部分成功的时候,这就是选择了可用性(A),当卡死或者返回失败给客户端的时候,就是选择了一致性(C)。

而根据一致性和可用性的选择不同,开源的分布式系统往往又被分为 CP 系统和 AP 系统。

  • 当一套系统在发生分区故障后,客户端的任何请求都被卡死或者超时,但是,系统的每个节点总是会返回一致的数据,则这套系统就是 CP 系统,经典的比如 Zookeeper。
  • 如果一套系统发生分区故障后,客户端依然可以访问系统,但是获取的数据有的是新的数据,有的还是老数据,那么这套系统就是 AP 系统,经典的比如 Eureka。

很多时候一致性和可用性并不是二选一的问题,大部分的时候,系统设计会尽可能地实现两点,在二者之间做出妥协,当强调一致性的时候,并不表示可用性是完全不可用的状态,比如,Zookeeper 只是在 master 出现问题的时候,才可能出现几十秒的不可用状态,而别的时候,都会以各种方式保证系统的可用性。而强调可用性的时候,也往往会采用一些技术手段,去保证数据最终是一致的。

自我保护机制

Eureka首页输出警告如图:

0a7e14d5763b505f581e9114ecef71d8.png

默认情况下,如果Eureka Server在一定时间内没有接受到服务实例的心跳,Eureka将会注销该实例(默认90秒).但是当网络分区发生故障时,微服务客户端和Eureka Server 无法正常通信。以上行为可能变得特别危险了,因为微服务本身是健康的,此时不能注销该服务实例。

Eureka通过自我保护机制来解决这个问题,当Eureka Server在短时间丢失过多的服务实例(可能发生了网络分区的故障),那么Eureka Server进入自我保护模式,一旦进入此模式,Eureka Server将会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不再注销任何的服务实例),当网络故障恢复后,Eureka Server会自动退出自我保护模式。

综上, 自我保护模式是一种应对网络故障的安全保护措施 ,它的架构哲学是宁可同时保留所有的微服务,也不盲目注销任何健康的微服务, 使用自我保护模式可以让Eureka,更加健壮,稳定。

一句话:大面积出现客户端失联的时候,Eureka 注册中心进入自我保护模式,不注销任何实例

自我保护机制的配置【了解】

在Eureka Server中配置关闭自我保护机制

#关闭自我保护机制  默认开启eureka.server.enable-self-preservation=false

如果想及时剔除失效的eureka服务除了关闭自我保护机制外,可以调低eureka的心跳值

eureka-server服务端配置文件中我们添加如下配置

关闭保护机制,以确保注册中心将不可用的实例正确剔除

eureka.server.enable-self-preservation=false

(代表是5秒,单位是毫秒,清理失效服务的间隔 )

eureka.server.eviction-interval-timer-in-ms=5000

客户端配置文件中我们添加如下配置# 心跳检测检测与续约时间# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务# 配置说明#  lease-renewal-interval-in-seconds 每间隔10s,向服务端发送一次心跳,证明自己依然”存活“#  lease-expiration-duration-in-seconds  告诉服务端,如果我20s之内没有给你发心跳,就代表我“死”了,将我踢出掉。eureka.instance.lease-renewal-interval-in-seconds=10eureka.instance.lease-expiration-duration-in-seconds=20

Eureka集群搭建

注册中心集群,防止注册中心单机故障。

创建一个新的注册中心 eureka-server-8801创建项目

c86577963e6c96570c06c87f777c8da6.png
  • 导入依赖
  • 启动类加注解
  • 写配置文件
c9261b642e77d665f71651f6d507e9c3.png

修改注册中心 Eureka-server-8800的配置文件

cb1a3709f1cf02812ae6ab9ff3aa5699.png

修改所有的客户端的配置,让客户端能够同时向两个注册中心注册

f03829a8ba6e6f4978ebdd3062e00e76.png

如果你觉得这篇内容对你挺有有帮助的话:

  1. 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  2. 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。
  3. 觉得不错的话,也可以关注小编,小编还会更新更多文章和讲解视频(感谢大家的鼓励与支持)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值