首先需要明确,不管是什么事物需要”治理“,那一定是该事物存在一定问题。比如环境治理。那么服务,或者说微服务为什么需要治理?对于服务来说,如果它承担的业务职责简单,那其实治理的必要性不大,因为服务运行过程是相对透明的,即使出现问题也能较快发现、定位、回滚。当服务承担的业务职责变多变大,那随着更多问题的到来,服务治理开始变得必要。服务治理也与技术架构本身息息相关。

微服务系统为什么要服务治理

微服务系统由很多个单一职责的服务单元组成,例如Netflix公司的系统是由600多个微服务构成的,而每一个微服务又有众多实例。由于微服务系统的服务粒度较小,服务数量众多,服务之间的相互依赖成网状,所以微服务系统需要服务注册中心来统一管理微服务实例,方便查看每一个微服务实例的健康状态。

服务治理的目标

  • 高可用

在服务治理下的微服务,只要有一个节点服务正常,就要保证服务的可用性

  • 分布式调用

微服务的节点散落在不同网络环境中,服务治理就需要在复杂的网络中准确的获得服务节点的网络地址。

  • 生命周期管理

微服务把自己交给服务治理进行管理,如同bean交给spring

  • 健康度检查

当服务节点不能正常工作,服务治理可以将其剔除

服务治理的解决方案

  • 服务注册:服务提供方主动自报家门

服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务名、IP地址等)告知服务注册中心。

  • 服务发现:服务消费者拉取注册数据

服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息(如服务名、IP地址等)。通常情况下,一个服务既是服务提供者,也是服务消费者。服务消费者一般使用HTTP协议或者消息组件这种轻量级的通信机制来进行服务消费。

  • 心跳检测、服务续约和服务剔除

服务注册中心会提供服务的健康检查方案,检查被注册的服务是否可用。通常一个服务实例注册后,会定时向服务注册中心提供“心跳”,以表明自己还处于可用的状态。当一个服务实例停止向服务注册中心提供心跳一段时间后,服务注册中心会认为该服务实例不可用,会将该服务实例从服务注册列表中剔除。如果这个被剔除掉的服务实例过一段时间后继续向注册中心提供心跳,那么服务注册中心会将该服务实例重新加入服务注册中心的列表中

  • 服务下线:服务提供方主动发起下线

服务治理的技术选型

Eureka Consul Nacos
一致性 AP AP AP/CP
性能
应用 主流 非主流 稳中有升

注意: 我们现在公司用的nacos主要用的是nacos config

Eureka

下面主要介绍下Eureka。Eureka server和client的搭建 这里不做介绍。之前分享zuul网关的代码中已经说过

注意:Eureka是基于CAP定理的AP系统

Eureka 管理界面介绍

  • Current time:当前的系统时间
  • Uptime:已经运行了多少时间
  • Lease expiration enabled:是否启用租约过期 ,自我保护机制关闭时,该值默认是true, 自我保护机制开启之后为false。和自我保护互斥
  • Renews threshold: 每分钟最少续约数,Eureka Server 期望每分钟收到客户端实例续约的总数。
  • Renews (last min): 最后一分钟的续约数量(不含当前,1分钟更新一次),Eureka Server 最后 1 分钟收到客户端实例续约的总数。

红字提醒

  • 自我保护机制开启
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. // 挂掉的服务有可能会被错误的当做UP,(在一定时间内)续约成功的节点个数占已注册总服务的比值,已经低于限定值,因此所有节点都不会过期,服务自保开启
  • 主动关闭了自我保护机制
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

公司内就出现了上面的提示。说明我们部署的server是主动关闭了自我保护机制

自我保护机制

Eureka的自我保护特性主要用于减少在网络分区或者不稳定状况下的不一致性问题

自我保护机制产生的原因

Eureka在运行期间会统计心跳成功的节点。如果15分钟内所有成功续约的节点占所有注册节点85%以下

Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,

Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。

上面提到公司是主动关闭了自我保护机制。虽然看不到server的代码可以猜测出公司的配置

Eureka Server端:配置关闭自我保护,并按需配置Eureka Server清理无效节点的时间间隔。

eureka.server.enable-self-preservation# 设为false,关闭自我保护
eureka.server.eviction-interval-timer-in-ms # 清理间隔(单位毫秒,默认是60*1000)

Eureka Client端:配置开启健康检查,并按需配置续约更新时间和到期时间

