异步提交数据库,缩短请求的响应时间。

我想众多项目的瓶颈应该是数据库的瓶颈。从数据库角度讲, SQL 语句的优化、数据库配置优化、读写分离等此类的技巧估计并不新鲜,我只从架构角度上来给大家分享一些经验。

在如今众多高并发的项目中,缓存是不可缺少的部分。众所周知,缓存可以有效的缓解数据库的压力,所以就有了缓存数据库的概念。据我了解,目前为止市面上高效的缓存数据库软件都是收费的,例如电信的数据库就是类似于缓存数据库这种。

如何构建自己的缓存数据库?

这里有一个核心的问题就是异步提交。我们拿目前为止最流行的组合 php+memcache+mysql 来说,通常写的操作都是 php 来接收请求,然后用 php 来执行 sql 语句,向数据库写入数据,完成之后数据库向 php 反馈, php 向客户端返回结果,当写入量很大的时候数据库的 IO 就会成为整个过程的瓶颈。再此我们引入一个概念“ update server ”,这个模块的作用就是接受一个请求,然后向数据库写入数据。由此,以上的过程就可以变为, php 接收请求,然后 php 异步通知 update server ,然后 php 向客户端返回结果,此时 update server 接收到请求之后再向数据库来写入数据。这样就会大大减轻 php 端处理请求的时间。

到这里,我们可能又遇到一个问题,如果 update server 写入 mysql 时间过长,而此时 php 又要执行查询操作,最后就会出现脏读的问题。这时缓存服务器就可以轻松解决这个问题,首先我们把数据先写入 memcache ,然后再去通知 update server 来提交到数据库,而 php 执行查询的之后会先去读 memcache 里面的数据,如果没有,再去数据库查询,这样就解决了脏读的问题。

总结以上几点,我们得出一个部署方案, php 直接读写 memcache,update server 负责向 mysql 写入数据。关于 update server 上运行什么脚本,这个可以随意, php 或者 c++ 等都可以,当然 c++ 要好一些。这个方案虽然增加了服务器内存的成本,但是大大缩短了了请求的响应时间,提生了用户的体验。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值