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. ZBrush软件特性之Marker标记调控板

    在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...

  2. mysql对事务的支持

    起因:因为只是需要编写一个接口,无需使用框架,但是又要求对数据库的操作支持事务,所以直接使用mysql自带的事务进行处理 mysql自带对事务的支持,但是他默认是关闭的,需要我们手动打开,打开mysq ...

  3. 关于npm警告fsevents和vue-cli项目中的一些问题,持续更新

    1.install一个npm包的时候,总是会报这个警告: 网上查资料知道,这个fsevents是mac下用的,windows忽略即可: 2.关于在main.js中引入less文件的问题, 就会报这个错 ...

  4. 开发微信小程序必须要知道的事

    为什么是小程序? 为什么我们会开发小程序呢?或许是因为工作需要,或许是源于自己的追求(来自名利的欲望),但我要说--这是一种缘分,很美好的缘分,很多年后还值得庆幸的缘分 小程序目前可以分为三个阶段 一 ...

  5. python_for循环

    #for循环'''for i in range(0,10,2):age_oldboy = 56for i in range(3): guess_age = int(input("guess ...

  6. synchronized的实现原理及锁优化

    记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized.对于当时的我们来说,synchronized是如此的神奇且强大.我们赋予它一个名字“同步”,也成为我们解决多线程情况的良药 ...

  7. linux内核(四)内存管理单元MMU

    1,基本概念 一个程序运行时没必要全部都同时装入内存,只需要把当前需要运行的部分装入内存即可,这样就使得一个大程序可以在较小的内存中运行,也使得内存中可以同时装入更多的程序并发执行,从用户角度看,该系 ...

  8. 第十一章 Servlet MVC模式

    内包含案例,基于jsp+servlet的:MVC模式计算器:MVC模式登陆 第十一章 Servlet MVC模式 模型-视图-控制器(model-view-controller),简称MVC.MVC是 ...

  9. Microsoft Updateclient更新

     大家好, 微软Microsoft Update产品组官方博客于昨天宣布了有关最新的Windows Updateclient更新的消息.依据这则博客.微软从当日開始逐渐向全部Windows 7, ...

  10. HDU 2475 Box 树型转线型 + 伸展树

    树型转线型.第一次听说这个概念. . . , 可是曾经已经接触过了,如LCA的预处理部分和树链剖分等.可是没想到还能这么用,三者虽说有不同可是大体思想还是非常相近的,学习了. 推荐博客http://b ...