Facebook 的 Scaling Out 经验
来源:互联网 发布:中科院软件所夏令营 编辑:程序博客网 时间:2024/05/18 21:50
Facebook 其实对待技术的态度其实挺开放的。今天阅读了这篇 Scale Out, 工程师 Jason Sobel 介绍了在对付跨地域 MySQL 复制网络延迟的问题。
Cache 一致性问题解决思路
大量的 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 。避免写事务过大。
而写操作的原则是:一次写入,到处分发。
第二个问题是关于"Page Routing"的 ,也很有参考价值。感兴趣的自己读一下吧。
- Facebook 的 Scaling Out 经验
- Facebook 的 Scaling Out 经验
- Facebook Data Freeway : Scaling Out to Realtime
- Scaling memcached at Facebook
- Scaling Memcache at Facebook
- Scaling Memcache At Facebook
- Scaling Out MySQL
- Scaling Up And Out
- Facebook 的 Memcached 扩展经验
- 关于facebook分享的经验
- Scaling Memcache at Facebook论文阅读笔记
- Scaling Memcache at Facebook论文阅读笔记
- Facebook老员工的十点经验
- Facebook的十点经验分享
- Facebook老员工的十点经验
- Scaling out => Loss-coupled architecture
- Session 6: Scaling Out Your OpenStack
- feature scaling的作用
- 研究算法
- ASP.NET 常用的33种代码(转,收藏一下,以备后查)
- 软件的性能着实很重要
- 国内:TW、海内、开心~~等,几家鲜花又起放~国内门户更是红旗飘
- C++回调函数出错简单介绍
- Facebook 的 Scaling Out 经验
- 网友面试心得的总结
- 解析Java中抽象类和接口的区别
- apache支持asp
- VC使用CRT调试功能来检测内存泄漏
- CListCtrl 用法总结
- 小程序
- error PRJ0002的一个解决心得
- 让LINUX支持MSSQL2000数据库:FreeTDS的安装与配置