广告
返回顶部
首页 > 资讯 > 精选 >如何进行Hystrix开源框架
  • 740
分享到

如何进行Hystrix开源框架

2023-06-19 10:06:13 740人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关如何进行Hystrix开源框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。spring cloud集成了Hystrix,Hystrix在很多大公司里

本篇文章给大家分享的是有关如何进行Hystrix开源框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

spring cloud集成了Hystrix,Hystrix在很多大公司里都在广泛的使用,我写了一个开源框架,叫Jboot(开源网址git.oschina.net/fuhai/jboot ),它也集成了Hystrix,同时以Hystrix为核心穿插在整个框架内部。

我有一些之前的同事在阿里、百度、腾讯、滴滴等大公司,他们也都在广泛的使用Hystrix,但是,却没有太好的文章能介绍Hystrix到底是什么?它为什么这么流行?在什么场景下用?解决什么痛点?

Hystrix的介绍:

“Hystrix 供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。”

实际上,这样的解释及其笼统,对于不了解Hystrix的同学来说还是一头雾水。

在传统的项目中,一般的架构如下:

如何进行Hystrix开源框架

在高爆发情况下,如果没有采用适当的缓存,浏览器的请求会直接被WEB应用传送到数据库去,也就说当有多少个浏览器请求,就会有多少个数据库查询,这个的时候,数据库往往会不堪重负,出现异常情况。

比如说:

  1. 当数据库查询过大,导致数据库服务器内存占用过高。

  2. sql较为复杂,导致数据库CPU占用过高,或者返回结果较慢。

  3. 连接数过多,导致链接超时。

  4. 等等。

在我们整个web应用在,不同的逻辑(或页面)对数据库的查询造成的压力往往是不一样的。

比如说:

  1. 查看文章详情页面,可能是根据文章的主键进行查询,命中数据库主键索引,效率非常高。

  2. 某个文章统计页面,根据复杂的SQ语句查询数据库才会得到的结果,效率很第,同时占用数据库内存和CPU。

如果当“某个文章统计页面”被大量访问,数据库出现异常情况,有新的请求的时候,总会返回数据库连接超时,同时也包括“查看文章详情页面”。此时,对于访问文章详情的用户来说可能会出现500错误。

也就是说,“查看文章详情页面”和“某个文章统计页面”两个不同的页面(或者说两个不同的逻辑)会相互影响。

如何解决此类的问题呢?

这就涉及到我们这篇文章要降到的Hystrix,Hystrix能够对“查看文章详情页面”和“某个文章统计页面”这两个不同的页面进行隔离,当任何一个出现问题的时候,不会影响到其他的页面。

也就说当“某个文章统计页面”被大量访问,出现了数据库异常情况,导致web应用出现500,那么Hystrix要极力去保证“查看文章详情页面”是正常的。

如何做到呢?

Hystrix提供了两种解决方案:

  1. 线程池

  2. 信号量。

在“web应用”访问“数据库”的时候,Hystrix会把不同的逻辑放到不同的线程池里去,同时会启用一个“线程池管理员”来查看线程池里所有线程的执行情况,如果某个连接池异常出现达到一定的量,那么此时,所有的请求都不会再请求到数据库,直接被Hystrix拦截,并会调用一个本地方法来处理“异常达到一定量”的这种情况,这个过程也叫“降级”。

在上述的业务描述中,“某个文章统计页面”和“查看文章详情页面”是两个不同的逻辑,会被Hystrix放到两个不同的线程池里,当“某个文章统计页面”的错误率(异常情况)达到一定的量(这个量可以配置),Hystrix立即切断了“某个文章统计页面”和数据库之间的连接,保证“某个文章统计页面”不会再继续消耗数据库资源。而“查看文章详情页面”的错误率极低或者系统延迟极低,Hystrix对其正常放行。从而达到了隔离的作用。

不过,Hystrix用得更多的是在rpc(Remote Procedure Call)的使用场景,在分布式架构下,不同的系统之间会相互调用,一旦某个子系统出现异常,Hystrix立即切断其他系统和异常子系统的联系。

如下图所示:

如何进行Hystrix开源框架

假设上图的顶部“User Request”是访问某在线商城的个人中心页面,个人中心页面里显示了:个人资料、推荐商品、购物车和我的快递信息等。

个人资料、推荐商品、购物车、我的快递信息分别来至于四个子系统。大概由如下代码组成:

public void userCenter(){        List<Goods> recommendGoodsList = system1.queryGoodsList();        List<Goods> myGoodsList = system2.queryMyGoodsList();        List<ExpressInfo> myExpressInfoList = system3.queyrMyExpressList();        User myInfo = system4.queryMyInfo();          request.setAttribute(“recommendGoodsList”,recommendGoodsList);        request.setAttribute(“myGoodsList”,myGoodsList);        request.setAttribute(“myExpressInfoList”,myExpressInfoList);        request.setAttribute(“myInfo”,myInfo);        render(“userCenter.html”);}

