1.  Spring Cloud Netflix

Spring Cloud Netflix 是Spring Cloud 的核心子项目,是对Netflix公司一系列开源产品的封装。它为Spring Boot应用提供了自动配置的整合,只需要通过一些简单的注解,就可以快速的在Spring Cloud应用中使用。

  它主要提供以下模块:

  服务发现和注册(Eureka)

  客户端负载均衡(Ribbon)

  断路由(Hystrix)

  只能路由(Zuul)

2. 服务注册和发现(Eureka)

  调用关系图:

  

  服务注册和发现的具体实现:

  新建一个服务端(注册中心)工程,引入依赖。

  pom文件:

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在工程启动类上加上@EnableEurekaServer注解,配置application.properties文件

# server (eureka 默认端口为:8761)
server.port=8761 # spring
spring.application.name=spring-cloud-server # eureka
# 是否注册到eureka
eureka.client.register-with-eureka=false
# 是否从eureka获取注册信息
eureka.client.fetch-registry=false
# eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

  访问http://localhost:8761/如下

  注册到本注册中心的服务可能由于刚启动,需要校验一下服务,所以会出现保护模式。

  接下来注册一个服务提供者,其实它是一个Eureka客户端,实现方式如下:

  先新建一个服务,引入如下pom文件

 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

  在该服务的启动类中添加注解@EnableEurekaClient,配置端口及服务名称信息等

server.port=8762
spring.application.name=spring-cloud-provider # 要注册到的注册中心地址
eureka.client.serviceUrl.defaultZoon=http://localhost:8761/eureka/

  启动该工程,访问http://localhost:8761/,会发现在Instances currently registered with Eureka中存在该服务的信息,表示该服务提供者已经被注册成功了。

  再创建一个工程,同样引入客户端以来和添加@EnableEurekaClient,修改配置文件的服务名称和端口,注册中心地址与提供者保持一致,如下:

server.port=8888

spring.application.name=spring-cloud-consumer
# 要注册到的注册中心地址
eureka.client.server-url.defaultZoon=http://localhost:8761/eureka/

  启动该工程,访问http://localhost:8761/,会发现在Instances currently registered with Eureka中存在该服务的信息,表示该服务消费者已经被注册成功了。

  注意:由于spring-cloud-starter-netflix-eureka-client没有依赖tomcat,所以在创建客户端的时候,需要加入以下依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

  否则会报无法创建bean的错误。

3.  Eureka和zookeeper的对比

  3.1 分布式系统的CAP理论

  一致性(C):所有节点上的数据时刻保持同步。

  可用性(A):每个请求都能接收到一个响应,无论响应失败还是成功。

  分区容错性(P): 系统应该能持续提供服务,即使系统内部有消息丢失。

  由于分区容错性在分布式系统中必须要保证,所以我们只能在A和C之间进行权衡,Zookeeper保证的是CP,而Eureka保证的是AP

  3.2 Zookeeper保证CP

  Zookeeper是个cp的,即任何时刻对Zookeeper的请求访问都能得到一致的数据结果,同时系统对网络分割具有容错性,但是它不能保证每次服务请求都可用,也就是说zookeeper可能会在极端情况下丢弃一些请求。

  3.3 Eureka保证AP

  Eureka在设计时就优先保证了可用性,我们可以容忍注册中心返回的是几分钟以前的注册信息,但是不能够接受服务直接down掉 不可用,也就是说,服务注册功能对可用性的要求高于一致性。

  如果Eureka服务节点在短时间内失去了大量的心跳连接,那么这个节点将进入”自我保护模式“,同时保留那些”心跳死亡”的服务注册信息不过期,此时,这个Eureka节点对于新的服务还能提供注册服务,对于死亡的仍然保留,以防还有客户端向其发送请求,当故障恢复后,这个节点会推出自我保护模式,Eureka的哲学是,同时保存好数据和坏数据,总比丢失数据要更好。

至于运用中使用什么为注册中心更具业务和需求来定,没有最好的架构,只有最合适的架构。

  

