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

承接做网站的网站荆门seo

承接做网站的网站,荆门seo,安全的定制型网站建设,织梦发布网站一 、场景描述在开发接口服务器的过程中#xff0c;为了防止客户端对于接口的滥用#xff0c;保护服务器的资源#xff0c; 通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个 用户#xff0c;他在一个时间段#xff08;interval#xff09;内…一 、场景描述在开发接口服务器的过程中为了防止客户端对于接口的滥用保护服务器的资源 通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个 用户他在一个时间段interval内比如 1 分钟调用服务器接口的次数不能够 大于一个上限limit比如说 100 次。如果用户调用接口的次数超过上限的话就直接拒绝用户的请求返回错误信息。服务接口的流量控制策略分流、降级、限流等。本文讨论下限流策略虽然降低了服务接口的访问频率和并发量却换取服务接口和业务应用系统的高可用。二、常用的限流算法1、漏桶算法漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率.示意图如下:可见这里有两个变量,一个是桶的大小,支持流量突发增多时可以存多少的水(burst),另一个是水桶漏洞的大小(rate)。因为漏桶的漏出速率是固定的参数,所以,即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流突发(burst)到端口速率.因此,漏桶算法对于存在突发特性的流量来说缺乏效率.2、令牌桶算法令牌桶算法(Token Bucket)和 Leaky Bucket 效果一样但方向相反的算法,更加容易理解.随着时间流逝,系统会按恒定1/QPS时间间隔(如果QPS100,则间隔是10ms)往桶里加入Token(想象和漏洞漏水相反,有个水龙头在不断的加水),如果桶已经满了就不再加了.新请求来临时,会各自拿走一个Token,如果没有Token可拿了就阻塞或者拒绝服务.令牌桶的另外一个好处是可以方便的改变速度. 一旦需要提高速率,则按需提高放入桶中的令牌的速率. 一般会定时(比如100毫秒)往桶中增加一定数量的令牌, 有些变种算法则实时的计算应该增加的令牌的数量.三、基于PHPRedis实现的令牌桶算法?php namespace ApiLib;/*** 限流控制*/ class RateLimit {private $minNum 60; //单个用户每分访问数private $dayNum 10000; //单个用户每天总的访问量public function minLimit($uid){$minNumKey $uid . _minNum;$dayNumKey $uid . _dayNum;$resMin $this-getRedis($minNumKey, $this-minNum, 60);$resDay $this-getRedis($minNumKey, $this-minNum, 86400);if (!$resMin[status] || !$resDay[status]) {exit($resMin[msg] . $resDay[msg]);}}public function getRedis($key, $initNum, $expire){$nowtime time();$result [status true, msg ];$redisObj $this-di-get(redis);$redis-watch($key);$limitVal $redis-get($key);if ($limitVal) {$limitVal json_decode($limitVal, true);$newNum min($initNum, ($limitVal[num] - 1) (($initNum / $expire) * ($nowtime - $limitVal[time])));if ($newNum 0) {$redisVal json_encode([num $newNum, time time()]);} else {return [status false, msg 当前时刻令牌消耗完];}} else {$redisVal json_encode([num $initNum, time time()]);}$redis-multi();$redis-set($key, $redisVal);$rob_result $redis-exec();if (!$rob_result) {$result [status false, msg 访问频次过多];}return $result;} }代码要点1首先定义规则单个用户每分钟访问次数$minNum单个用户每天总的访问次数$dayNum接口总的访问次数等不同的规则。2计算速率该代码示例以秒为最小的时间单位速率访问次数/时间$initNum / $expire3每次访问后补充的令牌个数计算方式获取上次访问的时间即上次存入令牌的时间计算当前时刻与上次访问的时间差乘以速率就是此次需要补充的令牌个数注意补充令牌后总的令牌个数不能大于初始化的令牌个数以补充数和初始化数的最小值为准。4程序流程第一次访问时初始化令牌个数$minNum存入Redis同时将当前的时间戳存入以便计算下次需要补充的令牌个数。第二次访问时获取剩余的令牌个数并添加本次应该补充的令牌个数补充后如何令牌数0则当前访问是有效的可以访问否则令牌使用完毕不可访问。先补充令牌再判断令牌是否0的原因是由于还有速率这个概念即如果上次剩余的令牌为0但是本次应该补充的令牌1那么本次依然可以访问。5针对并发的处理使用Redis的乐观锁机制四、Redis乐观锁介绍redis对事务的支持比较简单。redis只能保证一个客户端发起的事务命令可以执行中间不会插入其他事务。因为redis是单线程的所以做到上面这点很容易。一般redis接受到客户端的命令后会立即执行但是如果客户端发起multi命令redis不会立即执行而是让当前连接进入事务上下文把命令放到队列中接受到exec命令后redis会顺序执行队列中的命令。并把执行结果打包到一起返回客户端之后就结束了事务上下文一、简单的事务控制这个例子可以看到两个set命令发出后并没有立即执行而是放到队列中redis接受到exec命令才开始执行。如果有两个线程同时修改了一个变量的值如何控制事务回滚下面看乐观锁怎么控制的二、乐观锁控制事务1.什么是乐观锁大多是基于数据版本的记录机制。什么是数据版本就是为数据增加一个版本标识即为数据库表添加一个version字段当读取数据时把数据库版本一同读出当做了修改后将数据库版本1同修改一起提交。如果提交数据的版本号 数据库当前版本号提交成功。如图2.乐观锁实例假设数据库中账户信息表中有一个version字段当前值为1账户余额为$500这样避免了操作员B用旧数据修改表中记录的的可能。3.在redis中怎么体现的redis中用watch监视key如果key在提交前被修改则提交不成功。如下当session1还没来得及对age进行修改session2已经将age的值设为30session1再执行的时候失败因为session1对age加了乐观锁的缘故。watch命令会监视key当exec时如果监视的key从调用watch后发生过变化则整个事务会失败。也可以调用watch多次监视多个key。三、redis事务存在的问题redis保证事务中的命令连续执行但是如果其中一条命令执行失败事务并不回滚。为age 1的命令成功因为anme是string类型的所以不能做加操作命令有一个失败也不会回滚age的值已经被修改了。以上内容希望帮助到大家很多PHPer在进阶的时候总会遇到一些问题和瓶颈业务代码写多了没有方向感不知道该从那里入手去提升对此我整理了一些资料包括但不限于分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6laravelYII2RedisSwoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家需要戳这里PHP进阶架构师视频、面试文档免费获取或者关注咱们下面的知乎专栏PHP7进阶架构师​zhuanlan.zhihu.com来源https://www.cnblogs.com/starluke/p/11845207.html
http://wiki.neutronadmin.com/news/373672/

