关闭

【踩过的坑】1.生产与灰度数据缓存;2.Mysql主从不同步;

标签: phpphalcon缓存mysql主从灰度测试
248人阅读 评论(0) 收藏 举报
分类:

背景:php做web开发,MVC,phalcon

1.生产与灰度数据缓存

  • 原因:
    1. service层获取数据,有新增数据字段;
    2. controller层是通过redisCache调用service接口;
    3. redisCache采用redis-file双缓存结构,可能存在情况:redis-cache有效;file-cache有效;直接本地调用service,再写进redis和file-cache中;
    4. 线上有个脚本会每隔1秒通过redisCache调用一次此service接口,并且强制刷新缓存(redis-file);
    5. 灰度环境和生产环境用的是同一套redis,而且必须这样;
    所以,这就造成线上的脚本不断的从线上的service中取得数据,并刷新的redis-file缓存中,从而造成灰度环境直接读了线上缓存,导致灰度代码的service变更没有生效
  • 尝试解决:
    1. 灰度代码:问题controller调用redisCache接口,有强制刷新参数,将其置为false;
    存在问题:这样是恨不正确的做法,会把灰度的service数据强制刷新到redis-file缓存中,从而导致线上缓存出现脏数据,这样后果很严重!!
    2. 灰度代码:问题controller中,直接调用本地的service,不走缓存;
    存在问题:导致灰度环境的所有(此controller)请求直接打在mysql上,从而增加了mysql本身的风险。

(方法1、2,如图)
这里写图片描述

总结:因为灰度环境在公司内网,访问量较小,相比方法1,方法2可以暂时解决灰度测试时的缓存问题。但是仍然存在风险。
(各位看官,有木有更好的解决方案?)


2.Mysql主从不同步

  • 原因:
    1. 环境:php+mysql+phalcon,生产环境,mysql存在主从;
    2. 通过接口传入A、B两组数据并在一个事务中分别插入到A-table、B-table中,提交事务,再更新A刚插入的一个字段;
    3. 更新通过phalcon的findFrist找到数据 刚才插入的数据,更新字段,调用save;
    // 示例代码 ATable,BTable都是继承phalcon的model
    $a = array('id' => 1, 'testa' => 'data');
    $b = array('id' => 1, 'testb' => 'data');

    // 插入数据
    $db->startTrascation();
    $a_obj = new ATable();
    $a_obj->id	  = $a['id'];
    $a_obj->testa = $a['testa'];
    $a_obj->save();
    $b_obj = new BTable();
    $b_obj->id	  = $b['id'];
    $b_obj->testb = $b['testb'];
    $b_obj->save();
    $db->commit();

    // 更新数据,findFirst
    $update_a_obj = ATable::findFirst(array('id=:a_id:', 'bind' => array('id' => $a['id'])));
    $update_a_obj->testa = 'new_data';
    $update_a_obj->save();
    // 这里就会出错,因为这里findFirst走了从库

    // -----------------说明----------------------
    // findFirst走从库是项目本身在model层做的初始化
    public function initialize() {
        parent::initialize();
        $this->setReadConnectionService('db_r');
        $this->setWriteConnectionService('db');
    }
    // setReadConnectionService由phalcon底层提供

可参考phalcon-model源码


总结:1. 永远不要认为主从同步;2.同一个mysql连接,不要出现既用主库、又用从库;
另外,这个更新其实是没必要的,因为代码后边有这样的更新;这次问题再次说明,一定要多沟通,多看代码!!

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

[mysql]一次主从数据不一致的问题解决过程

情况时这样的 昨天晚上主动2个机器都迁移了,然后今天才把主动重新连接上,但是从库的偏移量是从今天当前时刻开始的,也就是说虽然现在主动看似正常,其实是少了昨天的部分数据,由于从库的数据丢失了,早晚...
  • lzz957748332
  • lzz957748332
  • 2015-06-17 11:54
  • 7676

实时刷新缓存-处理mysql主从延迟的一些设计方案

在项目开发当中,经常有这样一种场景,对数据库进行添加、修改、删除操作的应用直接连接master库,只对数据库进行查询的应用,会先建立一个中央缓存,例如redis或者memcache,如果缓存没有命中,...
  • linsongbin1
  • linsongbin1
  • 2016-05-23 09:38
  • 1711

通过MySQL自动同步刷新Redis

在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库。这俩家...
  • Richard_Jason
  • Richard_Jason
  • 2016-10-22 14:58
  • 5612

mysql主从不同步、数据不一致解决办法

第一种:通过sql_slave_skip_counter跳过同步错误,适用于一般异常如插入时主键冲突 (这种情况一般是在从库进行了写操作,错误提示 Last_SQL_Errno: 1062 Last_...
  • nuli888
  • nuli888
  • 2016-08-04 16:41
  • 2286

mysql主从不同步之max_allowed_packet参数设置问题

mysql主从不同步之max_allowed_packet参数设置问题 服务器使用master-slave模式,突然发现slave上不同步master上的数据了。于是在slave上mysql...
  • hybaym
  • hybaym
  • 2013-07-05 18:19
  • 796

MySql主从配置文件问题详解(数据不同步解决方案)

版权声明:本文为博主原创文章,未经博主允许不得转载。 一、问题描述 在mysql主从配置搭建好以后,偶尔会出现从库无法同步主库数据的情况,经过测试,把产生主从数据不同步的集中情况进行了归纳...
  • woshinidedege
  • woshinidedege
  • 2018-01-07 21:03
  • 27

mysql主从数据不同步

今天记录一下如何解决mysql主从数据不同步的情况。 首先,在从库输入命令show slave status;没有任何反应,主库输入命令显示如下图: 然后在从库使用stop slave;命...
  • onlylixiaobei
  • onlylixiaobei
  • 2017-03-26 10:32
  • 150

MySql主从配置文件问题详解(数据不同步解决方案)

一、问题描述在mysql主从配置搭建好以后,偶尔会出现从库无法同步主库数据的情况,经过测试,把产生主从数据不同步的集中情况进行了归纳以及总结,问题如下:1、主库抛出异常, 例如主键冲突等情况,...
  • sky274548769
  • sky274548769
  • 2017-12-05 13:55
  • 104

mysql因为掉电,导致不同步的恢复

有mysql-mm数据库一套,36 和37 ,由于掉电,导致其中一台数据库down机,然后查看数据库日志发现 如果目前以36为主,37为slave 查看37服务器 2015-06-19 10:23...
  • wll_1017
  • wll_1017
  • 2015-06-30 14:43
  • 1071

mysql主从数据库不同步的2种解决方法

今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多。发现很正常。 show master statu...
  • nanyanglu
  • nanyanglu
  • 2016-11-18 19:30
  • 198
    个人资料
    • 访问:2265次
    • 积分:92
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档