大流量下的高效管控

 在“秒杀”场景中,海量用户带来的流量高峰,会给服务端带来读写性能问题,数据库锁,以及服务器资源占用问题。

​ “秒杀”场景往往希望有大量用户关注活动,但是用户真正下单时,有不能讲这些流量全部放过。所以需要设计一套高效的管控方案,有效的控制请求流量以及过滤掉没必要的流量。

流量分层

​ 对于响应速度,将数据放在静态缓存中是一个不错的处理。但是,业务特性决定了不能永远将数据放在静态缓存中。所以一般会对流量进行分层控制。

一般分为以下几个层级:CDN,Nginx,后端服务,数据库。

注意:在部分的场景中,用户的浏览器也可以进行以及数据魂村:浏览器是最接近客户的,对于时效较长且体积不大的静态数据,可以将其放入浏览器的本地缓存中。(吐槽一下,公司刚招的前端,不会这个。。。)

流量分层控制

  1. CDN层控制

    ​ 由动静分离技术可以想到:应提前生成尽可能多的数据,然后将其放入CDN节点缓存中。如果大部分的流量都在这一层获取数据,那到达后端的流量就会减少很多。

  2. 反向代理层控制(nginx)

    ​ “页面静态化”技术可以加速动态数据的获取,提前将动态数据生成好,然后对其进行静态化处理。

    ​ 例如:我最常用的,通过后端服务Job的方式定时提前生成好前端需要的静态数据,然后将其发送到对应的服务上,如果反向代理服务器很多的情况下,可以用专门的内容分发服务去分发给所有的反向代理服务器。

    注意:分发静态数据时,可以根据具体的业务场景进行定时更新。例如:“秒杀”场景中关于商品详细信息的更新。除分发外,还可以利用Nginx 的缓存配置功能配置后端接口获取热点数据进行缓存。(我暂时还没有这么用过)

    ​ “秒杀”活动的倒计时可以直接使用Nginx来实现,利用nginx-lua插件,使用Lua脚本获取当前Nginx服务器的时间来计算倒计时。另外库存数据也可以通过Nginx直接访问分布式缓存来获取。

    ​ 除此之外,秒杀活动中最常见的还有部分人利用“秒杀器”进行不公平竞争,对于这种恶意请求,最好有一套机制能够提前感知,将其封存。可以在Nginx层中控制,也可以在Nginx中配置用户的访问频率(例如每分钟最多10次),还可以使用Lua脚本编写一些简单的业务逻辑接口,例如,通过调用接口直接封掉IP地址。

    注意:此处还可以利用大数据的日志手机组件(比如Flume)从Nginx上采集日志,将采集的日志写入存储系统中,然后风控平台对存储系统中的日志进行锋线分析。对于有风险的请求,风控平台可以直接调用Nginx中的Lua脚本接口对其进行封停处理。

  3. 后端服务层流量控制

    对于后端服务的流量控制,尽量做到以下几点:

    • 程序开发上,代码独立,不要与平台其他项目合在一起

    • 在部署时,应用独立部署,分散流量,避免不合适的流量影响主体业务

    • 使用独立域名,或者按照一定的URL规则在反向代理层进行路由

    • 做好系统保护以及限流,减少不必要的流量

      当“请求数”明显大于“系统能够处理的最大请求数”时,可以直接拒绝多余的流量,提示用户活动已结束。

  4. 数据库层的流量控制

    写数据库的流量就是真正下单成功的流量,需要扣减库存的动作,也有几点需要注意:

    • 如果不是临时活动,建议使用独立的数据库作为秒杀活动的数据库
    • 将数据库配置成读写分离
    • 尝试去除行锁

    对于数据库行锁的优化,可以通过将商品进行拆分来实现,对于单一的秒杀活动效果显著,如下所示:

    商品ID 商品名称 库存数量
    10000 某品牌商品 3

    拆分成:

    拆分ID 商品ID 库存数量
    10000A1 10000 1
    10000A2 10000 1
    10000A3 10000 1

