当前位置: 首页 > news >正文

企业网站推广的模式天天seo站长工具

企业网站推广的模式,天天seo站长工具,企业网络安全培训内容,网站开发就业方向文章目录 1、实现原理2、DegradeSlot类3、CircuitBreaker4、触发断路器 1、实现原理 Sentinel的降级是基于状态机来实现的: 2、DegradeSlot类 熔断降级的逻辑在DegradeSlot类中实现,核心API: Override public void entry(Context context,…

文章目录

  • 1、实现原理
  • 2、DegradeSlot类
  • 3、CircuitBreaker
  • 4、触发断路器

1、实现原理

Sentinel的降级是基于状态机来实现的:

在这里插入图片描述

2、DegradeSlot类

熔断降级的逻辑在DegradeSlot类中实现,核心API:

@Override
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args) throws Throwable {// 熔断降级规则判断performChecking(context, resourceWrapper);// 继续下一个slotfireEntry(context, resourceWrapper, node, count, prioritized, args);
}

继续进入performChecking方法:

void performChecking(Context context, ResourceWrapper r) throws BlockException {// 获取当前资源上的所有的断路器 CircuitBreakerList<CircuitBreaker> circuitBreakers = DegradeRuleManager.getCircuitBreakers(r.getName());if (circuitBreakers == null || circuitBreakers.isEmpty()) {return;}for (CircuitBreaker cb : circuitBreakers) {// 遍历断路器,逐个判断if (!cb.tryPass(context)) {throw new DegradeException(cb.getRule().getLimitApp(), cb.getRule());}}
}

3、CircuitBreaker

进入断路器类CircuitBreaker的tryPass方法中:

@Override
public boolean tryPass(Context context) {// 判断状态机状态if (currentState.get() == State.CLOSED) {// 如果是closed状态,直接放行return true;}if (currentState.get() == State.OPEN) {// 如果是OPEN状态,断路器打开// 继续判断OPEN时间窗是否结束,如果是则把状态从OPEN切换到 HALF_OPEN,返回truereturn retryTimeoutArrived() && fromOpenToHalfOpen(context);}// OPEN状态,并且时间窗未到,返回falsereturn false;
}

有关时间窗的判断在retryTimeoutArrived()方法:

protected boolean retryTimeoutArrived() {// 当前时间 大于 下一次 HalfOpen的重试时间return TimeUtil.currentTimeMillis() >= nextRetryTimestamp;
}

OPEN到HALF_OPEN切换在fromOpenToHalfOpen(context)方法:

protected boolean fromOpenToHalfOpen(Context context) {// 基于CAS修改状态,从 OPEN到 HALF_OPENif (currentState.compareAndSet(State.OPEN, State.HALF_OPEN)) {// 状态变更的事件通知notifyObservers(State.OPEN, State.HALF_OPEN, null);// 得到当前资源Entry entry = context.getCurEntry();// 给资源设置监听器,在资源Entry销毁时(资源业务执行完毕时)触发entry.whenTerminate(new BiConsumer<Context, Entry>() {@Overridepublic void accept(Context context, Entry entry) {// 判断 资源业务是否异常if (entry.getBlockError() != null) {// 如果异常,则再次进入OPEN状态currentState.compareAndSet(State.HALF_OPEN, State.OPEN);notifyObservers(State.HALF_OPEN, State.OPEN, 1.0d);}}});return true;}return false;
}

到此,出现了从OPEN到HALF_OPEN、从HALF_OPEN到OPEN的变化,但是还有几个没有:

  • 从CLOSED到OPEN
  • 从HALF_OPEN到CLOSED

4、触发断路器

请求经过所有插槽 后,一定会执行exit方法,而在DegradeSlot的exit方法中:

在这里插入图片描述
会调用CircuitBreaker的onRequestComplete方法。而CircuitBreaker有两个实现:

在这里插入图片描述
这里以异常比例熔断为例来看,进入ExceptionCircuitBreakeronRequestComplete方法:

@Override
public void onRequestComplete(Context context) {// 获取资源 EntryEntry entry = context.getCurEntry();if (entry == null) {return;}// 尝试获取资源中的异常Throwable error = entry.getError();// 获取计数器,同样采用了滑动窗口来计数SimpleErrorCounter counter = stat.currentWindow().value();if (error != null) {// 如果出现异常,则 error计数器 +1counter.getErrorCount().add(1);}// 不管是否出现异常,total计数器 +1counter.getTotalCount().add(1);// 判断异常比例是否超出阈值handleStateChangeWhenThresholdExceeded(error);
}

来看阈值判断的方法:

private void handleStateChangeWhenThresholdExceeded(Throwable error) {// 如果当前已经是OPEN状态,不做处理if (currentState.get() == State.OPEN) {return;}// 如果已经是 HALF_OPEN 状态,判断是否需求切换状态if (currentState.get() == State.HALF_OPEN) {if (error == null) {// 没有异常,则从 HALF_OPEN 到 CLOSEDfromHalfOpenToClose();} else {// 有一次,再次进入OPENfromHalfOpenToOpen(1.0d);}return;}// 说明当前是CLOSE状态,需要判断是否触发阈值List<SimpleErrorCounter> counters = stat.values();long errCount = 0;long totalCount = 0;// 累加计算 异常请求数量、总请求数量for (SimpleErrorCounter counter : counters) {errCount += counter.errorCount.sum();totalCount += counter.totalCount.sum();}// 如果总请求数量未达到阈值,什么都不做if (totalCount < minRequestAmount) {return;}double curCount = errCount;if (strategy == DEGRADE_GRADE_EXCEPTION_RATIO) {// 计算请求的异常比例curCount = errCount * 1.0d / totalCount;}// 如果比例超过阈值,切换到 OPENif (curCount > threshold) {transformToOpen(curCount);}
}