此时,若“快递信息”子系统出现了问题,如下图所示: 

如何进行Hystrix开源框架

  1. public void userCenter(){

  2.         List<Goods> recommendGoodsList = system1.queryGoodsList();

  3.         List<Goods> myGoodsList = system2.queryMyGoodsList();

  4.         List<ExpressInfo> myExpressInfoList = system3.queyrMyExpressList();

  5.         User myInfo = system4.queryMyInfo();

  6.    

  7.         request.setAttribute(“recommendGoodsList”,recommendGoodsList);

  8.         request.setAttribute(“myGoodsList”,myGoodsList);

  9.         request.setAttribute(“myExpressInfoList”,myExpressInfoList);

  10.         request.setAttribute(“myInfo”,myInfo);

  11.         render(“userCenter.html”);

  12. }

那么此时,第四行代码“ system3.queyrMyExpressList();”会出现等待情况,从而导致所有的请求都会出现等待情况,如下图:

如何进行Hystrix开源框架

更加可怕的是,当所有的请求都在等待的时候,系统资源会很快被耗尽,从而导致系统奔溃,甚至连重启系统都不行(因为重启后,请求又立即进来消耗资源)。一个服务器的等待,也可能会导致其他服务器出现等待(不同的服务器之间往往都会有相互调用数据的情况),此时所有的业务系统全部奔溃,又称:雪崩效应。

当有了Hystrix的隔离之后,每个业务都会在自己的线程池里被管理,当List<ExpressInfo> myExpressInfoList = system3.queyrMyExpressList(); 出现问题(延迟或错误)达到一定量的时候,system3.queyrMyExpressList();会立即返回数据(一般情况下是空数据,由降级函数执行返回结果)而不会出现等待的情况,从而保证系统正常运作。

我们回头来看下Hystrix的定义:

“Hystrix 供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。”

此时,你是否对Hystrix的定义有所理解了呢?

值得赞赏的是,Hystrix对线程池的管理,还提供了一个可视化监控系统 hystrix-dashboard 来查看每个线程池的情况。如果你的电脑上安装有Docker,可以通过以下命令来启动 hystrix-dashboard

docker run --rm -ti -p 7979:7979 kennedyoliveira/hystrix-dashboard

如果没有docker环境也没关系,你也可以执行通过以下方法来编译启动 hystrix-dashboard

  1. $ git clone https://GitHub.com/Netflix/Hystrix.git

  2. $ cd Hystrix/hystrix-dashboard

  3. $ ../gradlew appRun

  4. > Building > :hystrix-dashboard:appRun > Running at Http://localhost:7979/hystrix-dashboard

启动 hystrix-dashboard 成功后,可以通过浏览器访问http://localhost:7979/hystrix-dashboard 来查看 hystrix-dashboard 。

如下图所示:

如何进行Hystrix开源框架

填写“web应用”的Hystrix的stream地址后,点击“monitor stream”按钮,我们就可以看到Hystrix对整个应用的监控情况了。

如何进行Hystrix开源框架

备注:在Jboot框架开发的应用中,我们需要在jboot.properties配置“jboot.hystrix.url = /hystrix.stream”,此时Hystrix的stream地址为:http://host:port/hystrix.stream 。

Srping Cloud等要做的事情比较多,不像Jboot一行配置就可以使用,请自行查看其帮助文档。

到此,Hystrix的介绍就完毕了,这篇文章并没有涉及到Hystrix如何去使用,网上有非常多的文章来讲解如何使用Hystrix,但是却没有一篇文章来系统介绍什么是Hystrix。我觉得对任何技术,理解要比使用重要很多,这也是我为什么写这篇文章的原因。

以上就是如何进行Hystrix开源框架,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何进行Hystrix开源框架

