目录

1 Spring Cloud 简介

1 Netflix 简介

2 Spring Cloud 框架结构

3 Spring Cloud 和 Dubbo 的对比

4 Spring Cloud 版本号说明

5 Spring Cloud Netflix Eureka

一、 Eureka 简介

1 Eureka 组件

1.1 Eureka Server

1.2 Eureka Client

1.2.1 Application Service

1.2.2 Application Client

2 Eureka 和 Zookeeper 对比

1 什么是 CAP 定理

2 基于 CAP 定理比对 Eureka 和 Zookeeper

二 搭建 Eureka 注册中心

1 POM 文件

2 配置文件 application.yml

​ 3 启动类

4 访问 Eureka Server WEB 服务管理平台

三 Eureka 服务管理平台介绍

1 Eureka Server 服务管理平台访问预览

四 搭建高可用集群

1 在 Eureka 应用中定义多环境配置

五 集群原理

1 Eureka 集群架构原理图

六 Eureka 优雅停服

1 自我保护模式

2 为什么要自我保护

3 关闭自我保护


Spring Cloud 简介

Spring Cloud 是 Spring 旗下的一个顶级项目。
Spring Cloud 是一个服务治理平台,提供了一些服务框架。包含了:服务注册与发现、
配置中心、消息中心 、负载均衡、数据监控等等。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化
了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路
器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。Spring Cloud 并
没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架
组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开
发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud 是一个微服务框架,相比 RPC/SOA 框架而言,Spring Cloud 提供的全套
的分布式系统解决方案。
Spring Cloud 对 Netflix 的多个微服务基础框架开源组件进行了封装,同时又实现了和
云端平台以及和 Spring Boot 开发框架的集成。
Spring Cloud 为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,
微代理,控制总线,一次性 token,全局一致性锁,leader 选举,分布式 session,集群状
态管理等操作提供了一种简单的开发方式。
Spring Cloud 为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服
务或构建应用、同时能够快速和云平台资源进行对接。

1 Netflix 简介

