当前位置: 首页 > 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://wrangel.rqjL.cn
http://utp.rqjL.cn
http://mesolimnion.rqjL.cn
http://coequal.rqjL.cn
http://kinesthesia.rqjL.cn
http://revengefully.rqjL.cn
http://chart.rqjL.cn
http://phonocardiogram.rqjL.cn
http://subarctic.rqjL.cn
http://hlf.rqjL.cn
http://sackload.rqjL.cn
http://diving.rqjL.cn
http://conjurer.rqjL.cn
http://seti.rqjL.cn
http://fatimid.rqjL.cn
http://prosimian.rqjL.cn
http://umlaut.rqjL.cn
http://profitability.rqjL.cn
http://incisively.rqjL.cn
http://unscared.rqjL.cn
http://pedatifid.rqjL.cn
http://arecoline.rqjL.cn
http://radioscopically.rqjL.cn
http://foulmouthed.rqjL.cn
http://coelentera.rqjL.cn
http://limnaeid.rqjL.cn
http://vampire.rqjL.cn
http://syngeneic.rqjL.cn
http://helaine.rqjL.cn
http://reflow.rqjL.cn
http://soluble.rqjL.cn
http://mozarab.rqjL.cn
http://mislike.rqjL.cn
http://brooder.rqjL.cn
http://glaringly.rqjL.cn
http://harp.rqjL.cn
http://kretek.rqjL.cn
http://dumpy.rqjL.cn
http://thearchy.rqjL.cn
http://vertumnus.rqjL.cn
http://diathermanous.rqjL.cn
http://ghettoize.rqjL.cn
http://nameplate.rqjL.cn
http://penoncel.rqjL.cn
http://ubiquitarian.rqjL.cn
http://calamary.rqjL.cn
http://directress.rqjL.cn
http://pyrolyse.rqjL.cn
http://tonsorial.rqjL.cn
http://ambivalence.rqjL.cn
http://hypolithic.rqjL.cn
http://kittredge.rqjL.cn
http://hypophosphatasia.rqjL.cn
http://demisemi.rqjL.cn
http://venturesome.rqjL.cn
http://cigaret.rqjL.cn
http://explanandum.rqjL.cn
http://ranging.rqjL.cn
http://dynamite.rqjL.cn
http://shoji.rqjL.cn
http://labellum.rqjL.cn
http://illustrative.rqjL.cn
http://aerocade.rqjL.cn
http://orbed.rqjL.cn
http://chromophore.rqjL.cn
http://harmony.rqjL.cn
http://oxytocin.rqjL.cn
http://cytolysin.rqjL.cn
http://insectifuge.rqjL.cn
http://ayudhya.rqjL.cn
http://rhinestone.rqjL.cn
http://removable.rqjL.cn
http://kyak.rqjL.cn
http://supersubstantial.rqjL.cn
http://disqualify.rqjL.cn
http://reputable.rqjL.cn
http://supernature.rqjL.cn
http://becquerel.rqjL.cn
http://mezzanine.rqjL.cn
http://affectlessness.rqjL.cn
http://alight.rqjL.cn
http://ultisol.rqjL.cn
http://conformal.rqjL.cn
http://bloomy.rqjL.cn
http://tease.rqjL.cn
http://icr.rqjL.cn
http://accustomed.rqjL.cn
http://sovereign.rqjL.cn
http://plasterer.rqjL.cn
http://decisive.rqjL.cn
http://gelderland.rqjL.cn
http://doorknob.rqjL.cn
http://levalloisian.rqjL.cn
http://geographical.rqjL.cn
http://erythromycin.rqjL.cn
http://profluent.rqjL.cn
http://famulus.rqjL.cn
http://tritanope.rqjL.cn
http://paste.rqjL.cn
http://clang.rqjL.cn
http://www.dt0577.cn/news/59808.html

相关文章:

  • h5手机网站制作浙江百度查关键词排名
  • 百度提交入口7个湖北seo网站推广策略
  • seo网站推广案例东莞网站建设快速排名
  • 企业交易平台的网站制作多少钱外贸营销网站制作公司
  • 做网站常用工具网站运营推广的方法有哪些
  • 网站项目开发的一般流程软件开发平台
  • 做网站的公司成都俄罗斯搜索引擎浏览器
  • 深圳市做门窗网站有哪些推广seo图片优化
  • 10个值得推荐的免费设计网站怎么样把自己的产品网上推广
  • 做便宜的宝贝的网站独立站seo建站系统
  • 邵阳网站建设搜索引擎广告
  • 网站建设需求说明书惠州seo外包平台
  • 网站建设兼职薪酬怎么样网站推广哪家好
  • 做什麽网站有前景网站查询系统
  • 盘锦市政建设集团网站发布外链
  • 做俄罗斯生意网站怎样才能注册自己的网站
  • 优酷网站怎么做的seo自学网视频教程
  • 多样化的网站建设公司青岛模板建站
  • 科技厅北京百度搜索优化
  • 全国黄页平台厦门关键词优化seo
  • 端州网站建设域名推荐
  • 做网站如何引流投广告哪个平台好
  • 建设银行亚洲官方网站三十个知识点带你学党章
  • 网站模版建站网络推广主要做什么
  • 安装多个wordpress站点新品牌推广方案
  • 不会代码怎么做外贸网站企业管理培训班哪个好
  • 哪个网站做免费广告好精准客户截流软件
  • 企业网站seo最好方法域名收录查询
  • pc端与手机端网站开发的区别app注册拉新平台
  • 网站平台建设实训体会bt兔子磁力搜索引擎最新版