如何用PHP旋转服务器?

时间:2014-05-18 06:53:23

标签: php

我在几个服务器上运行相同的后端应用程序,并且可以从它们请求数据的PHP前端。因此,当用户来并想要请求数据时,PHP必须从一个后端服务器请求它,然后进行一些计算和填充。

目前我选择后端服务器以这种方式请求数据:

    $servers = array(
        array('IP', 'PORT'),
        array('IP', 'PORT'),
        array('IP', 'PORT'),
        array('IP', 'PORT'),
        array('IP', 'PORT'),
        array('IP', 'PORT'),
        array('IP', 'PORT'),
        array('IP', 'PORT')
    );
    $server = $servers[mt_rand(0,count($servers)-1)];

但现在这并没有完全旋转,它是相当随机的,不幸的条纹可能导致一个服务器过载而另一个服务器空转,我宁愿让它们正确旋转以便始终大致使用它们在相同的工作量。这样也可以更轻松地分析用户流并查看何时需要新的后端服务器。

在没有随机化的情况下旋转服务器的最佳性能是什么?我应该制作一个文本文件,然后调用它" rotation.txt"并简单地放入上次请求的$ servers索引,然后下一次($lastUsedIndex + 1) % count($servers)?这将包括很多将文件写入磁盘的网站,该网站通常有数千个并发用户。制作MySQL表rotation并插入最后使用的$ servers索引会更快吗?或者是否有一种我现在无法想到的完全不同的方式?

编辑:

PHP将以json的形式请求数据:$fp = @fsockopen($server[0], $server[1], $errstr, $errno, 5);

1 个答案:

答案 0 :(得分:1)

我不愿意发布这个问题的答案,因为有很多可能的答案,所有这些答案都或多或少都有效。

但是,您是否考虑过要做的事情(保持使用旋转增量)但不是将其写入数据库或磁盘文件,而是将其存储在共享内存中?这应该非常快,并且可以跨进程访问。然后,您可以按进程依次命中每个服务器。

如果您的PHP没有使用任何形式的shared memory进行编译并且无法重新编译,那么请查看将“文件”写入/dev/shm(无论如何在Linux上),这是一个基于内存的伪文件系统。

警告:

  • 瓶颈可能就是内存段本身。如果您的请求相对较低且处理需要花费时间,(考虑到您的单个前端和多个后端可能是正确的),这可能是您的可能吗?

  • 如果不使用memcache之类的内容,它将无法扩展到多个前端服务器。

相关问题