我们怎样才能阻止我们的小工具在重负荷下死亡?

时间:2011-09-14 16:19:12

标签: php load session-variables

我继承了一个创建音频播放小部件的php / js项目。他们的要求实际上是能够在“高峰时段”承受一些相当沉重的负荷:当首次宣布新赛道时,可能会有很多人急于一次性发挥它。

不幸的是,在这种压力条件下,小工具往往会非常糟糕。我们曾考虑过在SQLite数据库中保存和查找访问密钥可能会因锁定而导致致命错误。实验上,我将访问密钥更改为存储在会话变量中,但我现在担心这可能只会产生一种新的瓶颈:每个请求都必须等待会话释放才能继续吗?

我下载了Pylot并进行了一些基本的负载测试:它不需要许多代理尝试访问同一个小部件以使其出现故障或完全无法使用,可能是10或20.理想情况下,我们希望能够处理比这更大的流量。我能明智地采用哪些策略来提出多次请求?

2 个答案:

答案 0 :(得分:1)

基于PHP文件的会话将锁定会话文件,直到脚本退出,或者调用session_write_close()。你可以快速session_start(); session_write_close()。 $ _SESSION数组仍然可用,但任何后续更改都不会写入磁盘,因为PHP已被告知会话已关闭。

答案 1 :(得分:0)

将会话存储到一个数据库中,该数据库仅在支持MVCC的数据库(如MySQL和InnoDB后端)中的具体会话ID(主键)上进行锁定。您可以通过改进它下面的文件系统来进一步优化它。

这样做可能会遇到竞争条件但不会进入锁定状态。玩得开心!