本文链接: https://www.lsjlt.com/news/295357.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行Hystrix开源框架
    本篇文章给大家分享的是有关如何进行Hystrix开源框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spring Cloud集成了Hystrix,Hystrix在很多大公司里...
    99+
    2023-06-19
  • Thinkphp开源框架如何使用?
      (一)首先是准备工作下载thinkPHP框架最新版本,解压缩到你将要开发的项目位置。操作演示如图:  其中index.php是入口文件,即所有的请求都要经过此文件才能够完成。Application 是应...
    99+
    2022-10-18
  • 如何进行jQuery源码的整体框架分析
    这篇文章将为大家详细讲解有关如何进行jQuery源码的整体框架分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先附上jQuery的代码结构。JS代码(fu...
    99+
    2022-10-19
  • PHP中如何进行RPC框架的开发?
    RPC(Remote Procedure Call),是一种进程间通信协议,它允许不同的进程在不同的物理机器上通过网络进行通信和协作。RPC框架越来越受到关注,因为它可以帮助开发者轻松地实现分布式系统的开发。在本篇文章中,我们会一步一步地介...
    99+
    2023-05-14
    开发 PHP RPC框架
  • django框架如何集成celery进行开发
    上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发。 本系列文章的开发环境: window 7 + python2.7 + pycharm...
    99+
    2022-06-04
    框架 django celery
  • 如何使用开源J2EE框架bbossgroups 3.5
    这篇文章将为大家详细讲解有关如何使用开源J2EE框架bbossgroups 3.5,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。bbossgroups 3.5 的主要改进:◆  本...
    99+
    2023-06-17
  • 如何使用Java和Laravel框架进行Web开发?
    在如今的互联网时代,Web开发已经成为了一个非常热门的领域。Java和Laravel框架是Web开发中非常常用的技术,Java作为一种非常成熟的编程语言,Laravel框架则是一种非常流行的PHP框架。本文将介绍如何使用Java和Larav...
    99+
    2023-11-07
    laravel 教程 框架
  • 如何使用ASP.NET AJAX框架来进行AJAX开发
    这篇文章主要为大家展示了“如何使用ASP.NET AJAX框架来进行AJAX开发”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用ASP.NET AJAX框...
    99+
    2022-10-19
  • 如何进行ASP.NET Web开发框架中的查询
    本篇文章为大家展示了如何进行ASP.NET Web开发框架中的查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Enterprise Solution 支持用户自定义查询(query and loo...
    99+
    2023-06-17
  • 如何进行CaptureFramework框架分析
    这篇文章跟大家分析一下“如何进行CaptureFramework框架分析”。内容详细易懂,对“如何进行CaptureFramework框架分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起...
    99+
    2023-06-04
  • 如何进行安装ThinkPHP框架
    本文小编为大家详细介绍“如何进行安装ThinkPHP框架”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何进行安装ThinkPHP框架”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、环境要求在安装 Think...
    99+
    2023-07-05
  • Laravel 框架中如何使用 ASP 文件进行开发?
    Laravel 是一个流行的 PHP 开发框架,它提供了许多便利的功能和工具,让开发者可以快速地创建 Web 应用程序。在 Laravel 中,开发人员可以使用多种文件类型来完成应用程序的开发,其中包括 ASP 文件。本文将介绍 Larav...
    99+
    2023-09-01
    文件 laravel 框架
  • 怎么使用Three.js框架进行开发
    这篇文章主要介绍了怎么使用Three.js框架进行开发的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Three.js框架进行开发文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • 如何对SSM框架进行整合
    今天就跟大家聊聊有关如何对SSM框架进行整合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不...
    99+
    2023-05-31
    ssm
  • 如何使用Vue.js开发微信小程序开源框架mpvue
    这篇文章主要介绍了如何使用Vue.js开发微信小程序开源框架mpvue,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言mpvue是一款使用...
    99+
    2022-10-19
  • 如何使用 ASP 框架和 IDE 进行高效并发开发?
    ASP框架和IDE工具是一种非常流行的Web开发工具,它们可以帮助开发人员在并发开发中更高效地完成任务。本文将介绍如何使用ASP框架和IDE工具进行高效并发开发,以及一些最佳实践。 一、ASP框架 ASP是一种流行的Web开发框架,它允许开...
    99+
    2023-08-28
    框架 并发 ide
  • 如何进行Keras vs PyTorch框架比较
    如何进行Keras vs PyTorch框架比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经...
    99+
    2023-06-04
  • 如何进行Python虚拟机的执行框架
    今天就跟大家聊聊有关如何进行Python虚拟机的执行框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Python虚拟机中一个最核心的概念,在Python语言中,一切都是对象,也就...
    99+
    2023-06-17
  • Python用Bottle轻量级框架进行Web开发
    当前Python Web开发中的框架算Django最为流行了,但是本文介绍的是一个较为轻量级的Web框架:Bottle框架。理论性的东西就不讲了,直接上实例代码。 1.问题描述 最近做一个系统...
    99+
    2022-06-04
    框架 Python Bottle
  • Python中的Spring框架:如何使用Numpy在Windows上进行开发?
    Python已经成为了一个广泛使用的编程语言,因为它的易学易用和广泛的应用领域。Python能够处理大量的数据并且非常适合科学计算,而Numpy则是Python中最常用的科学计算库之一。而Spring框架则是一个非常流行的Java框架,它...
    99+
    2023-10-23
    spring numpy windows
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作