• 系统设计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

  • 相关阅读:
    高并发计算服务器数量
    Java子线程中操作主线程Private级别数据
    Java线程并发中常见的锁--自旋锁 偏向锁
    Java锁之自旋锁详解
    Java多线程:向线程传递参数的三种方法
    TPS、并发用户数、吞吐量关系
    C/C++中near和far的区别
    qt的pos()和globalpos()(globalpos是相对于桌面的)
    如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置
    QComboBox实现复选功能(三种方法:嵌套QListWidget, 设置QStandardItemModel, 设置Delegate)
  • 原文地址:https://www.cnblogs.com/zcy-backend/p/6736308.html
Copyright © 2020-2023  润新知