文档章节

Hystrix动态配置(zookeeper实现)

OrangeJoke
 OrangeJoke
发布于 2017/12/14 22:47
字数 634
阅读 1010
收藏 12

Hystrix介绍

Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.

github-Hystrix
Hystrix 主要用于服务调用的隔离,容错,降级处理,在分布式系统中,调用多个服务,而单个服务出现问题会导致系统级联出错,发生雪崩效应。同时提供dashboard实时监控。

Hystrix 隔离机制

Hystrix 提供两种隔离机制
THREAD:线程池模式,通过使用单个线程池来进行服务隔离,支持超时,大多数场景都应该使用这个,比如rpc调用。
SEMAPHORE:信号量模式,通过获取信号量的方式进行限流,比如经典的秒杀,只允许几个进程进入。

关于这两种模式的区别:两种机制的区别

Hystrix 设计模式

Hystrix 使用 Command 模式进行设计,关于Command 模式,请查看设计模式 ( 十三 ) 命令模式Command(对象行为型)

Hystrix 配置

Hystrix 默认使用Archaius 进行配置管理,一共提供四个级别, 分别是 默认属性 < 动态全局默认属性< 实例属性(写在代码中的)< 动态配置实例属性。
并通过后台线程去定时读取动态配置信息。

Archaius实现的自定义扩展代码:

//实现 配置策略
public class DBConfigurationSource implements PolledConfigurationSource {
    // ...
    @Override
    public PollResult poll(boolean initial, Object checkPoint)
            throws Exception {
        // implement logic to retrieve properties from DB
    }  
}

//实现调度更新策略
public class MyScheduler extends AbstractPollingScheduler {
    // ...
    @Override
    protected synchronized void schedule(Runnable runnable) {
        // schedule the runnable
    }

    @Override
    public void stop() {
        // stop the scheduler
    }
}

//最后注册生效
DynamicConfiguration configuration = new DynamicConfiguration(source, scheduler);
ConfigurationManager.install(configuration);

我们这篇博客主要就是介绍怎么实现动态配置实例属性,可以根据上面的策略实现自己的更新方式,比如存储至redis等等,下面介绍两种方式。

配置文件方式

Hystrix 默认会从 classpath:config.property 中去读取属性值来实现动态配置,比如


// 其中的CommandKey对应自己的配置

hystrix.command.CommandKey.execution.isolation.thread.timeoutInMilliseconds=20000
hystrix.command.CommandKey.fallback.isolation.semaphore.maxConcurrentRequests=200
hystrix.command.CommandKey.circuitBreaker.enabled=true
hystrix.command.CommandKey.circuitBreaker.requestVolumeThreshold=30

所以可以通过修改该配置文件,来实现动态更新。
该配置文件的位置也可以修改

-Darchaius.configurationSource.additionalUrls=http://myserver/properties

zookeeper 动态更新方式

更新的流程和上面提到的方式一样,我们使用zookeeper的动态配置功能。 项目和说明都放在github上了
zookeeper 实现hystrix动态配置

© 著作权归作者所有

OrangeJoke
粉丝 40
博文 57
码字总数 39185
作品 0
江北
高级程序员
私信 提问
加载中

评论(2)

OrangeJoke
OrangeJoke 博主

引用来自“爱吃大肉包”的评论

问下博主hystrix的线程池模式支持异步,而信号模式不支持,这个没太理解能解释下么。

然后这篇文章的功能,是否用spring cloud config做其实就可以解决了,热更新配置
我猜spring cloud config 就是直接通过我们上面的文件配置实现的,
我做了一个spring cloud config 的demo,config 会每次去更新数据至文件中,bootstrap.property.
https://github.com/tigerMoon/spring-cloud-example
爱吃大肉包
爱吃大肉包
问下博主hystrix的线程池模式支持异步,而信号模式不支持,这个没太理解能解释下么。

然后这篇文章的功能,是否用spring cloud config做其实就可以解决了,热更新配置
Dubbo负载均衡、容错、高可用

原文链接:https://juejin.im/post/5d391104f265da1bab29f23e

JAVA高级架构v
07/28
0
0
Spring Cloud--Honghu Cloud分布式微服务云系统—组件化

Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的。在学习Spring Cloud之前大家必...

itcloud
2018/04/26
172
1
(三)构建spring cloud微服务分布式云架构 - Spring Cloud集成项目简介

Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的。在学习Spring Cloud之前大家必...

SpringCloud关注者
2018/09/27
574
1
Spring Cloud简介/版本选择/ZooKeeper例子搭建简单说明

一、什么是Spring Cloud 官方的说法就是Spring Cloud 给开发者提供一套按照一定套路快速开发分布式系统的工具。 具体点就是Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置...

easonjim
2017/09/18
0
0
Zookeeper系列(三):应用场景

Zookeeper被广泛应用于各种分布式集群场景中,比如Hadoop、Storm、Spark、Kafka等,要想学好大数据分析,不可避免的要用到大规模机器集群,了解和掌握Zookeeper的工作原理将会对学好大数据分...

守望者之父
09/06
49
0

没有更多内容

加载失败,请刷新页面

加载更多

js判断数据类型的几种方法

1、typeof typeof只能判断区分基本类型,number、string、boolean、undefined和object,function; typeof 0; //number;typeof true; //boolean;typeof undefined; //undefined;typ......

Bing309
38分钟前
4
0
说一说你的对面向过程和面向对象的理解

软件开发思想,先有面向过程,后有面向对象 在大型软件系统中,面向过程的做法不足,从而推出了面向对象 都是解决实际问题的思维方式 两者相辅相成,宏观上面向对象把握复杂事物的关系;微观...

ConstXiong
42分钟前
5
0
Qt编写气体安全管理系统5-数据监控

一、前言 本项目对设备的监控有四种视图模式,可以任意切换,数据监控、地图监控、设备监控、曲线监控,其中数据监控是最常用的,所以在主界面导航中也排在第一位,综合观察分析了很多气体安...

飞扬青云
44分钟前
3
0
pip源安装TensorFlow阿里报错 '--trusted-host mirrors.aliyun.com'.

使用命令pip install -i http://mirrors.aliyun.com/pypi/simple/ tensorFlow 报错 '--trusted-host mirrors.aliyun.com'. 需要改成 pip install -i http://mirrors.aliyun.com/pypi/simple......

Mr_Tea伯奕
49分钟前
3
0
C# ICSharpCode.SharpZipLib 压缩、解压文件 附源码

http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZiplib的最新版本,本文使用的版本为0.86.0.518,支持Zip, GZip, BZip2 和Tar格式。我们需要dll 在官网上也有。 好了,深入的大...

_Somuns
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部