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

建网站挣钱网站建设重点

建网站挣钱,网站建设重点,旅游网站建设规划书模块划分,南阳企业做网站一 、场景描述在开发接口服务器的过程中#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/59308/

相关文章:

  • 为公司做的图可以上传网站吗网站备案号取消原因
  • 社交做的最好的网站做网站賺钱
  • 有没有免费的广告平台如何 网站优化
  • 外贸建网站哪家好html5技术可以制作网站吗
  • 网页视频下载快捷键关键词优化seo外包
  • 建英文网站有用吗做网站用母版页不好么
  • 好康的网站代码宁夏网站建设
  • 网站建设用户量分析关键词优化过程
  • 网站个人备案百度推官电商网站的建设与安全
  • 湖南建设信誉查询网站友情链接互换网站
  • 福州医保网站调入申报怎么做揭阳建设局网站
  • 同ip怎么做不同的网站怎样制作网页视频
  • 专业网站设计发展前景旅游网站建设与网页设计意义
  • 网站的弹窗是怎么做的更改网站建设报价
  • 网站tag设计辽宁省建设工程信息网首页官网
  • 网站的策划分析网站开发 最好开发语言和平台
  • 90设计网站免费素材比较好的网页模板网站
  • 学做缝纫的网站自适应网站建设电话
  • wordpress 支付方式搜索引擎优化理解
  • 怎么做冒牌网站预约做家庭清洁的网站
  • c2c网站免费建设河北省建设厅网站电话
  • 网站建设哪个公司最好金华做网站公司
  • 韩语网站建设境外网站icp备案申请表
  • 广州建站推广建网站需要多长时间
  • 网站设计色彩搭配深圳做网站要多少钱
  • 南京网站设计公司济南兴田德润简介图片怎么去创立一个网站
  • 自己在百度上可以做网站吗东莞注册营业执照
  • 包头网站建设公司哪家好适合广告公司的名字
  • 邢台柏乡县建设局网站网站公司企业网站
  • 虚拟主机 部署网站吗wordpress win10