并发是什么意思呢?通俗点说,就是网站或者应用每秒能够承受住多少个用户同时访问。在这个大数据时代,每天产生的数据量和流量比以往任何时候都多,既带来了机遇,但是同时也带来了挑战。在高并发场景下,往往会产生许多不正常的情况。最常见的应该是抢票和抽奖了,比如春晚那天支付宝的“咻一咻”,据官方统计的数据,当晚一共有3245亿的咻一咻次数,这背后需要有大数据和云计算技术作为支撑,也需要有一套成熟而完整的解决方案。
记得在segmentfault论坛上看到一个帖子,有个程序员给我们描述了他遇到的问题,大致是:在公司抽奖的时候,有人恶意进行抽奖,每秒发起上W的请求,导致重复抽奖的事情发生。你需要知道的是,mysql比你想象的慢得多,起码相比于代码或者缓存来说,它是最慢的,往往也是web应用的瓶颈所在。那位盆友所描述就是出在数据库这里,假设只剩5张票,但是同时,注意是同时,当运行到查询票数的时候,返回的余量都是为5。然后系统为这10个人都分配了一张票,后果是什么呢?那就是出现了重复抢到票的情况。如果数据库有对用户进行唯一id的限制,那还好,不过就可能出现余票为-5的情况。如果票的字段有限制为非负数,那也还好。不过,如果你是那五个人中的一个,抢票的时候,告诉你抢成功了,结果过了几秒,系统又提示你没有抢到票。这时候各种猜测难免会有,熟不知是系统给你开了个玩笑。
由此,提高网站高并发的重要性可见一斑。 业内对于如何提高网站并发虽然众口难调,但寻其共性,无非就是软件和硬件上提升。
下面是我接下来一个月准备写给大家的如何提高网站高并发系列教程的大致提纲。这样写的时候有个大致的思路,当然实际过程中,也可能增删些东西,尽可能集百家之大成为一体吧。(以php为例)
一、软件上的优化。
前后端代码优化
缓存大法。(redis+memcached)
短板效应之mysql数据库。(读写分离,主从复制,索引,乐观锁等)
入坑nginx(反向代理,静态页面缓存)
简单的负载均衡和LVS(集群)
图片服务器
消息队列
HHVM和opcache
二、硬件上的优化
CPU
内存
带宽