键-文件存储系统weedfs



键-文件存储系统weedfs

weedfs 是跟据facebook的一篇论文 用go语言实现的key-file存储系统。
论文中facebook面临海量的photo存储,数据特点是一次写,读频繁,无修改,很少删除。 分析基于POSIX系统在此应用场景中主要的问题是元信息存储在磁盘,读元信息的磁盘IO成为性能瓶颈-- 第一次(可能是多次)读盘将文件名转为i结点,第二次读盘读入i结点,第三次读盘才是读数据。

设计目标:

  • 高吞吐低延时 元信息全部存储在内存,避免多次的磁盘IO
  • 容错
  • 简单

facebook的原始设计
../img/facebook_photo_storage.jpg

浏览器请求被重定向到CDN,CDN中如果缓存了该图片则直接返回,否则查询Photo存储服务器。 Photo存储服务器是用NFS搞的,他们改了内核做了个文件描述符的缓存open_by_filehandle,用 memcache缓存打开的文件描述符,避免多次读盘

存在的问题是,缓存效果并不好: CDN中图片的访问频率存在"长尾效应",缓存命中的只有一部分,长尾要耗很大的带宽 Photo存储服务器的缓存,效果不明显。即使有缓存也无法改变POSIX读操作需要多次磁盘操作的本质问题

多张照片存储在一个大文件里,减少文件个数
减少元数据信息,将元数据全放在内存,像权限什么的,对于该应用场景就是不 必要的
../img/facebook_photo_haystack.jpg

按volume,不同机器上的物理volume再划分成逻辑的volume,Directory维护逻 辑到物理的映射;
Cache作用跟原来CDN一样,主要是缓存和单点故障,不过是系统内部的;
生成URL如 http://<CDN>/<Cache>/<Machine id>/<Logical volume, Photo>

Directory作用:

  • volume的逻辑物理映射
  • volume的读写负载均衡
  • volume满的时候,标记为只读

Cache是分布式hash表实现,照片id是key
只缓存来自user的请求,不缓存来自CDN的,因为CDN miss了,内部缓存命中的 可能性也不大。
只缓存可读的volume,因为应用场景中,photo一般是刚传上来时访问比较多


Read full article from 键-文件存储系统weedfs


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts