`
vvggsky
  • 浏览: 66898 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Cache 一致性问题解决思路

阅读更多
http://www.dbanotes.net/arch/facebook_scaling_out.html

大量的 MySQL + Memcached 服务器,布署简示:
California (主 Write/Read)............. Virginia (Read Only)
主数据中心在 California ,远程中心在 Virginia 。这两个中心网络延迟就有 70ms,MySQL 数据复制延迟有的时候会达到 20ms. 如果要让只读的信息从 Virginia 端发起,Memcached 的 Cache 数据一致性就是个问题。
1 用户发起更新操作,更名 "Jason" 到 "Monkey" ;
2 主数据库写入 "Monkey",删除主、从两端 Memcached 中的名字值;
3 在 Virginia 有人查看该用户 Profile ;
4 在 Memcached 中没发现用户名字,从 Virginia  Slave 数据库读取,因为网络延迟,结果读到了 "Jason";
5 更新 Virginia Memcached 中的该用户名字为 "Jason";
6 复制追上了,更新名字为 ""Monkey";
7 又有人读取 Profile 了;
8 在 Memcached 中找到了键值,返回 "Jason" (实际上造成业务冲突了)

解决办法挺有意思,在 SQL 解析层嵌入了针对 Memcached 的操作。
1 用户发起更新操作,更名 "Jason" 到 "Monkey" ;
2 主数据库写入 "Monkey",删除主端 Memcached 中的名字值,但Virginia 端 Memcached 不删;(这地方在 SQL 解析上作了一点手脚,把更新的操作"示意"给远程);
3 在 Virginia 有人查看该用户 Profile ;
4 在 Memcached 中找到键值,返回值 "Jason";
5 复制追上更新 Slave 数据库用户名字为 "Monkey",删除 Virginia Memcached 中的键值;
6 在 Virginia 有人查看该用户 Profile ;
7 Memcache 中没找到键值,所以从 Slave 中读取,然后得到正确的 "Monkey" 。

这里面的一个简单的原则是: 更新后的数据,用户第一次读取要从数据库读,顺便扔一份到 Cache 里,而不是在写入的时候直接更新 Memcached 。避免写事务过大。
而写操作的原则是:一次写入,到处分发。


分享到:
评论

相关推荐

    后台服务代码架构:项目实际应用中redis缓存与数据库一致性问题解决.docx

    三、问题解决思路 能否做到先发出的请求一定先执行完成呢?常见的思路是“串行化”。但是,在服务层面,任务队列不能保证任务不并发执行,单服务多数据库连接不能保证任务不并发执行,多服务单数据库连接不能保证...

    IEEE fellow 张晓东多核cache管理技术

    4. **缓存一致性(Cache Coherence)**: 多核系统中,每个核心都有自己的私有缓存,但当数据在多个核心间共享时,必须保持缓存的一致性,即所有核心看到的数据版本都是最新的。张晓东的研究可能探讨了如何在提高效率...

    J2Cache.pdf

    #### 实际运行中遇到的问题及解决思路 针对上述问题,J2Cache的设计思路是在每个应用节点上部署一个本地缓存(如Ehcache),作为第一级缓存(L1 Cache)。同时,引入分布式缓存(如Redis)作为第二级缓存(L2 Cache...

    L3Cache-源码.rar

    3. **一致性协议**:在多核系统中,L3 Cache的共享需要解决一致性问题。如MESI(Modified、Exclusive、Shared、Invalidated)协议,确保了在多个核心之间,同一数据的缓存状态的一致性。 4. **预取技术**:预取技术...

    应用笔记LAT1281+数据意外变化导致条件判断流程异常v1.0

    - 通过对变量位置的调整,特别是将变量移至DTCM RAM中,可以有效减少Cache的命中次数,从而降低因Cache操作不当导致的数据一致性问题。 #### 四、结论及建议 1. **结论**: - 经过综合分析,问题的根源在于Cache...

    基于NUCA结构的同构单芯片多处理器.pdf

    非一致性Cache体系结构(NUCA)是解决上述问题的一种有效方法。NUCA结构允许不同的缓存块可以不均匀地分布在物理位置上,通过动态迁移技术来优化缓存的访问速度。NUCA架构提供了一种灵活的缓存管理机制,使得缓存块...

    深入了解java并发的volatile关键字的底层设计原理.docx

    现代多核处理器系统中,每个处理器都有自己独立的缓存,而这些缓存与主内存之间的数据一致性问题是必须解决的关键问题之一。 ### 缓存结构设计 1. **缓存区设计**:每个处理器核心拥有自己的缓存区(Cache)。缓存区...

    面向非易失性内存缓冲区的SQLite-CC.docx

    SQLite的默认缓存策略为每个连接创建独立的缓冲区,这可能导致空间浪费和一致性问题;而共享缓存虽然减少了空间占用,但降低了并发性能。为此,文章提出了一种名为SQLite-CC(Copy Cache)的新方法,该方法在NVM中...

    这可能是最全的高并发、高性能、高可用解决方案总结.docx

    本文旨在全面解析针对这“三高”问题的有效解决方案和技术思路。 #### 一、缓存技术详解 **1.1 缓存为何有效?** 缓存之所以能显著提升系统性能,核心在于数据访问的局部性原理——即**二八定律**:80%的数据访问...

    计算机系统结构期末考试试题.pdf

    9. 多Cache一致性问题在多处理器系统中尤其重要,写作废协议和写更新协议是保证多处理器Cache中数据一致性的两种常见方法。 10. 机群系统是一种由多台独立计算机组成的并行计算平台,通过网络连接协同工作,提供高...

    Oracle故障诊断排除示例.pptx

    3. **绝境求生,三智五猜**:面对复杂问题,需要灵活运用知识,尝试不同的解决思路,甚至在没有明确答案的情况下,通过推理和实验来找到解决方案。 总之,Oracle故障诊断排除是一个既需要理论知识,又需要实践经验...

    Jquery validation remote 验证的缓存问题解决方法

    Jquery validation是前端开发中常用的表单验证插件,它能够帮助开发者对用户输入的数据进行校验,确保数据的有效性和一致性。remote验证方法通常用于校验数据是否已存在于数据库中,比如用于判断某个年级是否已被...

    让Oracle跑得更快—Oracle 10g性能分析与优化思路ch03.pdf

    这种机制确保了数据的一致性和完整性。 #### 三、Latch与性能问题 - **等待与阻塞的区别**:Latch导致的等待通常不会像Lock那样引起阻塞,而是会等待当前持有Latch的进程释放Latch。因此,理解Latch的等待特性有助...

    2011年最新面试笔试题

    3. **一致性哈希**:对于分布式环境,可以采用一致性哈希算法来实现负载均衡,减少缓存节点失效带来的影响。 ### 知识点五:数组操作 - 负数与正数的排序 #### 问题描述 题目要求重新排列一个未排序的整数数组,...

    分布式数据库控制协调体系结构的研究与实现.pdf

    在分布式数据库中,控制协调是确保各个节点之间数据一致性、事务正确性和系统整体性能的关键。 文章提出了一个基于内存缓存、面向执行实体的协调模型(Executing Entity Oriented memory Cache based Coordination ...

    精选_毕业设计_基于C++实现的简单CPU模拟器_完整源码

    作为毕业设计,这个项目有助于学生将理论知识付诸实践,提升问题解决能力和软件开发技能。通常,毕业设计需要包含以下步骤: 1. 需求分析:明确模拟器应具备的功能和性能指标。 2. 设计阶段:制定整体架构,设计...

    2012最新淘宝笔试题目全

    - **解题思路**:可以采用一致性哈希算法来实现数据的均匀分布和高效的重新分配。 - **扩展**:一致性哈希算法的具体实现及其在分布式系统中的应用。 通过以上对给定文件中的题目进行详细解析,我们可以看出,这些...

    计算机系统结构教材及课后答案

    这部分会讲解存储器的工作原理、替换策略、缓存一致性问题以及虚拟内存的概念。 第六章会介绍输入输出系统,包括I/O接口、中断系统、DMA(直接存储器访问)和通道技术。这部分内容有助于理解计算机如何与外部设备...

    基于CC-NUMA的多处理器系统研究.pdf

    NUMA(Clustered Cache-Coherent Non-Uniform Memory Access)架构,该架构结合了SMP(Symmetric Multiprocessing)和MPP(Massively Parallel Processing)的优势,旨在解决传统多处理器系统的性能瓶颈和扩展性问题...

Global site tag (gtag.js) - Google Analytics