Caching 分布式缓存中的写操作

Caching 分布式缓存中的写操作,caching,distributed,Caching,Distributed,有两个表格: filetable - filename - fileid - dirid directory - dirname - dirid 以下是系统架构。 M1、M2、M3是运行PHP代码的机器。 MYSQL是单个MYSQL数据库 M1 M2 M3 \ | / \ |

有两个表格:

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

  • 从缓存中使Z无效

  • 将文件C插入filetable

  • 读Z

  • 用Z更新缓存

  • 可以同时对同一目录执行多个文件插入操作

    问题:

  • 在什么情况下缓存将不同步
  • 如何解决这个问题

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

  • 写入一个节点的数据需要时间跨其他节点复制。当然,节点越多,无处不在所需的时间就越长

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

  • 许多分布式系统围绕强一致性数据(CAP[]中的C)进行折衷,因此它们明确表示不同节点上的数据不同

  • 我认为解决这个问题的方法是:

  • 什么都不做,数据将在很短的时间内(可能是10毫秒?)不同步

  • 处理UI中的差异。例如,YouTube会立即显示在UI中写入的数据(Javascript),并发送写入请求。它不会发送写入请求并阻止读取以向用户显示更改

  • 希望有帮助