Php 我们如何阻止我们的小部件在重载下死亡?
我继承了一个创建音频播放小部件的php/js项目。真正的要求是他们能够在“高峰时间”承受相当重的负荷:当一条新的赛道第一次宣布时,可能会有很多人立刻赶去玩 不幸的是,这些小部件在如此紧张的条件下往往表现得非常糟糕。我们曾经考虑过在SQLite数据库中保存和查找访问密钥可能会由于锁定而导致致命错误。在实验中,我更改了存储在会话变量中的访问密钥,但我现在担心这可能会造成一种新的瓶颈:是否每个请求都必须等待会话释放后才能继续Php 我们如何阻止我们的小部件在重载下死亡?,php,load,session-variables,Php,Load,Session Variables,我继承了一个创建音频播放小部件的php/js项目。真正的要求是他们能够在“高峰时间”承受相当重的负荷:当一条新的赛道第一次宣布时,可能会有很多人立刻赶去玩 不幸的是,这些小部件在如此紧张的条件下往往表现得非常糟糕。我们曾经考虑过在SQLite数据库中保存和查找访问密钥可能会由于锁定而导致致命错误。在实验中,我更改了存储在会话变量中的访问密钥,但我现在担心这可能会造成一种新的瓶颈:是否每个请求都必须等待会话释放后才能继续 我下载了Pylot并做了一些基本的负载测试:不需要很多代理尝试访问同一个小部
我下载了Pylot并做了一些基本的负载测试:不需要很多代理尝试访问同一个小部件就可以使其出现故障或完全不可用,可能需要10或20个。理想情况下,我们希望能够处理比这大得多的流量。我可以明智地采取哪些策略来处理多次请求?基于PHP文件的会话将锁定会话文件,直到脚本退出,或者调用session\u write\u close()。您可以快速执行
会话_start();会话写入关闭()
。$\u会话阵列仍然可用,但任何后续更改都不会写入磁盘,因为PHP已被告知会话已关闭。将会话存储到一个数据库中,该数据库在支持MySQL和InnoDB后端的数据库中写入具体的会话id(主键)时只进行锁定。您可以通过改进它下面的文件系统来进一步优化它
这样做,您可能会遇到比赛条件,但不会遇到锁定。玩得开心 我在相关文件的开头有session\u start(),但还没有任何session\u write\u close()发生。因此,我应该在写入变量之前和之后打开和关闭会话,然后在读取之前和之后再次打开和关闭会话?在调用会话_start()之后,您可以随时进行读取。课后继续阅读。关闭会话不会丢弃$\u会话,它只是告诉PHP立即将其写入磁盘(并且在脚本退出时不再写入)。如果以后在脚本中确实对会话进行了更改,则可以使用_start/_write\u close对围绕关键部分,或者在脚本退出之前只执行一次-如果不必这样做,则没有必要执行多个打开/关闭循环。