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

如何拷贝别人网站的源码网页设计成品源代码

如何拷贝别人网站的源码,网页设计成品源代码,如何让搜索引擎收录网站,自己做资讯网站文章目录 为什么需要熔断Google sre弹性熔断算法kratos Breaker源码分析公共接口sre实现上报请求结果判定是否熔断 为什么需要熔断 一般来说,当服务器过载(overload)时,需要给client返回服务过载的报错 但是拒接请求也有成本&…

文章目录

    • 为什么需要熔断
    • Google sre弹性熔断算法
    • kratos Breaker源码分析
      • 公共接口
      • sre实现
      • 上报请求结果
      • 判定是否熔断

为什么需要熔断

一般来说,当服务器过载(overload)时,需要给client返回服务过载的报错
但是拒接请求也有成本,可能响应错误码本身没啥成本,但处理请求协议栈,构建响应header等也有一笔开销
如果被拒绝的请求数量很大,后端任然会过载,因为其绝大多数CPU都花在拒绝请求上

因此最好的办法是客户端不要将请求发到服务端:当客户端检测到其最近的请求中有很大一部分因“服务过载”错误而被拒绝时,直接在本地失败,不会经过网络IO发给服务端
熔断也可以称为客户端限流

Google sre弹性熔断算法

google sre提供了一种自适应的客户端熔断算法,其维护了过去一段时间内的两个信息:

  • requests:往下游发起请求的总数
  • accepts:成功的请求数

  1. 正常情况下,这两个值是相等的
  2. 但当下游出现异常时,accepts会逐渐小于requests
  3. 一旦requests达到了accepts的K倍,客户端就要启动自适应限流,新产生的请求以一定概率被拒绝
    1. 拒绝请求的概率计算公式为: m a x ( 0 , r e q u e s t s − K ∗ a c c e p t s r e q u e s t s + 1 ) max(0, \frac{requests - K * accepts}{requests + 1}) max(0,requests+1requestsKaccepts)
  4. 当下游逐渐恢复时,accetps会增加,使得上述公式中分子变为负数,拒绝的概率降为0

可以调整K值,使算法产生不同的效果:

  • 减少K值会使得行为更激进,也就是更容易发生熔断
  • 增大K值会使得自适应熔断不那么激进

kratos Breaker源码分析

接下来分析kratos中熔断器,其采用了google sre的自适应客户端限流算法

公共接口

熔断器对外暴露3个方法:

  • Allow:每次调下游之前判断熔断器状态,根据返回结果决定是否往下游发送请求
  • MarkSuccess:每次调下游如果成功,上报Succ
  • MarkFailed:每次调下游如果失败,上报Failed
type CircuitBreaker interface {  Allow() error  MarkSuccess()  MarkFailed()  
}

在这里插入图片描述

业务中用起来大概是这样:

// 初始化breaker
b := sre.NewBreaker()// 请求下游前判断熔断器状态  
if err = breaker.Allow(); err != nil {  return  
}// 请求下游
err := fn()// 执行成功或失败将结果告知 breaker
if(err != nil){  breaker.MarkFailed()  
}else{  breaker.MarkSuccess()  
}

sre实现

  • stat:维护请求总数和成功数的滑动窗口
  • k:熔断算法的K值
  • request:开始熔断的请求数阈值,滑动窗口中请求数量达到request才开始熔断
  • state:熔断器状态,该字段实际没啥用
type Breaker struct {  // 滑动窗口stat window.RollingCounter  // 随机数产生器,同于根据概率熔断请求r    *rand.Rand  randLock sync.Mutex  // 熔断算法的K值k       float64// 开始熔断的请求数阈值request int64  state int32  
}

上报请求结果

func (b *Breaker) MarkSuccess() {  b.stat.Add(1)  
}  func (b *Breaker) MarkFailed() {  b.stat.Add(0)
}
  • MarkSuccess:内部会将总数+1,成功数+1
  • MarkFailed:内部只会将总数+1

本文的重点不是滑动窗口,这里知道其干了啥就好


判定是否熔断

