高可用架构
littleAsuna
BUPT在读学生
展开
-
用 Hystrix 构建高可用服务架构
本系列内容转载自git项目advancejavaHystrix 是什么?在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖...原创 2019-05-28 09:12:48 · 149 阅读 · 0 评论 -
基于 timeout 机制为服务接口调用超时提供安全保护
本系列内容转载自git项目advancejavaTimeoutMilliseconds在 Hystrix 中,我们可以手动设置 timeout 时长,如果一个 command 运行时间超过了设定的时长,那么就被认为是 timeout,然后 Hystrix command 标识为 timeout,同时执行 fallback 降级逻辑。TimeoutMilliseconds 默认值是 1000,...原创 2019-05-28 11:28:50 · 550 阅读 · 0 评论 -
基于本地缓存的 fallback 降级机制
Hystrix 出现以下四种情况,都会去调用 fallback 降级机制:• 断路器处于打开的状态。• 资源池已满(线程池+队列 / 信号量)。• Hystrix 调用各种接口,或者访问外部依赖,比如 MySQL、Redis、Zookeeper、Kafka 等等,出现了任何异常的情况。• 访问外部依赖的时候,访问时间过长,报了 TimeoutException 异常。两种最经典的降级机制...原创 2019-05-28 10:32:39 · 971 阅读 · 1 评论 -
基于 request cache 请求缓存技术优化批量商品数据查询接口
本系列内容转载自git项目advancejavaHystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓存。首先,有一个概念,叫做 Request Context 请求上下文,一般来说,在一个 web 应用中,如果我们用到了 Hystrix,我们会在一个 filter 里面,对每一个请求都施加一个请求上下文。就是说,每一次请求,就是一次请求上下文...原创 2019-05-28 10:23:58 · 1046 阅读 · 0 评论 -
深入 Hystrix 执行时内部原理
Hystrix 最基本的支持高可用的技术:资源隔离 + 限流。• 创建 command;• 执行这个 command;• 配置这个 command 对应的 group 和线程池。这里,我们要讲一下,你开始执行这个 command,调用了这个 command 的 execute() 方法之后,Hystrix 底层的执行流程和步骤以及原理是什么。在讲解这个流程的过程中,我会带出来 Hystr...原创 2019-05-28 09:58:17 · 1174 阅读 · 0 评论 -
Hystrix 隔离策略细粒度控制
本系列内容转载自git项目advancejavaHystrix 实现资源隔离,有两种策略:• 线程池隔离• 信号量隔离对资源隔离这一块东西,其实可以做一定细粒度的一些控制。execution.isolation.strategy指定了 HystrixCommand.run() 的资源隔离策略:THREAD or SEMAPHORE,一种基于线程池,一种基于信号量。// to use ...原创 2019-05-28 09:42:01 · 377 阅读 · 0 评论 -
Hystrix 信号量机制实现资源隔离
本系列内容转载自git项目advancejava信号量机制信号量的资源隔离只是起到一个开关的作用,比如,服务 A 的信号量大小为 10,那么就是说它同时只允许有 10 个 tomcat 线程来访问服务 A,其它的请求都会被拒绝,从而达到资源隔离和限流保护的作用。线程池与信号量区别线程池隔离技术,并不是说去控制类似 tomcat 这种 web 容器的线程。更加严格的意义上来说,Hystrix...原创 2019-05-28 09:26:34 · 2920 阅读 · 0 评论 -
Hystrix 线程池技术实现资源隔离
基于 Hystrix 线程池技术实现资源隔离上一讲提到,如果从 Nginx 开始,缓存都失效了,Nginx 会直接通过缓存服务调用商品服务获取最新商品数据(我们基于电商项目做个讨论),有可能出现调用延时而把缓存服务资源耗尽的情况。这里,我们就来说说,怎么通过 Hystrix 线程池技术实现资源隔离。资源隔离,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内,不会去用其...原创 2019-05-28 09:23:49 · 507 阅读 · 0 评论 -
电商网站详情页系统架构
本系列内容转载自git项目advancejava小型电商网站的商品详情页系统架构小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入 Nginx 服务器。用户浏览网站页面时,取用一个已经静态化好的 html 页面,直接返回回去,不涉及任何的业务逻辑处理下面是页面模板的简单 Demo 。<html&...原创 2019-05-28 09:16:59 · 873 阅读 · 0 评论 -
深入 Hystrix 断路器执行原理
本系列内容转载自git项目advancejavaRequestVolumeThresholdHystrixCommandProperties.Setter().withCircuitBreakerRequestVolumeThreshold(int)表示在滑动窗口中,至少有多少个请求,才可能触发断路。Hystrix 经过断路器的流量超过了一定的阈值,才有可能触发断路。比如说,要求在 10...原创 2019-05-28 11:11:20 · 866 阅读 · 0 评论