eureka.instance.lease-renewal-interval-in-seconds# 续约更新时间间隔(默认30秒)
eureka.instance.lease-expiration-duration-in-seconds # 续约到期时间(默认90秒) 首先需要明确,不管是什么事物需要”治理“,那一定是该事物存在一定问题。比如环境治理。那么服务,或者说微服务为什么需要治理?对于服务来说,如果它承担的业务职责简单,那其实治理的必要性不大,因为服务运行过程是相对透明的,即使出现问题也能较快发现、定位、回滚。当服务承担的业务职责变多变大,那随着更多问题的到来,服务治理开始变得必要。服务治理也与技术架构本身息息相关。
### 微服务系统为什么要服务治理
微服务系统由很多个单一职责的服务单元组成,例如Netflix公司的系统是由600多个微服务构成的,而每一个微服务又有众多实例。由于微服务系统的服务粒度较小,服务数量众多,服务之间的相互依赖成网状,所以微服务系统需要服务注册中心来统一管理微服务实例,方便查看每一个微服务实例的健康状态。 ### 服务治理的目标
- 高可用
> 在服务治理下的微服务,只要有一个节点服务正常,就要保证服务的可用性
- 分布式调用
> 微服务的节点散落在不同网络环境中,服务治理就需要在复杂的网络中准确的获得服务节点的网络地址。
- 生命周期管理
> 微服务把自己交给服务治理进行管理,如同bean交给spring
- 健康度检查
> 当服务节点不能正常工作,服务治理可以将其剔除 ### 服务治理的解决方案
- 服务注册:服务提供方主动自报家门
> 服务注册是指向服务注册中心注册一个服务实例,服务提供者将自己的服务信息(如服务名、IP地址等)告知服务注册中心。 - 服务发现:服务消费者拉取注册数据
> 服务发现是指当服务消费者需要消费另外一个服务时,服务注册中心能够告知服务消费者它所要消费服务的实例信息(如服务名、IP地址等)。通常情况下,一个服务既是服务提供者,也是服务消费者。服务消费者一般使用HTTP协议或者消息组件这种轻量级的通信机制来进行服务消费。 - 心跳检测、服务续约和服务剔除
> 服务注册中心会提供服务的健康检查方案,检查被注册的服务是否可用。通常一个服务实例注册后,会定时向服务注册中心提供“心跳”,以表明自己还处于可用的状态。当一个服务实例停止向服务注册中心提供心跳一段时间后,服务注册中心会认为该服务实例不可用,会将该服务实例从服务注册列表中剔除。如果这个被剔除掉的服务实例过一段时间后继续向注册中心提供心跳,那么服务注册中心会将该服务实例重新加入服务注册中心的列表中 - 服务下线:服务提供方主动发起下线 ### 服务治理的技术选型 ||Eureka | Consul| Nacos|
---|---|---|---|
一致性 | AP | AP|AP/CP|
性能 | 快 | 慢|快|
应用 | 主流 | 非主流|稳中有升| > 注意: 我们现在公司用的nacos主要用的是nacos config ### Eureka
> 下面主要介绍下Eureka。Eureka server和client的搭建 这里不做介绍。之前分享zuul网关的代码中已经说过 *注意*:Eureka是基于CAP定理的AP系统 #### Eureka 管理界面介绍
![](https://img2020.cnblogs.com/blog/891580/202005/891580-20200505221732055-519491829.png)
- Current time:当前的系统时间
- Uptime:已经运行了多少时间
- Lease expiration enabled:是否启用租约过期 ,自我保护机制关闭时,该值默认是true, 自我保护机制开启之后为false。和自我保护互斥
- Renews threshold: 每分钟最少续约数,Eureka Server 期望每分钟收到客户端实例续约的总数。
- Renews (last min): 最后一分钟的续约数量(不含当前,1分钟更新一次),Eureka Server 最后 1 分钟收到客户端实例续约的总数。 #### 红字提醒 - 自我保护机制开启

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.

// 挂掉的服务有可能会被错误的当做UP,(在一定时间内)续约成功的节点个数占已注册总服务的比值,已经低于限定值,因此所有节点都不会过期,服务自保开启

- 主动关闭了自我保护机制

THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.


> 公司内就出现了上面的提示。说明我们部署的server是主动关闭了自我保护机制 #### 自我保护机制
Eureka的自我保护特性主要用于减少在网络分区或者不稳定状况下的不一致性问题 自我保护机制产生的原因
Eureka在运行期间会统计心跳成功的节点。如果15分钟内所有成功续约的节点占所有注册节点85%以下
Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,
Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。 上面提到公司是主动关闭了自我保护机制。虽然看不到server的代码可以猜测出公司的配置 Eureka Server端:配置关闭自我保护,并按需配置Eureka Server清理无效节点的时间间隔。

eureka.server.enable-self-preservation# 设为false,关闭自我保护

eureka.server.eviction-interval-timer-in-ms # 清理间隔(单位毫秒,默认是60*1000)

 Eureka Client端:配置开启健康检查,并按需配置续约更新时间和到期时间

eureka.instance.lease-renewal-interval-in-seconds# 续约更新时间间隔(默认30秒)

eureka.instance.lease-expiration-duration-in-seconds # 续约到期时间(默认90秒)


看看 公司client 的配置

eureka:

instance:

prefer-ip-address: true

instance-id: \({spring.application.name}:\){spring.client.ipAdress}{server.port}

lease-expiration-duration-in-seconds: 30 #服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除

lease-renewal-interval-in-seconds: 10 #服务刷新时间配置,每隔这个时间会主动心跳一次



看看 公司client 的配置

eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.client.ipAdress}:${server.port}
lease-expiration-duration-in-seconds: 30 #服务过期时间配置,超过这个时间没有接收到心跳EurekaServer就会将这个实例剔除
lease-renewal-interval-in-seconds: 10 #服务刷新时间配置,每隔这个时间会主动心跳一次