相关文章:

  • 有找代做家具的网站m网业游戏大全
  • 网站开发要懂英文吗文登市城乡建设局网站
  • 网站设计工程师个人网站后期怎么做企业
  • 福州响应式网站软文有哪几种类型
  • 不会技术怎么做公司网站网站策划职业规划
  • 北辰正方建设集团有限公司官方网站wordpress会员查看
  • 刚做的网站在百度上搜不到郑州微信公众号网站建设
  • 基于iview的网站开发模板网站规范建设情况
  • 闽侯福州网站建设南宁网站建设工具
  • ps中网站页面做多大的微信做单子的网站源码
  • 泰安建材网站建设电话全球速卖通网址
  • 网站服务器如何做端口映射wordpress 正在维护
  • 网站代备案流程如果修改wordpress后台登录域名
  • 网站建设有哪些优质公众号wordpress页面添加按钮
  • 金华免费模板建站网站代码图片
  • 二七区网站建设网站规划
  • 铜仁市网站建设网站设计公司 广州
  • 网站开发费的会计处理软件技术是什么
  • 南通优普网站建设制作国外好用的网站
  • 如何在外管局网站上做a合同网店托管被骗了3000
  • 网站专栏建设情况兰州网站制作公司
  • 网站备案工信部网页设计代码单词
  • 怎么做网站背景企业做网站需要花多少钱
  • 学会计算机编程可以做网站吗郴州网站推广
  • 在哪网站可以做农信社模拟试卷建一个全部由自己控制的网站需要多少钱
  • 512m内存做网站修改wordpress 字体
  • 网站开发技术发展趋势推广普通话文字素材
  • 网站建设属于税收便民信息发布平台
  • js效果网站网站设计的机构
  • 企业建网站解决方案wordpress页脚如何修改