前阵子因为受到攻击的问题,博客虽没大碍,但资源消耗大增。某日查看账单时无意中发现大量的资源消耗在了MYSQL查询上,而且全部都是价格昂贵的主库查询,价格低廉的从库查询次数居然是零!
印象中自己用过的WordPress for SAE版本都有标注支持主从分离,以便降低资源消耗。平常消耗不高的时候我从未留意数据查询这块是不是真的主从分离了,到这非常时期消耗大增时,矛盾才得以暴露,原来我一直都在用的价格高昂的主库读写数据,低廉经济的从库从未享受过……这是怎么回事?
虽然防火墙替我当掉了一部分攻击,资源消耗也降到了之前合理的水平,但博客本身不赚钱,昂贵的主数据库终究不能一直用下去,能省则省,我抽空进行了代码排查。首先从最基础的“wp-config.php”配置文件开始,发现所有的WordPress for SAE版本对应的配置文件都写有数据库分离配置。可为啥没有效果?看看后台设置貌似也没有专门的主从分离开关,难道是代码错了?
网上所有的代码都差不多的,自己试着修改了几次代码依旧无果,我开始怀疑SAE是不是在跟我开玩笑,想来也不至于,最后搜索出一篇技术文章提到了WordPress for SAE的弊端,上面说到要去掉主从分离,除了注释掉“wp-config.php”配置文件里边对应的代码以外,还要将wp-includes目录下另一个名叫”wp-db.php”的文件替换回来。OK,原来主从分离除了配置文件以外,还需要”wp-db.php”这小玩意,关键就应该在这里了。
果不出我所料,自己所用的WordPress for SAE 4.1版本中对应的”wp-db.php”文件与官方相同版本的文件毫无差异,我还指望升级解决,可后来发现网上另一位大神给出的最新WordPress for SAE 4.2.2中的”wp-db.php”也跟原版相同,网上WordPress for SAE版本普遍都是“wp-config.php”配置文件里边有主从分离的代码,但实际都没有通过修改”wp-db.php”真正实现数据库主从分离。唯有SAE官方应用仓库中的WordPress for SAE 3.4.1,或则WordPress for SAE官方博客中提供的3.5.2版才有完整修改,而这些WordPress for SAE版本都显得太老了。
我还想参照老版文件,看着修改4.2.2中的”wp-db.php”,结果发展这同一个文件,可新旧版本间差异太大,自己根本看不懂,更别提修改了,算了。专业的事还是交给专业的人解决,自己将就把博客降回至3.5.2版本还省心点。虽然老版本的BUG会不少,但在SAE上想必安全不会出什么太大的问题。唯有不爽的是自己这个主题,在老版的WordPress for SAE上会出现样式失效,所以留言评论框很难看,好在不是什么太大的问题,我也没啥心思继续琢磨了。
P.S.主从分离又称读写分离,这在分布式数据库是很常见的设计。通常都是一处写入,多处读取,将大量读取请求分散给不同服务器以便降低负载。因为主服务器要求苛刻,SAE目前主从服务器价格比是4比1.5,即主服务器价格是从服务器的2.6倍。
凡事皆有利弊,主从分离能降低负载,但会带来数据同步问题,在业务繁忙的时,主从分离的数据可能同步不上,就会出现文章修改了,刷新之后还是没改的情况。如何保持主从及时同步数据是平台设计人员应该考虑的问题。