空空叶博客 学习与开发博客

一种缓存架构

2017-05-05

一种缓存架构

简单地描述就是一主多从,主的需要低延时,从的无所谓

需求

有时会有这么一种需求,就是多个项目,多个地方共用一个数据库,这样带来的问题也很明显,就是缓存与同步问题.

按我目前的理解,设置缓存很简单,把查询出来的结果缓存一下就好了.但后面的数据库更新了,要通知缓存更新却是很麻烦. 或许有满足特定需求的解决方案,但却想不出能满足全部需求的解决方案.

因此,此文章说的也是满足某个特定需求的解决方案.

介绍

此解决方案需要项目满足以下条件:

  1. 一个要求低延时的项目(比如一个游戏服务器,不能承受高延时)
  2. 若干个不要求低延时的项目(比如web项目,http请求延时多个几ms也没事)

缓存架构

那个有低延时要求的项目直接依赖缓存库,就是说缓存库会跟项目运行在同一个进程内,直接调用,这样不会产生额外的延时(如socket延时)

其它的没有低延时要求的项目,可以通过网络请求或其它方式访问这个进程

此架构有点主从的形式,就是一个,若干个,主的如果关掉,那从的就没法访问了,虽然说最终都是使用同一个数据库的数据,而且数据库 还在那里,但这里假定主的关掉了,从的也没有必要开启了.

这里还有一个点,就是要求低延时的项目必须是一个,而不能是多个,因为如果是多个,那这些项目就不一定都在同一台主机上,那这唯一的进程不管 放哪里,都会有部分项目访问产生高延时.比如说若干个游戏服务器(一区,二区,三区…),希望共用一个权限系统,每个游戏服务器都要求权限访问是低延时的,那此架构就不合适了,需要另行采用其它架构.

另外一个点是,因为本机socket访问其实延时也是可以接受的(比如0.02ms),那此项目是否可以弄成一个独立的外接程序呢?如果是外接程序,那必然也是 同步访问的,请求外部的时候线程会阻塞住,就是说不会带来效率上的提升,速度不会更快. 这样做的优点是的关闭时,的仍然可以正常运行,但主的一般不会长期关闭,如果长期关闭,从的也没有太大必要运行着. 缺点是代码更复杂了,原来只需要调用就可以了,现在还要做接口转一下. 因此综合考虑,并没有太大必要做成外接的程序,直接依赖就行了.

这种架构形式是: 数据库 ---(数据库访问,有点慢)--- 在主项目内运行的依赖(有缓存) ---(远程访问)--- 若干从的项目

PS

本来希望想出一个通用的,至少能满足大部分需求的框架,但最后发现根本想不出…只好退而求其次了,能满足特定的一种需求就行了…


上一篇 web笔记

下一篇 内存模型

目录