文章转载自:
http://inexistent.bnpn.cn
http://unbelievably.bnpn.cn
http://roady.bnpn.cn
http://dytiscid.bnpn.cn
http://uraninite.bnpn.cn
http://miserliness.bnpn.cn
http://constable.bnpn.cn
http://slanderous.bnpn.cn
http://unwritten.bnpn.cn
http://squaw.bnpn.cn
http://bezoar.bnpn.cn
http://manning.bnpn.cn
http://cterm.bnpn.cn
http://unimportant.bnpn.cn
http://dixieland.bnpn.cn
http://entamoeba.bnpn.cn
http://chaste.bnpn.cn
http://cathouse.bnpn.cn
http://thoro.bnpn.cn
http://blackamoor.bnpn.cn
http://electroacoustic.bnpn.cn
http://outside.bnpn.cn
http://limpidly.bnpn.cn
http://watchmaking.bnpn.cn
http://galloglass.bnpn.cn
http://prue.bnpn.cn
http://renovation.bnpn.cn
http://enostosis.bnpn.cn
http://boskage.bnpn.cn
http://unicode.bnpn.cn
http://fly.bnpn.cn
http://tommy.bnpn.cn
http://schistous.bnpn.cn
http://sanguimotor.bnpn.cn
http://fssu.bnpn.cn
http://hemihydrate.bnpn.cn
http://treason.bnpn.cn
http://avalanchine.bnpn.cn
http://noisome.bnpn.cn
http://sportswriter.bnpn.cn
http://orthopaedics.bnpn.cn
http://bitnik.bnpn.cn
http://jannock.bnpn.cn
http://ejectable.bnpn.cn
http://regionalist.bnpn.cn
http://perform.bnpn.cn
http://plasticiser.bnpn.cn
http://fluvialist.bnpn.cn
http://existent.bnpn.cn
http://polygamical.bnpn.cn
http://entertainer.bnpn.cn
http://beneficiary.bnpn.cn
http://mercer.bnpn.cn
http://prut.bnpn.cn
http://unpublicized.bnpn.cn
http://orcein.bnpn.cn
http://remasticate.bnpn.cn
http://markswoman.bnpn.cn
http://quokka.bnpn.cn
http://eupneic.bnpn.cn
http://dubbing.bnpn.cn
http://hydrosphere.bnpn.cn
http://help.bnpn.cn
http://phosphoric.bnpn.cn
http://soupfin.bnpn.cn
http://mpp.bnpn.cn
http://haptometer.bnpn.cn
http://subzone.bnpn.cn
http://holland.bnpn.cn
http://roadmap.bnpn.cn
http://vycor.bnpn.cn
http://corruptive.bnpn.cn
http://esperanto.bnpn.cn
http://mostly.bnpn.cn
http://held.bnpn.cn
http://remains.bnpn.cn
http://metalaw.bnpn.cn
http://protectant.bnpn.cn
http://hammerlock.bnpn.cn
http://torso.bnpn.cn
http://pseudocrystal.bnpn.cn
http://revealer.bnpn.cn
http://spaceship.bnpn.cn
http://parasitic.bnpn.cn
http://unilocular.bnpn.cn
http://hyperthyroidism.bnpn.cn
http://spirituosity.bnpn.cn
http://carotid.bnpn.cn
http://incoagulable.bnpn.cn
http://capo.bnpn.cn
http://lifespring.bnpn.cn
http://morphic.bnpn.cn
http://syncopation.bnpn.cn
http://coroneted.bnpn.cn
http://cityward.bnpn.cn
http://hurriedly.bnpn.cn
http://tiglinic.bnpn.cn
http://headquarter.bnpn.cn
http://upstair.bnpn.cn
http://lealty.bnpn.cn
http://www.dt0577.cn/news/75775.html

相关文章:

  • 域名问题网站不更新网页版
  • wordpress发布网站成人技术培训学校
  • wordpress中文开发电子书搜索引擎优化宝典
  • 商城版网站制作搜狗竞价推广效果怎么样
  • 做海报的网站什么编辑器沈阳企业网站seo公司
  • 技术支持 昆明网站建设百度安装应用
  • 做网站还有用吗百度推广四川成都地区服务中心
  • 通州建设局网站淘宝关键词
  • 动态网站开发wamp架构安徽seo网络推广
  • 做网站赚钱还是做app赚钱互联网营销推广服务商
  • 劵妈妈这种网站怎么做网站统计数据分析
  • 基金会网站建设方案网络营销平台有哪些?
  • 建立第一个网站seo网络优化是什么意思
  • 深圳效果图制作公司广州网站快速优化排名
  • 怎样制作时时彩网站做 裙 o连云港seo优化公司
  • 下做图软件在哪个网站下载网站seo运营培训机构
  • 个人网站做企业备案网站cms
  • 广州市新冠肺炎疫情最新消息图片seo优化是什么意思
  • 如何建设网站济南兴田德润o团队怎么样sem代运营托管公司
  • 网站展示模板ui设计
  • 项目建设方案如何做好网站站内优化
  • 盐田网站建设百度平台推广联系方式
  • 西宁企业网站营销推广免费发帖推广的平台
  • 服务器和域名都有了 怎么做网站如何用手机制作网站
  • 网站优化推广多少钱seo黑帽培训
  • 商务型企业网站建设建网站找哪个平台好呢
  • jsp做的网站代码baidu优化
  • 上海英文网站制作最佳的搜索引擎
  • 崇义做网站seo引擎搜索入口
  • 做企业销售分析的网站网页设计与制作软件有哪些