高并发高性能场景(抢购、秒杀、抢票、限时竞答)解决方案

技术指标:

PV(Page View, 页面浏览量)在千万级别
QPS(Query Per Second, 每秒处理请求数)在百万级别
数据量在千亿级别
接口响应速度不能超过150毫秒
用户提交请求到页面呈现不能超过3秒

架构设计:
1. 从LAMP架构转为面向服务架构(服务可以用多种开发语言实现,不受一种开发语言限制)
2. 对海量数据做Sharding分片,分库分表
3. 从有状态服务改为无状态接口服务(便于分布式部署)
4. 精心设计的数据层(存储、压缩、索引)
5. 分布式系统最终瓶颈(CPU、内存、存储、网络)
6. 日志服务化,每个服务可以用不同的开发语言,考虑多种开发语言的兼容性,定义标准化的日志是把分布在不同机器上的日志关联起来的唯一且有效的办法
7. 对请求入口做负载均衡后再到达应用层

页面优化:
1. 静态文件压缩,优化HTTP请求连接数,以减少宽带需求,让页面更快加载出来
2. 静态资源做CDN部署
3. 前后端做数据分离,让搜索服务解耦,在高并发情况下更灵活做负载均衡
4. 后端数据大部分来自缓存,加载快,给用户更快的体验

数据层架构优化:
1. 商品详情、商品库存等,可以放在redis缓存,避免频繁去数据库取数据,提高商品信息的读能力
2. 数据库读写分离,分库分表实现负载均衡
3. 如果数据库有查询缓存功能,则使用数据库查询缓存功能(Query Cache功能,如果使用,记得定时清理碎片:Flush Query Cache)
4. 其他数据库细节优化(参考其他网络文章)

系统层优化:
1. 修改linux内核参数,适应高并发场景(具体参考网络相关文章)

业务优化:
秒杀和抢购收到了“海量”的请求,实际上里面的水分是很大的。有很多是第三方抢购辅助工具发送的请求,这些都是属于作弊的手段。

作弊方法和防御方法:
1. 作弊行为:同一个帐号,一次性发出多个请求
防御方法:在程序入口处,1个帐号只允许接收一个请求,其他请求过滤。或者,自己实现一个服务,将同一个账号的请求放入一个队列中,处理完一个,再处理下一个。

2. 多个账号,一次性发送多个请求
很多帐号注册功能,在发展早期是没有任何限制的,很容易就能注册很多个帐号。因此,一些特殊的工作室会编写自动注册脚本,积累一大批“僵尸帐号”(微博中的僵尸粉),数量庞大,专门做各种“刷”的行为,如抢购、刷票、转发抽奖等。
防御方法:
1).使用创新的验证码,比如回答问题或者执行某些简单的操作,把真实的用户和辅助工具区分来开。
2).直接禁止IP,虽然可能导致误伤,但是在实际场景中可以获得很好的效果。

3. 多个帐号,多个IP发送不同请求
“灰色工作室”发现单机IP请求频率被控制后,他们有的新的进攻方案:不断变换IP。(IP来源有随机代理IP、被植入木马的肉鸡,数量庞大等)
防御方法:这种场景下的请求,已经很难分辨出真实用户或辅助工具。通常只能通过设置业务门槛来限制这种请求,或者通过帐号行为的“数据挖掘”来提前清理它们。
僵尸帐号有一些共同的特征,就是帐号很可能属于同一号码段,甚至是连号,活跃度不高,等级低,资料不全等。根据这些特点,适当设置参与门槛,例如限制参与的帐号等级等。通过这些方法,也可以过滤掉一部分僵尸帐号。
(黄牛账号也是有一些共同特征的,例如经常抢票和退票,节假日异常活跃等)

结语:我们的挑战都一样,就是数据量,bigger and bigger,用户体验是faster and faster,业务是more and more。

参考文章:
http://www.cnblogs.com/zhenghui317/p/5577345.html
http://mt.sohu.com/it/d20170403/131798804_255931.shtml
http://blog.csdn.net/xiaemperor/article/details/38234979
http://www.cnblogs.com/dinglang/p/6133501.html
http://blog.csdn.net/qq_34341290/article/details/53316173


版权声明:本文采用署名-非商业性使用-相同方式共享(CC BY-NC-SA 3.0 CN)国际许可协议进行许可,转载请注明作者及出处。
本文标题:高并发高性能场景(抢购、秒杀、抢票、限时竞答)解决方案
本文链接:http://www.cnblogs.com/sochishun/p/7003190.html
本文作者:SoChishun (邮箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)
发表日期:2017年6月13日

