phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序php
用命名空间区分不一样的数据库实例,对应代码结构上是不一样的目录区分,在同一目录下基类负责初始化链接。链接来自初始化时注入的多个db服务node
隐规则:mysql
initialize()在每一个请求期间只会调用一次sql
为每一个 new 建立的实例执行初始化任务使用onConstruct()数据库
namespace Company\Models\Notification;
1 /** 2 * Class BaseModel 3 * 4 * beforeSave()和afterFetch()成对使用,用于读写数据时自动转化数据。 5 * 例如自动执行serialize unSerialize 6 * 7 * save()发生时事件调用顺序是 8 * initialize, 9 * onConstruct, 10 * beforeValidation, 11 * beforeValidationOnCreate, 12 * afterValidationOnCreate, 13 * afterValidation, 14 * beforeSave, 15 * beforeCreate, 16 * afterCreate, 17 * afterSave, 18 * 19 * @package Company\Models\Notification 20 */ 21 class BaseModel extends \Phalcon\Mvc\Model 22 { 23 24 /** 25 * - initialize()在每一个请求期间只会调用一次 26 * - 子类必需调用父类方法 27 * - 为每一个 new 建立的实例执行初始化任务使用onConstruct() 28 */ 29 public function initialize() 30 { 31 $this->setConnectionService('db_notification'); 32 33 //$this->setConnectionService('node1'); 34 //$this->setConnectionService('node2'); 35 // 36 //真实场景可能使用mysqlnd_ms扩展或者haproxy 37 //仅演示读负载均衡一种思路 38 //$dbSlave = ['node1', 'node2', 'node3']; 39 //$key = array_rand($dbSlave); 40 //$db = $dbSlave[$key]; 41 //$this->setReadConnectionService($db); 42 // 43 // 44 //$this->setReadConnectionService('dbRead'); 45 //$this->setWriteConnectionService('dbWrite'); 46 } 47 }