SpringCloud学习笔记(2)----Spring Cloud Netflix之Eureka的使用的更多相关文章

  1. springCloud学习-消息总线(Spring Cloud Bus)

    1.简介 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现 ...

  2. SpringCloud学习笔记:服务注册与发现Eureka(2)

    1. Eureka简介 Eureka是一个用于服务注册和发现的组件,分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中心,Eureka Cl ...

  3. Spring Cloud Netflix之Eureka服务消费者

    Eureka服务消费者介绍 Eureka服务消费者用于发现服务和消费服务,发现服务通过Eureka Client完成,消费服务通过Ribbon完成,以实现负载均衡.在实际项目中,一个服务往往同时是服务 ...

  4. Spring Cloud Netflix之Eureka Clients服务提供者

    之前一章我们介绍了如何搭建Eureka Server,这一章,我们介绍如何搭建服务提供者. Eureka Clients介绍 服务的提供者,通过发送REST请求,将自己注册到注册中心(在高可用注册中心 ...

  5. SpringCloud学习笔记(4)----Spring Cloud Netflix之Eureka的配置

    1. Eureka监控配置 Eureka的客户端需要加入依赖 <dependency> <groupId>org.springframework.boot</groupI ...

  6. SpringCloud学习笔记(5)----Spring Cloud Netflix之Eureka的服务认证和集群

    1. Eureka服务认证 1. 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> < ...

  7. Spring Cloud Netflix之Eureka 相关概念

    为什么不应该使用ZooKeeper做服务发现 英文链接:Eureka! Why You Shouldn’t Use ZooKeeper for Service Discovery:http://www ...

  8. springcloud(一):大话Spring Cloud

    研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...

  9. (转)springcloud(一):大话Spring Cloud

    http://www.ityouknow.com/springcloud/2017/05/01/simple-springcloud.html 研究了一段时间Spring Boot了准备向Spring ...

随机推荐

  1. PHP关于注册注意的问题

    1.注意转义字符的问题 get_magic_quotes_gpc()开启时,所有的 ' (单引号), " (双引号), \(反斜线) and 空字符(null)会自动转为含有反斜线的溢出字符 ...

  2. 【AnjularJS系列5 】— scopes、module、controller

    第五篇, scopes.module.controller 这一篇,感觉,在前面几篇就使用过的属性,但,总觉得没有理解透彻,有待完善!~ 1.scopes A.定义:$scope是一个把view(一个 ...

  3. ZBrush软件如何编辑物体

    新手在刚接触ZBrush®的时候,想要选中模型进行编辑,有时怎么都选不中,当再次画的时候只能在边上新建一个,还是不能进行编辑,遇到类似问题,你是如何解决的,本文将为您讲解ZBrush中怎么选中物体并进 ...

  4. table标签 在谷歌和ie浏览器下不同的表现效果

    在项目中有了一个这样的需求: 我需要利用vue的模板语法v-for循环生成tr,这个tr是需要双重循环来确定其个数的, 我的实现: 我在tr外面包了一个template标签, 效果: 谷歌浏览器下实现 ...

  5. hive(I)--学习总结之常用技能

    hive是Apache的一个顶级项目,由facebook团队开发,基于java开发面向分析师或BI等人员的数据工具(常用作数据仓库),它将hdfs文件组织成表,使用hive-sql调用mapreduc ...

  6. redis 篇 - list

    list 类似于 Python list lpush key value 向列表append value lrange key start stop 获取下标从 start 到 stop 的value ...

  7. 01 C#基础

    第一天 .net平台(中国移动互联网平台): .net框架(信号塔): CLR(公共语言运行时) .Net类 库 我们使用的语言是——C# 2.解决方案项目与类的关系: 解决方案:公司 项目:部门 类 ...

  8. bootstrap fileinput控件 + django后台上传、回显简单使用

    一.控件下载:https://github.com/kartik-v/bootstrap-fileinput/ 官网:http://plugins.krajee.com/file-input 需要引入 ...

  9. [NOIP2012提高组]开车旅行

    题目:洛谷P1081.Vijos P1780.codevs1199. 题目大意:有n座海拔高度不相同的城市(编号1~n),两城市的距离就是两城市海拔之差.规定每次只能从编号小的城市走到编号大的城市. ...

  10. OO第一单元总结__多项式求导问题

    作业一.含幂函数的简单多项式的求导 (1)基于度量的程序结构分析 1. 统计信息图: 2. 结构信息图: 3. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设 ...