Spring Cloud 学习笔记(二)——Netflix
4 Spring Cloud Netflix
Spring Cloud 通过自动配置和绑定到Spring环境和其他Spring编程模型惯例,为Spring Boot应用程序提供Netflix OSS集成。 通过几个简单的注释,可以快速启用和配置应用程序中的常见功能模块,并使用久经考验的Netflix组件构建大型分布式系统。 提供的功能模块包括服务发现(Eureka),断路器(Hystrix),智能路由(Zuul)和客户端负载均衡(Ribbon)。
4.1 服务发现:Eureka客户端
服务发现是microservice基础架构的关键原则之一。Eureka是Netflix服务发现的一种服务和客户端。
4.1.1 注册到Eureka
当一个客户端注册到Eureka,它提供关于自己的元数据(诸如主机和端口,健康指标URL,首页等)Eureka通过一个服务从各个实例接收心跳信息。如果心跳接收失败超过配置的时间,实例将会正常从注册里面移除。
可以使用@EnableEurekaClient或@EnableDiscoveryClient注解。
配置eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/属性,注意修改URL地址。
确保spring.application.name有默认值。
注:@EnableEurekaClient只能用于Eureka,@EnableDiscoveryClient能用于zookeeper等其他注册组件。
@EnableEurekaClient使其成为Eureka实例(被其他服务发现)和客户端(能发现其他服务)注册到应用里面。可通过eureka.instance.*进行相关配置的修改。
4.1.2 对Eureka服务的身份验证
如果其中一个eureka.client.serviceUrl.defaultZone的url已经把凭证嵌入到它里面,那么HTTP基本的身份验证将会被自动添加到你的eureka客户端(curl风格,如http://user:password@localhost:8761/eureka)。 对于更复杂的需求,可以创建一个带“@Bean”注解的“DiscoveryClientOptionalArgs”类型并且为它注入“ClientFilter”实例。
4.1.3 健康指标和状态页面
健康指标和状态页面分别对应一个Eureka实例的“/health”和“/info”。
4.1.4 注册一个安全应用
若要用HTTPS,需要设置两个标记,分别是EurekaInstanceConfig,即eureka.instance.[nonSecurePortEnabled,securePortEnabled]=[false,true]。
4.1.5 Eureka 健康检查
默认情况下,Eureka使用客户端心跳来确定一个客户端是否活着(状态为“UP”)。
4.1.6 Eureka给客户端和实例的元数据
有标准的元数据,如主机名、IP地址、端口号、状态页面和健康检查。额外的元数据可以被添加到实例注册在eureka.instance.metadataMap里面。
在 Cloudfoundry 使用 Eureka
Cloudfoundry有总的路由,所有在同个应用的实例有相同的主机名。
在AWS上使用Eureka
定制EurekaInstanceConfigBean
修改Eureka实例ID
通过eureka.instance.instanceId进行配置。
4.1.7 使用EurekaClient
使用@EnableDiscoveryClient(或@EnableEurekaClient),使它从Eureka Server发现服务实例。
注:不要在@PostConstruct方法或@Scheduled方法使用EurekaClient(或任何ApplicationContext还没被启动的地方)。
4.1.8 代替原生的Netflix EurekaClient
Spring Cloud已经支持Feign(一个REST客户端构建)跟Spring RestTemplate(使用逻辑Eureka服务标识符(VIPs)代替物理的URL)。
4.1.9 为什么注册一个服务这么慢?
实例默认与注册中心持续30秒的周期心跳(通过客户的serviceUrl)。当实例、服务端和客户端全都在它们的缓存里面拥有相同的元数据(这可能还需要3次心跳),那么服务对于客户端的discovery将变为不可用。可通过eureka.instance.leaseRenewalIntervalInSeconds这个修改配置,可以加快这一进程的客户端连接到其他服务。
4.2 服务发现: Eureka Server
例子,添加依赖spring-cloud-starter-eureka-server
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
服务端有一个带UI的首页,HTTP API端点在/eureka/*下提供标准的Eureka功能。
4.2.1 高可用
Eureka服务端没有后台存储,但是服务实例在注册里面全都得发送心跳去保持注册更新(在内存里操作)客户端们也有一份内存缓存着eureka的注册信息。
4.2.2 标准模式
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
4.2.3 节点感知
运行多个Eureka Servers。
Eureka甚至可以更有弹性和可用的运行多个实例,并让他们互相注册。事实上,这也是默认的行为,因此所有你需要让它工作的,只要添加一个有效的节点serviceUrl,例如:
---
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2/eureka/
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1/eureka/
然后通过不同的“profile”进行运行不同的Eureka Server。
4.2.4 IP偏好
设置eureka.instance.preferIpAddress=true使应用注册到eureka的是IP地址而不是主机名。
4.3 断路器:Hystrix
Netflix创建了一个库实现断路器模式,名为Hystrix。一个低水平的服务群中一个服务挂掉会给用户导致级联失效的。当调用一个特定的服务达到一定阈值(在Hystrix里默认是5秒内20个失败),断路器开启并且调用没有成功的。开发人员能够提供错误原因和开启一个断路由回调。
例子,需添加依赖org.springframework.cloud.spring-cloud-starter-hystrix
@SpringBootApplication
@EnableCircuitBreaker
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
@Component
public class StoreIntegration {
@HystrixCommand(fallbackMethod = "defaultStores")
public Object getStores(Map<String, Object> parameters) {
//do stuff that might fail
}
public Object defaultStores(Map<String, Object> parameters) {
return /* something useful */;
}
}
经测试,失败就直接调用defaultStores()方法了。
4.3.1 传播安全上下文或使用 Spring Scopes
如果你想一些线程的本地的上下文传播到一个@HystrixCommand,默认声明将不会工作,因为他在线程池里执行命令。(在超时的情况下)。你可以切换Hystrix去使用同个线程让调用者使用一些配置,或直接在注解中,让它去使用不同的“隔离策略”。举例:
@HystrixCommand(fallbackMethod = "stubMyService",
commandProperties = {
@HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE")
}
)
...
如果你使用@SessionScope或@RequestScope同样适用。你会知道你要这么做,因为一个runtime异常说他不能找到作用域上下文。
4.3.2 健康指标
连接的断路器的状态也暴露在应用程序的/health端点中。
4.3.3 Hystrix 指标流
添加依赖org.springframework.boot.spring-boot-starter-actuator,使/hystrix.stream流作为一个管理端点。
4.4 断路器: Hystrix仪表盘
Hystrix的主要作用是会采集每一个HystrixCommand的信息指标,把每一个断路器的信息指标显示的Hystrix仪表盘上。

