如何在CakePHP中进行主/从切换,负载均衡

时间:2010-08-26 12:03:35

标签: cakephp implementation load-balancing cakephp-1.2 master-slave

我需要在现有站点中实现主/从/负载平衡。

有没有人将这些(或其他)实现用于主/从切换?

我找到的关于如何在Cake中实现主/从的资源:。

我得到的数字1)大部分时间都在工作,但是它有一些连接有问题。

我欢迎主/从实施的新来源,黑客或模组,因为现在我无法理解它。

(我使用atm的蛋糕版是1.2) (我将在CakePHP的谷歌小组http://groups.google.co.uk/group/cake-php/browse_thread/thread/4b77af429759e08f上发布此消息)

3 个答案:

答案 0 :(得分:1)

在几个节点上看看本教程中有关主/从的内容。

http://www.howtoforge.com/setting-up-master-master-replication-on-four-nodes-with-mysql-5-on-debian-etch

这可以帮助您更好地理解。

答案 1 :(得分:0)

据我所知,如果您的模型与不使用相同行为的模型有关系,则会发生这种情况。 如果这个假设是错误的,请纠正我。

所有模型都有元数据,CakePHP使用数据库上的DESCRIBE查询累积,如果此数据不存在,您的连接将被破坏。此元数据是特定于数据库配置的。

CakePHP使用此元数据填充$ this-> _schema属性。 SQL连接使用来自$ this-> _schema属性的数据构建,我想这就是您的问题所在,此MasterSlave交换机行为引入的数据库没有与模型关联的表的任何模型元数据。

解决方案是更新您的行为,使其仅在读取和写入时有选择地切换。 将此行为添加到所有相关模型。即任何使用hasOne,hasMany等相关的模型也应该使用相同的行为。

本质上,所有相关的模型都应该写入同一个数据库并从同一个数据库中读取。

此解决方案的奖励是您将共享相同的数据库连接。

答案 2 :(得分:0)

您的网络应用似乎是多层的,您需要单独扩展每个层:

  • Web层,即CakePHP应用程序可以分布在多个Web服务器上。这很容易做到,因为代码本身是幂等的。您应该研究如何对Apache服务器进行负载均衡,这不是什么大问题。 Web服务器的吞吐量非常高,因此如果您遇到瓶颈,则可能会改进代码/缓存策略。 (例如,使用memcache而不是文件缓存。)如果依赖于文件系统(例如上传),这会变得有点复杂,因为它必须分布或分离。

  • 数据层。有各种教程如何扩展/加载已经由其他人链接的MySQL。

虽然我首先建议做基准测试。 (过早优化是所有邪恶的根源。)您必须首先知道瓶颈在哪里,吞吐量应该扩展到哪里。通常,您可以优先考虑查询,缓存或使事物可缓存。您还必须明确目标:可扩展性?容错?