教你如何用 Macbook Air 支撑 20w 并发的抢购

方法一(较猥琐):

  • 购买 Macbook Air(必须)
  • 准备好瓜子、茶水、鸡蛋、板凳(必须)
  • 编写一个 json 文件,内容如下:
{"success":false,"message":"u6ca1u62a2u5230uff0cu8bf7u518du63a5u518du5389u54e6~"}
  • 到 Ari papapa cloud, seven cow 等各种云上注册试用帐号,越多越好,并上传准备好的 json 文件,抢购页面用到的静态文件也记得放上去
  • 使用世界上最好的语言写抢购逻辑,不用加缓存,直接访问数据库就好
  • 在 Macbook Air 上搭建 nginx + php-fpm,调整 php-fpm worker 数为 1,防止占用过多系统资源;调大 nginx worker_connections 数,修改所有报错的 HTTP 返回值为 200,内容为第三步的 json,最后部署上抢购代码
  • 将抢购的 api 域名指向各种云及 Macbook Air,并使用 CDN 等各种高端技术进行分流,确保 99.9% 的流量分到各种云上,server(Macbook Air) 上只承担很小很小的流量。如果不会用 CDN 之类的,也可以弄很多很多二级域名,比如 api1.xxx.com api2.xxx.com 这样的,指向各种各样的云,然后将抢购所用的域名 CNAME 过去。这样显得域名很多,机器也很多的样子
  • 重点来了:抢购开始,在 Air 上打开 flash、视频、游戏等,开的程序越多越好,制造服务器很忙,抢购很紧张的假象。搬来茶水、瓜子和板凳开始看电影、玩游戏
  • 抢购结束,把鸡蛋打碎倒在 Air 上,开始去各个云上删除或更换 json 文件
  • 发公关文,说抢购圆满结束,服务器热得都快起火了,并附上被煎熟的鸡蛋截图,换来各种惊叹

方法二(较优雅): Read More

PDO: bindParam versus bindValue

绑定一个PHP变量到用作预处理的SQL语句中的对应命名占位符或问号占位符。 不同于 PDOStatement::bindValue() ,此变量作为引用被绑定,并只在 PDOStatement::execute() 被调用的时候才取其值。

http://php.net/manual/zh/pdostatement.bindparam.php

[With bindParam] Unlike PDOStatement::bindValue(), the variable is bound as a reference and will only be evaluated at the time that PDOStatement::execute() is called.

So, for example:

$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindParam(':sex', $sex); // use bindParam to bind the variable $sex = 'female'; $s->execute(); // executed with WHERE sex = 'female' Read More