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

高并发抽奖系统优化方案

在这里插入图片描述

引子

最近接触了一个抽奖的项目,由于用户量比较大,而且第三方提供的认证接口并发量有限,为了保证服务的高可用性,所以对高并限制发有一定的要求。经过一系列研究和讨论,做出了以下一些优化方案。

需求分析

  • 根据用户量和日活情况,估算出并发值在100左右,所以该项目的并发量就当在100上以,初期目标定为600-800

  • 特定页面的并发量不超过300,为了保证不对第三方服务造成访问压力,特将并发控制在150以内

  • 由于奖品数量有限,故得奖时,需要进行并发写入控制,防止奖品超发

实施步骤

前端方面

减少客户端访问次数。
  • 使用CDN对网站的静态资源进行优化,可以答复静态请求次数。

  • 抽奖结果一次性生成。

每个用户有有一次抽奖机会,但只能有一次中奖,其他两次随机弹出推荐产品。所以有一次抽奖中,只需要访问一次服务器的抽奖接口。

  • 使用本地缓存。

将抽奖次数,是否中奖等信息记录在本地,避免超次抽奖和多余的服务器请求。例如,一旦该用户中过将,就不需要再访问服务器抽奖接口。

服务端优化

使用缓存
  • 使用服务端缓存。

将页面和相关数据查询进行缓存,减少数据库访问次数。

部分业务逻辑异步处理

对于不需要实时处理的业务逻辑,压入队列,实现异步处理。例如优惠券的发放。

Nginx 优化
  • 提高 Nginx 处理性能

使用 worker_processesworker_cpu_affinityworker_rlimit_nofileworker_connectionsopen_file_cache等命令,提高nginx的处理性能。

  • Nginx 并发控制。

先看实例,如下:

    limit_req_zone $binary_remote_addr zone=req_ip:10m rate=40r/s; // #每个IP平均处理的请求频率为每秒40次limit_conn_zone $binary_remote_addr zone=conn_ip:10m;limit_conn_zone $server_name zone=conn_server:10m;limit_conn conn_ip 5; // #限制某个IP来源的连接并发数,此处为5个limit_conn conn_server 600; //#限制某个虚拟服务器的总连接数,此处为600个limit_req zone=req_ip burst=5; //小为5的缓冲区, 当有大量请求过来时,超过了访问频次限制的请求可以先放到这个缓冲区内

在这里,限制了每个IP的请求频率,限制了同一IP的并发连接数,限制了服务器的总连接数

  • 使用 Docker 实现负载均衡

配置 nginx, 使用负载均衡

    upstream icontact_pool {server  web:9000    weight=5    max_fails=3 fail_timeout=10s;server  web2:9000   weight=5    max_fails=3 fail_timeout=10s;server  web3:9000   weight=5    max_fails=3 fail_timeout=10s;...}

如上,通过 Docker 启动多个处理请求的服务容器,在 nginx 中配置每个服务的地址,权重等信息,扩大请求的处理能力

  • 其他服务器环境优化

例如,增加服务器配置(CPU,内存,带宽),如果是PHP, 开启 opcache, 并使用较新版本(php7+), 各种依赖尽量使用最新版本。

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1

参考资料

  • Nginx限制IP并发连接数和请求数的研究

相关文章:

  • 守护生命之光:进行性核上性麻痹的全方位健康护理指南
  • Vue事件处理
  • cf每日刷题
  • 【MySQL】索引下推减少回表次数
  • Vue 核心技术与实战day07
  • 电脑驱动程序更新工具, 3DP Chip 中文绿色版,一键更新驱动!
  • MAC上怎么进入隐藏目录
  • 设计模式——系统数据建模设计
  • 23种设计模式概览
  • LeetCode Hot100刷题——划分字母区间
  • C++学习-入门到精通【11】输入/输出流的深入剖析
  • 5.2 初识Spark Streaming
  • day15 leetcode-hot100-28(链表7)
  • LeetCode hot100-9
  • 网络系统中安全漏洞扫描为何重要?扫描啥?咋扫描?
  • qwen 2.5 并行计算机制:依靠 PyTorch 和 Transformers 库的分布式能力
  • MySQL锁机制
  • 【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市
  • QT入门学习
  • 4.2.4 Spark SQL 数据写入模式
  • 绍兴网站建设08keji/长春网站优化咨询
  • wordpress点击按钮复制文字内容/班级优化大师功能介绍
  • 有哪些免费建站的网站/广东网络seo推广公司
  • 建一个公司需要多少钱?/搜索引擎seo关键词优化效果
  • 邢台专业网站建设公司推荐/开封网站快速排名优化
  • 网站更新内容怎么做/手游推广渠道和推广方式