环境需要
- 添加依赖
org.springframework.cloud.spring-cloud-starter-hystrix-dashboard - 主类上注解
@EnableHystrixDashboard - 访问
/hystrix - 填写链接
http://host:port/hystrix.stream
4.4.1 Turbine
略
4.4.2 Turbine Stream
略
4.5 客户端负载均衡器:Ribbon
Ribbon是一个客户端负载均衡器,有很多控制HTTP和TCP客户端的行为,可使用@FeignClient注解。
4.5.1 自定义Ribbon客户端
略
4.5.2 在Eureka中使用Ribbon
略
4.5.3 示例: 没有Eureka时如何使用Ribbon
略
4.5.4 示例:禁用Eureka使用Ribbon
略
4.5.5 直接使用Ribbon的API
public class MyClass {
@Autowired
private LoadBalancerClient loadBalancer;
public void doStuff() {
ServiceInstance instance = loadBalancer.choose("stores");
URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
// ... do something with the URI
}
}
4.6 声明REST客户端:Feign
略
4.7 外部配置:Archaius
略
4.8 路由和过滤器:Zuul
Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。
- 认证
- Insights
- 压力测试
- 金丝雀测试(Canary Testing)
- 动态路由
- 服务迁移
- 负载削减
- 安全
- 静态响应处理
- 主动/主动交换管理
4.8.1 嵌入Zuul反向代理
Spring Cloud创建了一个嵌入式Zuul代理来缓和急需一个UI应用程序来代理调用一个或多个后端服务的通用需求,这个功能对于代理前端需要访问的后端服务非常有用,避免了所有后端服务需要关心管理CORS和认证的问题。
。
在Spring Boot主函数上通过注解@EnableZuulProxy来开启。
4.8.2 Cookies和敏感HTTP头
4.8.3 路由Endpoint
使用@EnableZuulProxy同时引入了Spring Boot Actuator,默认将增加一个endpoint,提供http服务的/routes。
4.8.4 窒息模式和本地跳转
逐步替代旧的接口是一种通用的迁移现有应用程序或者API的方式,使用不同的具体实现逐步替换它们。Zuul代理是一种很有用的工具,因为你可以使用这种方式处理所有客户端到旧接口的请求。只是重定向了一些请求到新的接口。
4.8.5 通过Zuul上传文件
4.8.6 简单的嵌入Zuul
4.8.7 关闭Zuul过滤器
4.8.8 通过Sidecar进行多语言支持
4.9 RxJava with Spring MVC
Spring Cloud Netflix 包含 RxJava。
Spring Cloud Netflix提供并支持从Spring MVC Controllers返回rx.Single对象,还支持使用rx.Observable对象。
4.10 指标:Spectator, Servo, and Atlas
略
Spring Cloud 学习笔记(二)——Netflix的更多相关文章
- spring cloud学习笔记二 ribbon负载均衡
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为.为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求.Ribb ...
- Spring Cloud 学习笔记 (一)-- Eureka 服务器
开局一张图,截取了本人学习资料中的一张图,很好地展示了Eureka的架构. Eureka服务器 管理服务的作用.细分为服务注册,服务发现. 所有的客户端在Eureka服务器上注册服务,再从Eureka ...
- Spring Cloud学习笔记--Spring Boot初次搭建
1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...
- Spring Cloud学习笔记【一】Eureka服务注册与发现
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...
- 【Spring Cloud学习之二】服务注册和发现
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.EurekaEureka是Netflix开源的一个RESTful服务,主要用于服 ...
- spring cloud学习笔记五 网关服务zuul
网关服务是指,客户端发送的请求不用直接访问特定的微服务接口,而且是经过网关服务的接口进行交互,网关服务再去到特定的微服务中进行调用. 网关服务的路由功能和Nginx的反向代理一样,所有的服务都先会 ...
- spring cloud学习笔记四 熔断器Hystrix
我们知道分布式服务有这样一个特点,每一个微服务都有自己的业务,并且很多时候一个微服务的业务要依赖于其他微服务,如果这些相互关联的微服务中其中某个微服务请求失败时,就会导致其他调用它的微服务也会请求失败 ...
- Spring Cloud 学习笔记(一)——入门、特征、配置
[TOC] 0 放在前面 0.1 参考文档 http://cloud.spring.io/spring-cloud-static/Brixton.SR7/ https://springcloud.cc ...
- Spring Cloud学习笔记-006
服务容错保护:Spring Cloud Hystrix 在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调 ...
随机推荐
- dreamweaver破解版下载地址
dreamweaver CC 2015可以在可视化环境中设计的你网页,非常方便高效完成网页设计.Adobe Dreamweaver CC 2015支持CSS编辑器.和jQuery库代码自动完成功能等等 ...
- uploadify上传图片的类型错误的解决办法
大家在做开发的过程中,相信很多人都会使用到uploadify插件来上传图片,但是这个插件也有不完美的地方. 我曾多次遇到过这样一个问题:上传的图片类型明明是没有问题的,但是在上传的时候总是会报错:图片 ...
- iOS开发之通过代码自定义一个控件
关于控件的继承关系(面试重点): (1)所有的控件都继承自UIView. (2)能监听事件的都是先继承自UIControl,UIControl再继承自UIView.比如UIButton. (3)能整体 ...
- Brackets--我的初恋编辑器
大学毕业以后,因为一些个人琐事没有找到自己专业的对口工作,整天混混沌沌得过着也没有打破现状的决心和机会.但是每当独自思考的时候总是一阵阵的害怕,怕自己从此一事无成一无所有.于是在某个心潮澎湃的瞬间开始 ...
- vue-router2.0动态路由获取参数
一下demo演示2.0中的vue-router是如何获取到不同参数的,并在地址栏中匹配不同的信息 <!DOCTYPE html> <html lang="en"& ...
- Python之路-字符编码&数据类型补充
作业 三级菜单程序 menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{ }, '网易':{ }, 'google':{ } }, '中关村':{ '爱奇艺':{}, '汽车 ...
- 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 poptest是国内唯一 ...
- 性能测试培训:批量执行Jmeter脚本之ant调用
性能测试培训:批量执行Jmeter脚本之ant调用 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的load ...
- Android 瘦身之道 ---- so文件
Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...
- 前端开发框架简介:angular和react
作者:vienwu react是facebook推出一个用来构建用户界面的js库.官方介绍的三大特性如下: just the ui 把react只当作一个ui组件就好,等同于传统mvc中的view. ...