Netflix(Nasdaq NFLX) 成立于 1997 年,是一家在线影片租赁提供商,主要提供 Netflix
超大数量的 DVD 并免费递送,总部位于美国加利福尼亚州洛斯盖图。
Netflix 经过几年的开源实践,推出最新开源改革计划,打造了全新的 Netflix 开源门
户,并且会继续开源更多好项目,增加 Netflix 项目开源透明度。
互联网流媒体播放商 Netflix 在几年前就开始创建自己的开源门户 Netflix Open
Source (别名 NetflixOSS,http://netflix.github.io/) 了,他们并不知道这会如何发展;也不
知道开源贡献者是否会使用,改进或者是忽略;更没想到的是就这样拥有了公司的社区,
开发者会给予反馈,一些中间供应商会把这些开源软件集成到他们的解决方案中。
到了今天,Netflix 拥有上百个开源软件,从基础设施平台到大数据工具,再到自动
化部署软件。随着时间的发展,OSS 网站也由于越来越多的组件而变得越来越复杂。现
在,Netflix 还会继续开源更多的软件。
Netflix 发布在 Github 中的项目库地址:https://github.com/netflix

Spring Cloud 框架结构

3 Spring Cloud Dubbo 的对比

Spring Cloud 和 Dubbo 都是微服务开发框架。不是新的技术就一定是好的技术。Dubbo
优势在于开发简单,效率高。Spring Cloud 优势在于功能全面且可靠性高。

对比内容

Dubbo

Spring Cloud

出身

阿里系

核心框架是服务化治理

Spring 社区

核心框架是 Netflix 开源微服务架构群体

文档

集中,健全,中文

较多,内容大部分是英本版

性能

Dubbo 的性能大约是 Spring Cloud 的 2~3 倍

功能

服务注册中

zookeeper

Spring Cloud Netflix Eureka

服务调用方

RPC

REST API

服务网关

Spring Cloud Netflix Zuul

断路由

集群容错

Spring Cloud Netflix Hystrix

分布式配置

Spring Cloud Config

服务跟踪

无, monitor

Spring Cloud Sleuth

消息总线

Spring Cloud Bus

数据流

Spring Cloud Stream

批量任务

Spring Cloud Task

4 Spring Cloud 版本号说明

Spring Cloud 是一个包含若干子框架的框架集合体,是一个完整的微服务框架体系,
如果使用场景版本号来进行标记,容易混淆主框架版本和子框架版本标记。所以 Spring
Cloud 使用一种全新的版本号来对主框架进行版本标记,而子框架的版本标记大多还是使
用常用版本号标记的。
Spring Cloud 版本格式如: 版本号命名.stage
版本号命名:Spring Cloud 主框架版本号是使用英国伦敦地铁站名称来进行标记的,
并根据地铁站名称的首字母的英文自然升序排列来识别版本的递增。如:Angle、Brixton、
Camden、Dalston、Edgware、Finchley 等。后续版本提升会继续根据首字母升序排列。
stage:阶段版本号。常用的阶段版本包括:BUILD-XXX[SNAPSHOT]、GA、PRE(M1、M2 等)、RC、SR。
BUILD-XXX[SNAPSHOT] - 开发版本、一般是开发团队内部使用。
GA - 稳定版,内部开发到一定阶段了,各个模块集成后,经过全面测试发现没有问
题,可对外发行了。这个时候叫 GA(General Availability)。基本上可以使用了。没有严重
的 BUG 问题,但是有未测出的 BUG 隐患。不推荐商业使用。
PRE - 里程碑版,由于 GA 还不属于公开发行版,里面还有些功能不完善或者 bug,
于是就有了 milestone(里程碑版)。milestone 版主要修复了一些 bug。一个 GA 后,一般
会有多个里程本版。例如 M1 M2 M3......。不推荐商业使用。
RC - 候选发布版,从 BUILD 后到 GA 在到 M 基本上系统就算定型了,这个时候系
统就进入 Release Candidate(候选发布版)。该阶段的软件类似于最终发行前的一个观察
期,该期间只对一些发现的等级高的 bug 进行修复。发布 RC1 RC2 等版本。可以考虑 RC
版本。
SR - 正式发布版,公开正式发布。正式发布版一般也有多个发布,例如
SR1 SR2 SR3
等等,一般是用来修复大 bug 或者优化。最好使用 SR 版本。
学习过程使用的版本是:Greenwich.SR4。当前版本中内部使用的
SpringBoot 是
2.2.x.RELEASE 版本。

Spring Cloud Netflix Eureka

一、 Eureka 简介

Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定
位运行在 AWS 域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务发现
功能。

1 Eureka 组件

Eureka 包含两个组件:Eureka Server 和 Eureka Client。

1.1 Eureka Server

Eureka Server 提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,
这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Server 本身也是一个服务,默认情况下会自动注册到 Eureka 注册中心。
如果搭建单机版的 Eureka Server 注册中心,则需要配置取消 Eureka Server 的自动注
册逻辑。毕竟当前服务注册到当前服务代表的注册中心中是一个说不通的逻辑。
Eureka Server 通过 Register、Get、Renew 等接口提供服务的注册、发现和心跳检测等
服务。

1.2 Eureka Client

Eureka Client 是一个 java 客户端,用于简化与 Eureka Server 的交互,客户端同时也具
备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向
Eureka Server 发送心跳,默认周期为 30 秒,如果 Eureka Server 在多个心跳周期内没有接收
到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除(默认 90 秒)。
Eureka Client 分 为 两 个 角 色 , 分 别 是 : Application Service(Service Provider) 和
Application Client(Service Consumer)

1.2.1 Application Service

服务提供方,是注册到 Eureka Server 中的服务。

1.2.2 Application Client

服务消费方,通过 Eureka Server 发现服务,并消费。
注意:在这里,Application Service Application Client 不是绝对上的定义,因为
Provider 在提供服务的同时,也可以消费其他 Provider 提供的服务;Consumer 在消费服
务的同时,也可以提供对外服务。

2 Eureka Zookeeper 对比

1 什么是 CAP 定理

CAP 原则又称 CAP 定理,指的是在一个分布式系统中,Consistency(数据一致性)、
Availability(服务可用性)、Partition tolerance(分区容错性),三者不可兼得。
CAP 由 Eric Brewer 在 2000 年 PODC 会议上提出。该猜想在提出两年后被证明成立,
成为我们熟知的 CAP 定理

分布式系统 CAP 定理

C

数据一致性

(Consistency)

/kənˈsɪstənsi/

也叫做数据原子性

系统在执行某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读到最新的值, 这样的系统被认为是具有强一致性的。等同于所有节点访问同一份最新的数据副本。

优点: 数据一致,没有数据错误可能。

缺点: 相对效率降低。

A

服务可用性

(Availablity)

/əveɪləbɪləti/

每一个操作总是能够在一定的时间内返回结果,这里需

要注意的是"一定时间内"和"返回结果"。一定时间内指的是, 在可以容忍的范围内返回结果,结果可以是成功或者是失败。

P

分区容错性

(Partition-torlerance)

/pɑːrˈtɪʃn/

/ˈtɑːlərəns/

在网络分区的情况下,被分隔的节点仍能正常对外提供

服务(分布式集群,数据被分布存储在不同的服务器上,无论什么情况,服务器都能正常被访问)

定律:任何分布式系统只可同时满足二点,没法三兼顾

CA,放弃 P

如果想避免分区容错性问题的发生,一种做法是将所有的数据(与事务相关的)/服务都放在一台机器上。虽然无法100%保证系统不会出错,但不会碰到由分区带来的负面效

果。当然这个选择会严重的影响系统的扩展性。

CP,放弃 A

相对于放弃"分区容错性"来说,其反面就是放弃可用性。一旦遇到分区容错故障,那么受到影响的服务需要等待一定

时间,因此在等待时间内系统无法对外提供服务。

AP,放弃 C

这里所说的放弃一致性,并不是完全放弃数据一致性, 而是放弃数据的强一致性,而保留数据的最终一致性。以网络购物为例,对只剩下一件库存的商品,如果同时接受了两

个订单,那么较晚的订单将被告知商品告罄。

2 基于 CAP 定理比对 Eureka Zookeeper

对比项

Zookeeper

Eureka

描述

CAP

CP

AP

ZooKeeper 分布集群是使用主从模型实现的。在一个时间点上, 只有一个 leader 真正的对外提供服务。其他的follower 都会实时备份leader 中 的 数 据 , 当leader 宕机,则 follower 选举出新的 leader 对外提供服务。

Eureka 分布集群是平等模型(无主模型) 所有的节点都是平等的,客户端访问任意节点都可以提供实时的服务响应。如果某节点发送宕机等故障,接收到的请求会转交给其他的节点。无主模型,每个

节点的数据可能不实时

一致,节点需要通过网络通讯从其他节点获取数据,并实现数据的一致。可能有网络延迟或网络故障或通讯频率问

题。

Dubbo 集成

已支持

-

Dubbo 开发的时候不需要考虑注册中心选择。

Spring Cloud 中推荐使用Eureka 作为注册中心,Eureka 是由Spring Cloud 子 项 目spring-cloud-netflix 集成的。是 Spring Cloud 中的一个组件,会有针对性的服务提供和发现组

件。

Spring Cloud 集成

已支持

已支持

kv 服务

支持

-

ZK 支持数据存储

eureka 不支持

使用接口

(多语言能力)

提供客户端

http 多语言

ZK 的跨语言支持

比较弱

watch 支持

支持

支持

什 么 是 Watch 支持?就是客户端监听服务端的变化情况。

zk 通过订阅监听来

实现

eureka 通过轮询的方式来实现

集群监控

_

metrics

metrics,运维者可以收集并报警这些度量

信息达到监控目的

二 搭建 Eureka 注册中心

Eureka Server 既是一个注册中心,同时也是一个服务。那么搭建 Eureka Server 的方式
和以往搭建 Dubbo 注册中心 ZooKeeper 的方式必然不同,那么首先搭建一个单机版的
Eureka Server 注册中心。

1 POM 文件

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<groupId>com.bjsxt</groupId>
<artifactId>cloudeureka</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>

2 配置文件 application.yml

Eureka Server 本身也是一个服务,同时又是一个注册中心。在 Spring Cloud 中,启动
的微服务会自动的搜索注册中心并注册服务,那么在单机版 Eureka Server 环境中,当前服
务注册到当前服务中,明显是不合适的。所以搭建 Eureka Server 单机版时,需要提供特殊
的全局配置,避免回路注册逻辑。
同理,Eureka Server 服务在注册中心中发现服务列表逻辑也是不必要的。毕竟注册中
心是一个中立的服务管理平台,如果是单机版 Eureka Server 环境中,Eureka Server 服务再
去发现服务列表,明显也是不必要的。也需要通过全局配置,避免回路发现逻辑。
 

 3 启动类

4 访问 Eureka Server WEB 服务管理平台

访问服务管理平台地址为: http://ip:port/

三 Eureka 服务管理平台介绍

1 Eureka Server 服务管理平台访问预览

2 System Status
系统状态展示
3 DS Replicas
注册中心集群列表
4 Instances currently registered with Eureka
已在注册中心中注册的服务列表
5 General Info
当前注册中心相关信息展示
6 Instance Info
当前注册中心实例信息展示

四 搭建高可用集群

1 Eureka 应用中定义多环境配置

1.1 application-eureka1.yml

1.2 application-eureka2.yml

五 集群原理

Eureka Server 注册中心的集群和 Dubbo 的 ZooKeeper 注册中心集群在结构上有很大的
不同。
Eureka Server 注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供
服务的发现和注册等功能。同时集群中每个 Eureka Server 节点又是一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所
以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服务。

1 Eureka 集群架构原理图

六 Eureka 优雅停服

1 自我保护模式

般情况下,微服务在 Eureka 上注册后,会每 30 秒发送心跳包,Eureka 通过心跳
来判断服务时候健康,同时会定期删除超过 90 秒没有发送心跳服务。
有两种情况会导致 Eureka Server 收不到微服务的心跳:一是微服务自身的原因;二
是微服务与 Eureka 之间的网络故障。
通常微服务自身的故障关闭只会导致个别服务出现故障,一般不会出现大面积故障,
而网络故障通常会导致 Eureka Server 在短时间内无法收到大批心跳。考虑到这个区别,
Eureka 设置了一个阀值,当判断离线服务的数量超过阀值时,Eureka Server 认为很大程
度上出现了网络故障,将不再删除心跳过期的服务。
那么这个阀值是多少呢?15 分钟之内是否低于 85%;Eureka Server 在运行期间,会
统计心跳失败的比例在 15 分钟内是否低于 85%,这种算法叫做 Eureka Server 的自我保护
模式

2 为什么要自我保护

因为同时保留"好数据"与"坏数据"总比丢掉任何数据要更好,当网络故障恢复后,这
个 Eureka 节点会退出"自我保护模式"。Eureka 还有客户端缓存功能(也就是微服务的缓
存功能)。即便 Eureka 集群中所有节点都宕机失效,微服务的 Provider 和 Consumer 都
能依托服务缓存正常通信。微服务的负载均衡策略会自动剔除离线的微服务节点。

3 关闭自我保护

Spring Cloud Netflix Eureka相关推荐

  1. Spring Cloud Netflix Eureka 配置参数说明

    为什么80%的码农都做不了架构师?>>>    Eureka Client 配置项(eureka.client.*) org.springframework.cloud.netfli ...

  2. Spring Cloud Netflix Eureka client源码分析

    1.client端 EurekaClient提供三个功能: EurekaClient API contracts are: * - provide the ability to get Instanc ...

  3. 【系统架构理论】一篇文章精通:Spring Cloud Netflix Eureka

    是官方文档的总结 http://spring.io/projects/spring-cloud-netflix#overview 讲解基于2.0.2版本官方文档 https://cloud.sprin ...

  4. Spring Cloud -> Spring Cloud Netflix Eureka快速搭建(一)

    前言:不忘初心,寻找最初的编程快感! 1.简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转 ...

  5. Spring Cloud Netflix尤里卡

    本教程是关于Spring云Netflix Eureka的. 在这里,我们将创建eureka发现服务器和微服务,这些服务本身将注册到发现服务器和使用netflix客户端API的客户端中,以使用示例示例来 ...

  6. Spring Cloud Netflix五大组件简介

    微服务与微服务架构 微服务的优缺点 优点 缺点 Dubbo与Spring Cloud Spring Cloud Netflix Eureka Eureka的自我保护机制 Eureka和ZooKeepe ...

  7. 《Spring Cloud Netflix官方文档》2. 服务发现:Eureka服务器

    2. 服务发现:Eureka服务器 2.1 如何创建Eureka服务器 引用org.springframework.cloud的spring-cloud-starter-eureka-server就可 ...

  8. 《Spring Cloud Netflix官方文档》1.服务发现:Eureka客户端

    1.     服务发现:Eureka客户端 服务发现是微服务架构的关键原则之一.使用手动配置或一些约定方式来处理多服务多实例的方式是非常困难,并且十分脆弱的.Eureka同时是Netflix服务发现的 ...

  9. Spring Cloud Netflix之Eureka上篇

    前言:Spring Cloud NetFlix这个项目对NetFlix中一些久经考验靠谱的服务发现,熔断,网关,智能路由,以及负载均衡等做了封装,并通过注解的或简单配置的方式提供给Spring Clo ...

  10. Spring Cloud Netflix项目进入维护模式之我见

    这两天看到一则新闻:https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now#spring-cloud-ne ...

最新文章

  1. 动态数组怎么定义_Excel VBA 数组基础知识,初学者不可不学的关键知识
  2. Day 07 艺术家是靠天赋还是努力
  3. wxWidgets:显示 wxTreeListCtrl 的示例
  4. python排序之sort和sorted
  5. java动态代理技术
  6. [转载]C#多线程学习(一) 多线程的相关概念
  7. 字体的成本:按字算,微软是100美元
  8. 新车「智能化+安全」进入纵深区,艾拉比OTA成高频词
  9. linux之sort,unip,cut
  10. tools-centos-基本配置
  11. ServiceAccounts 及 Secrets 重大变化
  12. Python非线性拟合自定义函数参数(对标MATLAB-nlinfit函数)
  13. 1月书单 2月新书预告 | 百万册畅销书全新续作来啦
  14. Monaco-Editor 多人协作 编辑器
  15. javascript实现数字补全不足补零
  16. Android中的进程间通信(IPC机制)
  17. Java 求100以内的质数
  18. 【学习笔记】AD智能PDF导出(装配文件)
  19. 高德地图点击获取经纬度并标记
  20. 深度剖析E680G开发二.交叉编译BusyBox与图形化程序

热门文章

  1. Windows下安装 Apache 步骤
  2. 2020秋 英文科技论文写作与学术报告-期末
  3. 宝塔备份文件到ftp服务器上,宝塔自动备份网站到FTP空间,宝塔备份ftp空间
  4. App动态修改图标包名
  5. 让DeepLearning4j阅读小说并给出关联度最高的词
  6. vscode 设置关键字高亮显示
  7. 创业板首批企业或节前招股 新公布6家上会公司
  8. html跳转按钮谷歌浏览器点击没反应,在各个浏览器点击按钮都没有反应
  9. matlab求解常微分方程组——dsolve与ode45
  10. vue项目中如何解决跨域问题