大流量下的流量高效管控相关推荐

  1. 加密流量也能识别与管控,绿网借至强AI加速能力打造高效智能DPI方案

    刚刚发布的第50次 <中国互联网络发展状况统计报告> 显示,中国网民已超10亿,互联网普及率接近75%,其不仅推动了数字经济的蓬勃发展,而且在满足人民日益增长的美好生活需要等方面都发挥了重 ...

  2. php 环境优化,Nginx与PHP-fpm环境在大流量下的优化配置

    使用Nginx搭配PHP已有7年的这份经历让我们学会如何为高流量站点优化NGINX和PHP-fpm配置. 以下正是这方面的一些提示和建议: 1. 将TCP切换为UNIX域套接字 UNIX域套接字相比T ...

  3. 国内首篇云厂商 Serverless 论文入选全球顶会:突发流量下,如何加速容器启动?

    简介:USENIX ATC (USENIX Annual Technical Conference) 学术会议是计算机系统领域的顶级会议,入选中国计算机协会(CCF)推荐 A 类国际会议列表:本次会议 ...

  4. 大促背后的流量利器|手淘push升级 比你更懂你

    导读:过去的很长一段时间内,由于电商的强运营特性,手淘 App 的 Push 消息大部分时候是作为一个活动通知的通道,对重要活动进行通投引流.然而在竞争环境更加激烈和用户渗透日趋饱和的今天,具备更加精 ...

  5. 双11万亿流量下的分布式缓存

    摘要: 12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的<2017阿里巴巴双11技术十二讲>顺利结束,集中为大家分享了2017双11背后的黑科技.本文是<双11万亿流量下的 ...

  6. 十亿级流量下,我与Redis时延小突刺的战斗史

    作者:vivo互联网服务器团队-Wang Shaodong 一.背景 某一日收到上游调用方的反馈,提供的某一个Dubbo接口,每天在固定的时间点被短时间熔断,抛出的异常信息为提供方dubbo线程池被耗 ...

  7. Linux下网络流量实时监控工具 大全

    Linux下网络流量实时监控工具 大全 在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且 有时候打开监控 ...

  8. redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...

    欢迎关注头条号:石杉的架构笔记 周一至周五早八点半!精品技术文章准时送上!!! 目录 一.前情提示 二.什么是数据一致性? 三.一个数据计算链路的梳理 四.数据计算链路的bug 五.电商库存数据的不一 ...

  9. 带你遍历用户生命价值与流失挽救(上) : 流量下的价值套路

    本文由作者 松子无核 于社区发布 这是一篇讲述用户生命周期与流失挽救方面知识的文章,穿插了大量的从BI角度对业务进行数据分析的方法. 涉及到的知识点有:用户生命周期.流量方向的分析方法论.用户分群.用 ...

最新文章

  1. Nxt节点安装指南之RaspberryPi树莓派版
  2. 用户通过WEB方式更改AD域帐户密码
  3. Spring配置汇总
  4. 利用dispatch_once创建单例
  5. CAD答辩周 -- 与自己相关的几场
  6. java线程工作内存在栈中吗_JVM常见面试题解析
  7. mysql rr gap nextkey_mysql中的各种锁把我搞糊涂啦~
  8. ReplicaStateMachine分析
  9. android平台代号、版本、API 级别和 NDK 版本
  10. 【XML】我所知道的XML
  11. ACCESS常用数字类型的说明和取值范围
  12. Oracle SQL自带函数整理
  13. 机器人学导论原书第三版
  14. PS在园林计算机辅助设计中有哪些应用,风景园林计算机辅助设计(谷永丽)(第2版)...
  15. 【宋红康 MySQL数据库 】【高级篇】【10】索引的创建与删除_MySQL8.0的索引新特性
  16. java.sql.BatchUpdateException: Data truncation: Division by 0
  17. 华为服务器系统日志,服务器操作系统日志
  18. 【开发工具】Office Tool Plus 安装 Office
  19. 控制输入框弹出弹窗 和不弹出窗口
  20. 第四次作业 ——吴靖瑜

热门文章

  1. 栈和队列:魔王语言解释
  2. 网络编程全解(Java)
  3. 组态王客户端显示服务器画面,组态王客户端显示服务器画面
  4. 基于Reworld、Roblox的团队协作
  5. 0611课的预习任务 + 0612课堂笔记
  6. 智能AI电话机器人系统
  7. 1688平台商品详情接口采集方法
  8. java传真发送,用Java发送传真解决之道
  9. 低功耗基础概念——ICG(Intergrated Clock Gating)
  10. Markdown语法(常用语法,快速掌握)