在分布式缓存中写入操作

时间:2014-11-11 02:13:23

标签: caching distributed

有两个表:

filetable
- filename
- fileid
- dirid

directory
- dirname
- dirid

以下是系统架构。 M1,M2,M3是运行PHP代码的机器。 MYSQL是单个MySql数据库。

  M1                 M2                    M3
    \                |                     /
     \               |                    /
      ------------  MYSQL   -------------

M1,M2和M3上存在分布式缓存。 缓存的关键值为

dirid -> list_of_fileids

对于每个读取请求,在进入数据库之前,每个PHP程序都会检查分布式缓存中是否存在密钥的值。

对于写入操作,在机器(Mn)上运行的程序运行以下步骤:

将文件C添加到目录Z

  1. 使缓存中的Z无效

  2. 将文件C插入文件表

  3. 阅读Z。

  4. 使用Z。

  5. 更新缓存

    可以对同一个目录同时运行许多文件插入操作。

    问题:

    1. 在什么情况下缓存会不同步?
    2. 如何解决?

1 个答案:

答案 0 :(得分:0)

分布式缓存的行为与任何其他分布式系统一样,它们都有类似的约束。

  1. 写入一个节点的数据需要一段时间才能在其他节点之间进行复制。当然节点越多,到处都需要的时间越长。

  2. 如果分布式节点位于同一个虚拟网络上,并且可能位于同一个数据中心,那么到达所有节点的时间就不会那么长。

  3. 许多分布式系统围绕强一致性数据(CAP [http://en.wikipedia.org/wiki/CAP_theorem]中的C)进行折衷,因此它们明确表示不同节点上的数据不同。

  4. 在我看来,修复它的方法是:

    1. 什么都不做,数据意味着在很短的时间内(可能是10毫秒?)不同步。

    2. 处理用户界面中的差异。例如,YouTube会立即显示在UI中写入的数据(Javascript),并且写入请求已被发送。它没有发送写请求和阻止读取以向用户显示更改。

    3. 希望有所帮助。