微服务之服务治理_Eureka的更多相关文章

  1. [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务

    一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...

  2. 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh

    微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构   本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...

  3. 鹅长微服务发现与治理巨作PolarisMesh实践-上

    @ 目录 概述 定义 核心功能 组件和生态 特色亮点 解决哪些问题 官方性能数据 架构原理 资源模型 服务治理 基本原理 服务注册 服务发现 安装 部署架构 集群安装 SpringCloud应用接入 ...

  4. .NET Core微服务实施之Consul服务发现与治理

    .NET Core微服务实施之Consul服务发现与治理   Consul官网:https://www.consul.io Consul下载地址:https://www.consul.io/downl ...

  5. SOA、微服务与服务网格

    SOA架构解析 SOA 全称是: Service Oriented Architecture,中文释义为 “面向服务的架构”,它是一种设计理念,其中包含多个服务, 服务之间通过相互依赖最终提供一系列完 ...

  6. [Abp vNext微服务实践] - 服务通讯

    简介 服务通讯是微服务架构中必不可少的功能,服务通讯的效率决定了微服务架构的优略.常用的微服务通讯策略有两种,分别是rpc.http,其中rpc以gRpc框架为代表使用者最多.abp vNext微服务 ...

  7. 微服务之服务注册与发现--Eureka(附代码)

    该贴为入门贴,看完可快速知道服务注册与发现是什么?怎么用?至于深入的内容不在此篇文章所述之内,请自行百度. 内容来自:https://blog.csdn.net/nanbiebao6522/artic ...

  8. .Net Core微服务系列--服务发现

    什么是服务发现 首先我们先思考一个问题,当我们在浏览器中输入一个域名比如baidu.com,然后发生了什么才能让我们访问到百度的网页?简单来说,浏览器会首先从主机的hosts文件中查看是否有baidu ...

  9. 微服务nacos服务注册与发现

    一,以上一篇为基础 微服务从nacos配置中心获得配置信息 给service1, service2添加依赖 <dependency> <groupId>com.alibaba. ...

随机推荐

  1. 带你入门Camtasia Studio录像机软件

    Camtasia软件和其他录制软件不同,不论是编辑功能还是制作功能还是其他功能方面都远远高于其他录制软件.那这边我们可以一起了解一下基础软件功能. 首先,我们在电脑端安装了软件以后,进行实际操作.在操 ...

  2. 什么是NTFS文件格式

    说到磁盘格式,想必大家对于NTFS格式并不陌生.我们使用的u盘等硬盘设备很多都应用了此格式.NTFS文件格式究竟是什么?它都有哪些特点?今天,小编将利用这篇文章为大家进行介绍. 一.什么是NTFS文件 ...

  3. uniapp自定义picker城市多级联动组件

    uniapp自定义picker城市多级联动组件 支持多端--h5.app.微信小程序.支付宝小程序... 支持自定义配置picker插件级数 支持无限级 注意事项:插件传入数据格式为children树 ...

  4. CSS3 学习笔记(上)

    一.CSS简介 CSS(Cascading Style Sheets)层叠样式表.其中,样式定义为如何显示HTML元素,它通常储存在样式表,将样式添加到HTML中,能够解决内容与表现分离的问题.由于网 ...

  5. 【mq学习笔记】mq查找路由信息与故障延迟

    路由发现:缓存中的路由信息什么时候更新呢? 由QueueData转topicPublishInfo的List<QueueMessage>: 选择消息队列: sendLatencyFault ...

  6. Intel s2600系列做虚拟化需要注意的item

    Intel s2600cw\cp主板做虚拟化BIOS需要设置以下选项,附件为截图供参考. -->vt,cpu虚拟化,默认关闭,需要确保开启 -->ht,cpu超线程,默认开启,需要确保开启 ...

  7. JZOJ8月10日提高组反思

    JZOJ8月10日提高组反思 T1 没想到怎么打 就去打暴力了 本来想拿个30不错了 结果\(AC\)了 话说回来,数据也挺小的 T2 不AC便爆0 就一个数据点 给不给打暴力的人活了 正解是状压DP ...

  8. flask基本使用

    一.flask安装以及启动 1.安装 pip install flask 2.开启第一个flask项目 新建文件HelloWord.py from flask import Flask app = F ...

  9. 大数据开发-Hive-常用日期函数&&日期连续题sql套路

    前面是常用日期函数总结,后面是一道连续日期的sql题目及其解法套路. 1.当前日期和时间 select current_timestamp -- 2020-12-05 19:16:29.284 2.获 ...

  10. 老猿学5G扫盲贴:中国移动网络侧CHF的功能分解说明

    ☞ ░ 老猿Python博文目录░ 一.引言 在<老猿学5G扫盲贴:中国移动网络侧CHF主要功能及计费处理的主要过程>介绍了中国移动CHF的总体功能,同时说明了CHF网元主要由AGF.CD ...