时间: 2024-10-14 04:34:55

高并发高性能场景(抢购、秒杀、抢票、限时竞答)解决方案的相关文章

39套精品Java从入门到架构师|高并发|高性能|高可用|分布式|集群|电商缓存|性能调优|设计项目实战|视频教程

精品Java高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,大型分布式电商项目实战视频教程   视频课程包含: 39套Java精品高级课架构课包含:java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,架构设计,web安全,高并发,高性能,高可用,高可扩展,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,工作流,程序调优,负载均衡,Solr

redis实现高并发下的抢购/秒杀功能

1, http://www.cnblogs.com/phpper/p/6716248.html https://www.cnblogs.com/phpper/p/7085663.html https://www.cnblogs.com/TankXiao/p/4045439.html 之前写过一篇文章,高并发的解决思路(点此进入查看),今天再次抽空整理下实际场景中的具体代码逻辑实现吧:抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢? 常规写法:

Java高并发高性能分布式框架从无到有微服务架构设计

微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API).每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境.类生产环境等.另外,应尽量避免统一的.集中式的服务管理

Java从入门到架构师|高并发|高性能|高可用|分布式|性能调优|设计模式|大型电商项目

没有设计的思想,你就不能成为一名架构师.架构师是一个能撸的了一手好代码,画的了一个漂亮的UML/原型,写的了一篇技术文档,更加能解决好项目关键技术的综合人才.架构师=前端工程师+后端程序员+系统分析师+关键技术解决+各种技术搭配+设计模式+部署调优+其他,可见架构师是多面手,在项目当中起到连接管理与项目成员的重要角色.因此,在通往大神级的架构师的道路上,你需要懂需求.设计.代码.部署.架构.服务器.运维.调优等等. 简单系统架构图 一个能担负起企业级应用的架构师,脑海里常出现的词会是这些:负载均

PHP秒杀系统 高并发高性能的极致挑战

第1章 课程介绍秒杀系统在各种网站和应用中经常会用到.本课程从基本的系统设计和基础功能开始教导大家用PHP来设计和实现秒杀系统,并且为海量并发提供更高级的技术方案和实现手段.1-1 课程导学1-2 课程目标1-3 秒杀系统特点1-4 课程技术分析 第2章 系统技术选型分析本章节需要大家掌握基础的LNMP平台的开发,提供基础的数据封装类,让后续的开发得心应手.我们会讲解到系统环境的技术选型,我们采用的数据库是Mysql,还用到Redis来作为高性能缓存, 为了让大家不拘泥于框架的选择,巩固基础知识

PHP秒杀系统 高并发高性能的极致挑战 视频教程

第1章 课程介绍 1-1 课程导学 1-2 课程目标 1-3 秒杀系统特点 1-4 课程技术分析第2章 系统环境搭建 2-1 技术选型分析之基础服务 2-2 技术选型分析之CDN 2-3 技术选型分析之负载均衡 2-4 开发环境准备 2-5 MySQL封装类 2-6 Redis封装类 2-7 调试封装类(上)有点小声 2-8 调试封装类(下)第3章 系统设计 3-1 系统设计之项目基本功能 3-2 系统设计之项目流程 3-3 数据库设计之活动信息表 3-4 数据库设计之商品信息表 3-5 数据库

Orleans初战(用分布式解决高并发购物场景)

首先我们来定义这样一个场景: 商店有10种商品,每种商品有100件库存.现在有20万人来抢购这些商品. OK,那么问题来了.要怎样保证商品不会超卖……(要知道可能会出现20个人同时买A商品(或者更糟糕,毕竟后边20万的大军,随时可能把商店变成废墟),怎样保证A商品的数量绝对安全) 按照大部分系统的解决方案是这样的: 收到请求放入队列,然后对队列顺序处理,这样就避免了系统被瞬间挤爆而且不会超卖. 这种处理方式装换成现实场景是这样的:客户到商店先领号,不管买什么商品,都要排队,然后一个一个买,直到所

架构师项目实战高并发高性能

架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又 要 藐 视 它.先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右.对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写的业务量很简单 .为什么我们又不能说轻视它?第一,

支持高并发高性能 通用缓存容器 浓缩的精华 代码优化版

————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 1 public static class CustomCache 2 { 3 private static List<ConcurrentDictionary<string, DataModel>> cacheContainer = null;//缓存容器