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. markdown写作软件推荐

    最近发现了一款不错的编辑器,而且是全平台支持的.与其它一些 markdown 编辑器最大的不一样是——所见即所得,不再是一边源文件一遍预览的方式了. 总的说来 Typora 很赞,推荐一波. 点此前往 ...

  2. C++利用函数模板得到数组的长度

    #include<iostream> template <typename T, int N> int ArraySize (T (&arr)[N]) { //此处是数 ...

  3. Django中ORM之操作表记录

    添加表记录 添加普通字段 #方法一 book_obj = Book(title='book7',publishDate='2011-05-02',price=200,publish_id=1) boo ...

  4. JS对以对象组成的数组去重

    这是从https://segmentfault.com/q/1010000006954351参考的,达到了我要去重的功能!!! var hash = {};//arr是要去重的对象数组 arr = a ...

  5. composer install或者update 出错

    composer install或者update  出错Your requirements could not be resolved to an installable set of package ...

  6. POJ 2187 Beauty Contest( 凸包求最远点对 )

    链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...

  7. 【HNOI】合唱队

    [HNOI]合唱队 题意 对于一个初始序列,保证两两不同,通过一些变换得到目标序列: 第一个值直接插入空的当前队列 对于从第二个值开始的每个值 如果原序列中 $ a[i] $,若 $ a[i]> ...

  8. MyEclipse报错Access restriction: The type BASE64Encoder is not accessible due to restriction on required library

    错误截图: 解决办法: 1.进入Project --> Properties --> Java Build Path --> Libraries 2.remove 掉 JRE Sys ...

  9. HDU3001 Traveling (状压dp+三进制+Tsp问题总结)

    (1)这道题最多可以走两次,所以有0, 1, 2三种状态,所以我们要用三进制 如果要用三进制,就要自己初始化两个数组, 一个是3的n次方,一个是三进制数的第几位的数字是什么 void init() { ...

  10. tortoiseGit怎么记住密码

    tortoiseGit每次pull和push的时候都要输入git密码很是麻烦,下面是tortoiseGit记住密码的步骤 首先在你的项目界面右键 选择setting,这个步骤知识看一下你的名称和ema ...