Php 循环连接到mysql
我想在我的应用程序中,对2台mysql服务器进行负载平衡查询 最好的方法是什么,以便每个查询都转到不同的db服务器 我正在考虑在每次连接时增加一个全局计数器,用我的db服务器修改计数器以获得我应该连接的主机。但是,上面的过程需要是原子的,以便没有两个请求看到相同的计数器 我该怎么做呢?使用信号量锁,mysql的get_lock() 伪码Php 循环连接到mysql,php,mysql,Php,Mysql,我想在我的应用程序中,对2台mysql服务器进行负载平衡查询 最好的方法是什么,以便每个查询都转到不同的db服务器 我正在考虑在每次连接时增加一个全局计数器,用我的db服务器修改计数器以获得我应该连接的主机。但是,上面的过程需要是原子的,以便没有两个请求看到相同的计数器 我该怎么做呢?使用信号量锁,mysql的get_lock() 伪码 counter = 0 hosts = array('192.168.1.1:3306', '192.168.1.2:3306') //the below c
counter = 0
hosts = array('192.168.1.1:3306', '192.168.1.2:3306')
//the below code needs to be atomic
GET A GLOBAL LOCK
counter = counter+1
RELEASE THE LOCK
host = hosts[counter % len(hosts)]
谢谢最好的方法是什么
使用。。。它将自动补偿停机的服务器。此外,您还可以编写规则,说明每个查询的位置(可以是循环选择,也可以是特定的服务器,以获得更好的缓存亲和力)。另外,它可以自动将所有写入操作定向到主服务器
我不会尝试在您的应用程序中实现它。原因是,跨多个实例处理全局锁要困难得多,而且故障检测也很难不造成很大的性能损失……为什么不采用rand方法呢
$this->read_host = $this->prod_slaves_array[rand(0,(count($this->prod_slaves_array)-1))];
优点是它是无锁的,虽然它不是完全50/50,但它真的需要吗?如果我是对的,Hi Mysql Proxy仍然是beta版。不管怎样,我需要它在应用程序逻辑中,技术上它是alpha。为什么在应用程序逻辑中需要它?使用代理不会对您有什么影响?这是为了测试目的。还有HaProxy可以完成这项工作,但现在我只想在应用程序logicWell中测试它,正如我所说,它将涉及处理所有边缘案例。我个人会使用一个锁文件(使用)来控制计数器(锁定它,读取并递增计数器,写入递增的数字,释放锁)。但请注意,这可能是危险的,因为它是应用程序的瓶颈。。。为什么它是原子的如此重要?谁在乎两个连续进程是否命中同一个db服务器?只要平均情况是50对50,这真的重要吗?