bfwsoa框架高并发请求的同步异步缓存策略及队列访问机制教程

bfwsoa框架高并发请求的同步异步缓存策略及队列访问机制

当一个系统如果每次的操作能直接访问数据库的话,也没有限流,那么一旦遭遇cc攻击,数据库服务器就能崩了,我们应该就数据库的访问进行限制,用户访问的永远是缓存,不会直接接触数据库,而缓存的过期时间和更新全部由一个异步的cli来执行,这样进行排队更新缓存,前端结合nosql内存缓存进行高并发请求,一旦缓存过期,另一个cli中的就会搜到过期提醒,立刻更新缓存,即时有100万人访问,读的都是缓存,只有一个进程负责更新缓存。同样的是写入请求也要排队。下面我来讲讲bfwsoa如何开启异步缓存与队列请求执行。


首先确保Public/index.php入口函数的app_root要是这样的。不能直接使用../


一、异步缓存

异步缓存就是说缓存读与缓存更新是两个进程,默认是同步,就是cache_expire_strategy这个配置是syn

,如果单独设置某个client cache会异步,可以设置client的cache方法的第二个参数为true表示开启异步缓存更新。

这样全局是异步的,这个参数不写或设置false都不会影响全局是异步的,这个缓存的过期处理是有cli命令行中执行队列式一个一个更新,前端获取的缓存是不过期的,不会去触发数据库的更新,更新缓存全部由php cli命令行中消息队列读取 过期自动更新。


二、异步任务

异步任务也是,任务提交后给出一个任务id,一个cli进程读取队列消息执行命令

app下的Config.php中定义那些service是需要加锁或异步队列执行的。

例如client_order服务下的bid方法需要按队列执行,并且每个报价请求只能执行一次

然后业务代码中执行 下面的,如果发现data中包含queuerequest键值对,说明是异步任务,这个时候获取的是reqid是请求id,通过这个id定时去查询cache是否有结果。

命令行中执行

配合bfwsoa专用的前端ajax封装请求插件bfwrequest.js

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>BFWRequest 智能验证码插件演示</title>
  <style>
    body {
      font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
      background-color: #f4f6f8;
      display: flex;
      flex-direction: column;
      align-items: center;
      padding-top: 50px;
    }
    h1 { color: #333; }
    .btn-group { margin-top: 20px; }
    button {
      padding: 10px 20px;
      font-size: 16px;
      margin: 0 10px;...

点击查看剩余70%

{{collectdata}}

网友评论0