系统设计5:Google三剑客

补充材料:

三剑客:

http://blog.csdn.net/koder2009/article/details/3964878

http://blog.csdn.net/koder2009/article/details/3985329

http://blog.csdn.net/koder2009/article/details/3991938

http://blog.csdn.net/wangxiaoqin00007/article/details/7091686

http://www.mitbbs.com/article_t/JobHunting/32058103.html

https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/gfs-sosp2003.pdf

https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf

https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf

GFS:

https://www.slideshare.net/romain_jacotin/the-google-file-system-gfs

https://www.slideshare.net/mansu/gfs

http://os.51cto.com/art/201008/218364_all.htm

数据备份

https://www.slideshare.net/spf13/replication-durability-and-disaster-recovery

BigTable:

https://www.slideshare.net/romain_jacotin/undestand-google-bigtable-is-as-easy-as-playing-lego-bricks-lecture-by-romain-jacotin

https://www.slideshare.net/vanjakom/google-bigtable-paper-presentation-5078506

https://www.cs.rutgers.edu/~pxk/417/notes/content/bigtable.html

http://blog.jobbole.com/1344/

Bloom filter:

https://llimllib.github.io/bloomfilter-tutorial/

https://en.wikipedia.org/wiki/Bloom_filter

https://medium.com/the-story/what-are-bloom-filters-1ec2a50c68ff

key-value:

https://www.slideshare.net/kingherc/bigtable-and-dynamo

MapReduce:

https://www.slideshare.net/romain_jacotin/the-google-mapreduce

https://www.zhihu.com/question/26045727

倒排索引:

http://blog.jobbole.com/82607/

同字母异形字:

http://www.lintcode.com/en/problem/anagrams/

https://adhoop.wordpress.com/2012/02/14/generate-a-list-of-anagrams-round-1/

海量数据处理:

http://blog.csdn.net/v_july_v/article/details/6279498

http://blog.csdn.net/v_july_v/article/details/7382693

问题:

  • 如何设计一个分布式数据库/文件系统
  • Word Count,倒排索引,Anagrams

如何设计一个GFS?

  • 场景是什么?
  • 如何写文件?
    • Linux/Windows:metadata + Index -> blocks(1024Byte)
    • 文件大怎么办:在Blocks上面装一层Chunks(64MB)->减少metadata,减少traffic,对于小文件有浪费
    • 继续变大呢:分布式,master-slave,master知道某个数据在哪个机器上,但不知道chunk具体的位置
  • 如何发现一个chunk数据损坏:checksum in each block
  • 如何恢复数据:
    • 3个备份
    • 如何选择chunk server
      • 空间剩余多的优先
      • 新数据分散
      • 2+1策略:两个在同一个机房,一个在另外的机房
    • 如何恢复
      • 发现checksum错
      • 找master
      • master告诉slave最近的数据在哪里
      • slave找到数据备份,拷贝过来
  • 如何发现一个chunk server跪了:心跳
  • 如何恢复Chunk Server的数据
    • chunk server heartbeat table
    • data location table
    • repairing table
    • chunk server再上线,认为所有数据都过期了
  • 如何避免热点问题
    • chunk freq table
    • server stats
    • 将热数据复制到更多的机器上
  • 如何读数据
    • client向master询问chunk在哪里,master返回按距离排序的server list
    • client像最近的chunk server读数据
  • 如何写数据
    • client向master请求三个chunkserver,一个主机,两个备份
    • 写到主机的内存
    • 主机将数据发给一个备份机
    • 备份机发给另一个备份机
    • 三个备份都完成了,告诉client
    • client告诉主机,可以写入了
    • 主机告诉备份机写入
    • 主机告诉client,已经全部写入磁盘

如何设计BigTable?

  • 如何支持单点查询和范围查询?
    • 按key排序
  • 怎么存一个大表?
    • Metadata of table
    • tablet
  • 如何存一个更大的表?
    • 大表拆成小表
    • 小表拆成更小的
  • 如何向表写数据?
    • 内存存index,磁盘存小表
    • 小表不可修改,只能append或者加新表
    • 小表内部有序,之间无序
    • 先写到内存,在回写到硬盘
  • 内存表太大,回写硬盘
  • 如何避免系统失败:事务和log
  • 如何读数据
    • 每个表(内存、硬盘)都找(之间无序)
    • 硬盘查找,慢
  • 如何改进
    • 每个小表建立索引(block级别),放内存
    • 先查索引,再查磁盘
  • 如何改进2
    • bloomfilter
    • 不在一定准
    • 在可能准
  • Bloom filter
  • 如何把表存到GFS
    • mem table-》存log
    • 小小table-》GFS chunk
  • 表的逻辑是什么
    • 列族
    • 时间戳
  • 逻辑表如何转换为物理表
    • key:row + column + timestamp
  • big table 架构

如何设计MapReduce

如何计算一个1TB的k-v的数据?

Input Split Map Shuffle Reduce Finalize

原文地址:https://www.cnblogs.com/zcy-backend/p/6736308.html