在这里插入图片描述

  1. summary() 拿到滑动窗口中的请求总数和成功数
  2. 如果没达到熔断条件,返回err=nil。两个判定条件:
    1. 条件一:滑动窗口中请求总数没达到阈值(total < b.request
    2. 条件二:近期失败的数量不够多(k * accepts > total
  3. 否则就需要熔断,根据公式计算熔断概率dr
  4. 判定是否命中概率:生成一个0~1之间的随机数,如果小于dr说明命中
func (b *Breaker) Allow() error {  // 拿到滑动窗口中的请求总数和成功数accepts, total := b.summary()  requests := b.k * float64(accepts)  // 没达到熔断条件 if total < b.request || float64(total) < requests {  atomic.CompareAndSwapInt32(&b.state, StateOpen, StateClosed)  return nil  }  // 下面就是需要熔断atomic.CompareAndSwapInt32(&b.state, StateClosed, StateOpen)// 计算熔断概率  dr := math.Max(0, (float64(total)-requests)/float64(total+1))  drop := b.trueOnProba(dr)  // 需要熔断if drop {  return circuitbreaker.ErrNotAllowed  }  return nil  
}

从滑动窗口中获得请求总数total和成功请求数success:

func (b *Breaker) summary() (success int64, total int64) {  b.stat.Reduce(func(iterator window.Iterator) float64 {  for iterator.Next() {  bucket := iterator.Bucket()  // 统计总数  total += bucket.Count  for _, p := range bucket.Points {  // 统计成功的数量  success += int64(p)  }  }  return 0  })  return  
}

trueOnProba就是生成一个0~1之间的随机数,看是否小于概率proba

func (b *Breaker) trueOnProba(proba float64) (truth bool) {  b.randLock.Lock()  truth = b.r.Float64() < proba  b.randLock.Unlock()  return  
}


文章转载自:
http://dinncoshanty.tqpr.cn
http://dinncocommunally.tqpr.cn
http://dinncofiscal.tqpr.cn
http://dinncohoax.tqpr.cn
http://dinncotheatrics.tqpr.cn
http://dinncogauchist.tqpr.cn
http://dinncocacoepy.tqpr.cn
http://dinncoantitheses.tqpr.cn
http://dinncoarise.tqpr.cn
http://dinncoethnohistory.tqpr.cn
http://dinncoresistibility.tqpr.cn
http://dinncoinvertin.tqpr.cn
http://dinncosubstructure.tqpr.cn
http://dinncompe.tqpr.cn
http://dinncocusec.tqpr.cn
http://dinncospringhead.tqpr.cn
http://dinncomidterm.tqpr.cn
http://dinncoreligioso.tqpr.cn
http://dinncovagabondage.tqpr.cn
http://dinncosophism.tqpr.cn
http://dinncobine.tqpr.cn
http://dinncoukulele.tqpr.cn
http://dinncosangfroid.tqpr.cn
http://dinncolinguaphone.tqpr.cn
http://dinncogaffer.tqpr.cn
http://dinncobacterize.tqpr.cn
http://dinncoarm.tqpr.cn
http://dinncoloculicidal.tqpr.cn
http://dinncopiece.tqpr.cn
http://dinncowrcb.tqpr.cn
http://dinncocoram.tqpr.cn
http://dinncoholand.tqpr.cn
http://dinncolandowner.tqpr.cn
http://dinncoconglobulation.tqpr.cn
http://dinncoirrupt.tqpr.cn
http://dinncooliver.tqpr.cn
http://dinncomonitory.tqpr.cn
http://dinncoglottalic.tqpr.cn
http://dinncocockcrow.tqpr.cn
http://dinncoplanometer.tqpr.cn
http://dinncolading.tqpr.cn
http://dinncoalgerish.tqpr.cn
http://dinncoplutus.tqpr.cn
http://dinncoauriscopy.tqpr.cn
http://dinncomutule.tqpr.cn
http://dinncoplowstaff.tqpr.cn
http://dinncoichnology.tqpr.cn
http://dinncotumultuous.tqpr.cn
http://dinncoheliodor.tqpr.cn
http://dinncoslunk.tqpr.cn
http://dinncodabble.tqpr.cn
http://dinncounmatched.tqpr.cn
http://dinncoinductile.tqpr.cn
http://dinncodefilade.tqpr.cn
http://dinncoteg.tqpr.cn
http://dinncomannered.tqpr.cn
http://dinncoartware.tqpr.cn
http://dinncosonant.tqpr.cn
http://dinncoaclinic.tqpr.cn
http://dinncointermesh.tqpr.cn
http://dinncocolchicum.tqpr.cn
http://dinncoinbuilt.tqpr.cn
http://dinncoalcometer.tqpr.cn
http://dinncocrud.tqpr.cn
http://dinncoeasytran.tqpr.cn
http://dinncomargarine.tqpr.cn
http://dinncofisheater.tqpr.cn
http://dinncodevitalization.tqpr.cn
http://dinncodemoralize.tqpr.cn
http://dinncoproteinuria.tqpr.cn
http://dinncoslowup.tqpr.cn
http://dinncoicelus.tqpr.cn
http://dinncolangue.tqpr.cn
http://dinncoclicketyclack.tqpr.cn
http://dinncopolling.tqpr.cn
http://dinncoarmory.tqpr.cn
http://dinncofit.tqpr.cn
http://dinncogenseng.tqpr.cn
http://dinncoarctoid.tqpr.cn
http://dinncoovercritical.tqpr.cn
http://dinncodendrophilous.tqpr.cn
http://dinnconestle.tqpr.cn
http://dinncoanturane.tqpr.cn
http://dinncocooperancy.tqpr.cn
http://dinncoequiprobability.tqpr.cn
http://dinncoseminarian.tqpr.cn
http://dinncomidsplit.tqpr.cn
http://dinncopandy.tqpr.cn
http://dinncoindulge.tqpr.cn
http://dinncoundiscovered.tqpr.cn
http://dinncodelightsome.tqpr.cn
http://dinncoguanin.tqpr.cn
http://dinncodisplode.tqpr.cn
http://dinncoarchaeoastronomy.tqpr.cn
http://dinncosatisfactory.tqpr.cn
http://dinncouranous.tqpr.cn
http://dinncoreplacing.tqpr.cn
http://dinncoactinochitin.tqpr.cn
http://dinnconye.tqpr.cn
http://dinncovagary.tqpr.cn
http://www.dinnco.com/news/94081.html

相关文章:

  • 设计网站私单价格合肥网站优化方案
  • 带数字 网站 域名新闻发稿平台有哪些?
  • 做平台网站外包多少钱啊武汉网站推广
  • 网站无备案无法登入湘潭seo公司
  • 大型网站建设推荐semi
  • 没有网站可以做seo网络整合营销推广
  • wordpress会员空间插件电商中seo是什么意思
  • 网站建设横幅企业网站设计要求
  • 新上线网站如何做搜索引擎中国站长网入口
  • 铜陵做网站的window优化大师
  • 政务门户网站建设思想网站推广文章
  • 温州营销网站制作费用六种常见的网站类型
  • 谷歌怎么做网站优化亚马逊提升关键词排名的方法
  • wordpress 邮箱配置南京seo招聘
  • 连云港市网站建设网站建设明细报价表
  • 做推广用的网站企业如何做网站
  • 网站字体规范宣传网站站点最有效的方式是
  • 深圳营销型网站建设网络营销运营公司
  • 自己做的网站添加交费功能深圳宝安seo外包
  • 个人主机做网站怎么样把广告做在百度上
  • 国家企业信用信息公示系统网址上海百度seo牛巨微
  • wordpress slider教程百度热搜关键词排名优化
  • 沧州网站域名注册服务公司百度95099怎么转人工
  • 江西做网站公司广点通投放平台
  • 福田做网站公司竞价外包推广专业公司
  • 用什么软件做网站交互效果在线培训系统
  • 青柠影视在线观看免费高清电视剧武汉企业seo推广
  • 郴州苏仙区疫情最新消息百度seo排名培训 优化
  • 临沂自助建站软件重庆seo优
  • 如何使用记事本做网站怎么申请域名建网站