周刊开刊

开刊, Covid-19, 6.824, Go, MapReduce, GFS, BigTable

阮一峰在两年前开始做周刊,记录每周值得分享的科技内容,目前已经做到99期了。受他的启发,我也尝试写写周刊,一是总结自己的一周或几周所看所学,二是做个记录和分享。为了避免重蹈先前每天一篇公众号文章的覆辙,我不会限定每周一刊,可能两周,也可能四周,视情形而定。

文摘

我的中文信息主要来源是微信,英文信息主要来源是 twitterPocket. Pocket 是一个稍后阅读的应用,我利用 IFTTT 自动每天或每周推送最新文章,目前主要有 The EconomistThe New York Times 两个主动推动的 applet.

我会尽可能多的选取英文文摘,为了逼着自己学英语。所选文章来自网络,不代表个人观点。最近看到的大部分文章都是关于新冠病毒(Covid-19)的,病毒已经在全球蔓延,估计短时间结束疫情是不可能了。

1. The 100 greatest designs of modern times

财富杂志在1959年评选了 THE 100 “BEST DESIGNED” PRODUCTS, 于去年(2019) 60周年之际,再次进行了评选。 前十名分别是 iPhone(2007), Macintosh(1984), Google(1997), Eames Fiberglass Armchair(1950), Sony Walkman TPS-L2(1979), OXO Good Grips Peeler(1990), Uber Rideshare(2009), Netflix Streaming(1997), Lego Building Blocks(1939), iPod(2001). 国内入选的产品有 WeChat(2011), Mobike(2015).

2. Why Telling People They Don’t Need Masks Backfired

新冠疫情在全球蔓延时,各国的应对策略都不太一样。其中有一个明显的区别是国内宣传是必须要戴口罩,而国外大部分官方和主流媒体都建议是不要戴口罩,其理由主要是“只有病人才需要戴口罩避免传染给他人”。但这个理由稍加推敲站不住脚:首先 covid-19 病毒潜伏期长,未发病人也有传染性;再者从主动防护的角度来说大家都戴是最能防护的。不明白这种论调为什么被国外主流媒体一再宣传,终于看到一篇对这种言论反驳的文章。文章认为尽管官方一直指导普通人不需要戴口罩,但实际上适得其反,口罩在市面上被哄抢导致紧缺,主要原因是:

  1. 卫生专家认为普通人不要口罩而医护人员需要,这是矛盾的:难道口罩只能在特定医护场所才有效果?
  2. 专家认为普通人一般口罩戴的方法不正确。但很多人洗手的方法也不正确,我们提供各种指导让民众正确洗手,戴口罩也应如是。
  3. 口罩当然有用。经历过2003 SARS 的中国以及亚洲国家官员都建议戴口罩。
  4. WHO 和 CDC 告诉民众病人需要戴口罩,但目前有越来越多的无症状传染案例,尤其是年轻人和轻症患者在不清楚自己染病的情况下仍具有传染性。
  5. 香港等地与中国大陆人员来往频繁,而早期的普遍隔离和戴口罩策略使得他们很好的控制了传染病。
  6. 口罩是一个象征团结的符号,让公民更加意识到大家应该同舟共济。
  7. 给出不戴口罩这种明显矛盾的指导只能适得其反,因为缺乏信任会加剧哄抢和假消息的蔓延。

3. Even tiny Pacific islands cannot escape covid-19

太平洋上的很多小岛显得避世独立远离喧嚣,甚至被宣传成远离世界末日的净土,但如果你认为他们能远离 Covid-19, 无疑痴人说梦。没有哪个岛屿是孤岛(No island is island).

文章的这句 No island is an island 应该是改编自诗人 John Donne《沉思录》的一句 “No man is an island.”

4. Covid-19 is exposing America’s resilience—and vulnerability

就像网上说的:“疫情是面放大镜”。确实如此,文中引述了一位评论者的话:美国长期习惯了认为自己是世界上最好、效率最高、科技最先进的社会,正被证实为是一个褪去新衣的皇帝。(“long accustomed to thinking of itself as the best, most efficient, and most technically advanced society in the world, is about to be proved an unclothed emperor.”)

技术

1. 6.824

geektutu 的推荐下(下面的 Go、Google 三篇论文也得益于他的讲解)开始学习 6.824, 这是也被誉为分布式系统的神级课程,是 MIT 推出并公开的在线课程。每节课几乎都对要解读一篇分布式领域的经典论文,课后还有分布式 Lab, 动手用 Go 语言写分布式系统实现,包括经典的 MapReduce、Raft 等。

2. Go 语言

本周及上周因为学习 6.824 也相应入门了 Go 语言。Go 语言很像 C 语言(都是 Ken Thompson 参与设计的嘛),语法简洁。接近于 C 的运行效率 + Goroutine + 垃圾回收,让它在并发计算上具有很大优势,因此在分布式云计算领域应用很广泛,docker 就是用 Go 编写。

不过 Go 语言因为考虑设计的简洁,没有引入过多的语法,在降低学习成本的同时,也少了很多其他语言的语法糖,显得不那么fancy,不过反倒是这种淳朴的内在更利于工业级的开发应用。

3. MapReduce

MapReduce 是一种分布式计算的编程模型,用于大规模数据集的并行计算。它的主要思想是通过 Map 和 Reduce 两个阶段将数据处理分发再归约。

MapRecude 编程模型如下图示:

Map Reduce

  1. 用户程序调用 MapReduce 库将输入文件分成 M 个数据片段。然后用户程序在集群中创建大量程序副本。
  2. 其中一个程序副本是 master 进程,其余都是 worker. 由 master 分配任务。有 M 个 map 任务和 R 个 reduce 任务被分配。master 将一个任务分配给一个空闲的 worker.
  3. 被分配了 map 任务的 worker 读取相关输入数据片段,从输入数据中解析出 key/value pair, 然后将 key/value 传给用户自定义的 map 函数,由 map 函数输出中间结果存成 key/value 格式,并缓存在内存中。
  4. 缓存的 key/value pair 通过分区函数(比如求 hash)分成 R 个区域,写入文件系统。存储位置被回传给 master, 由 master 负责将这些存储位置再传给 reduce worker.
  5. Reduce worker 读取所有这些中间数据后,将相同 key 值的数据聚合在一起。
  6. Reduce worker 将这个 key 值和对应所有 value 数据传给用户自定义的 reduce 函数,reduce 函数输出追加到所属 reduce 分区的输出文件。
  7. 所有 map 和 reduce 任务完成后,master 唤醒用户程序,一次 MapReduce 计算完成。

6.824 的第一个 Lab 就是实现个简单的 MapReduce 系统,其中的单词统计用例可以帮助理解 MapReduce 模型。

资料:

4. GFS

GFS 即谷歌文件系统(Google File System), 是谷歌大部分服务的基础。它主要的应用场景是大文件(通常 100M 以上)的读写,工作负载主要是大规模的流式读取和小规模的随机读取,以及大规模的顺序追加写。文件一般数据写入后就很少被修改。

GFS 架构如下图示:

GFS architecture

单个 GFS 集群包含一个 master 和多个 chunkserver(一般是普通 Linux 机器), GFS 将文件分割成若干个固定大小的 chunk。在 chunk 创建的时候,master 会给每个 chunk 分配不变且唯一的64位 chunk 标识。chunkserver 将 chunk 以 Linux 文件形式存储在本地,并根据 chunk 标识和字节范围来读写块数据。一般为了可靠性的考虑会有3个 chunkserver 备份。chunk 设计比较大: 64M.

master 管理所有的文件系统元数据信息。包括: 1. 文件和 chunk 的命名空间(前缀压缩算法存储);2. 文件和 chunk 的映射;3. chunk 的位置信息。这三种元数据信息都存在内存中,且只有前二者会以日志形式持久化存储。

单一的 master 节点简化了系统设计,但也需要减少对 master 的读写,避免 master 成为瓶颈。master 只存元数据信息,当客户端询问到它应该联系的 chunkserver 后,便直接跟 chunkserver 进行读写操作。

资料:

5. Bigtable

Bigtable 的设计目标

Google 提供的服务很多,需要存储的数据格式种类繁多,有海量的服务请求. 这些诉求也是 Bigtable 的设计目标:

Bigtable 的数据模型

A Bigtable is a sparse, distributed, persistent multidimensional sorted map.

Map 以 { row key, column key, timestamp } 为索引(key), value 是内容字符串。

(row:string, column:string,time:int64)->string

Bigtable 系统组成

三个组成部分:

tablet 定位: tablet 的位置信息存储在一个类似 B+ 树的三层结构中,通过 row key 定位 tablet。

tablet 分配: 同一时间,一个 tablet 只能被分配给一个 tablet server. master 通过 chubby 分布式锁服务来监测管理 tablet server.

tablet 读写与服务: tablet 持久化存储在 GFS 上,内存到文件系统是通过 memtable 和 SSTable 的对应转换完成。

关键设计

资料:

其他

1. RSA panel: How to Reduce Supply Chain Risk: Lessons from Efforts to Block Huawei

RSA 是全球最知名的安全技术峰会,今年的会议上有一个 panel 是专门讨论去年美国制裁华为对供应链的影响。嘉宾有: Katie Arrington(美国国防部网络信息安全官 CISO), Andy Purdy(华为首席安全官), Bruce Schneier(安全专家,《应用密码学》的作者), Kathryn Waldron(R Street 机构 Fellow).

Panel 的主题是如何减少供应链的网络安全风险,是站在美国的角度讨论的。Katie 是美国政府官员,聊着聊着她就回到政治上。Bruce 不止一次纠正她讨论的内容是网络安全,不是贸易战。当大家在说到如何削减网络风险时,Katie 说中国一直在偷窃美国的知识产权;当大家问她华为能不能参加跟其他公司同样的安全测试时,她两手一摊:“法律不允许啊”;当谈到网络风险是否与地域和国家有关时,她的说法是“我们是民主国家”。Bruce 的论述则一直紧扣网络安全,他认为 5G 也是不安全的,而是应该研究更安全的 6G; 那个 NSA 控制了所有技术去监控通信的时代已经过去了(意为这种不安全的传输协议也给其他国家或组织留下了后门),必须要在通信网络和 IoT 设备上提升安全等级。这个 Panel 的视频值得一看,可以侧面了解美国人的一些思维方式。


奥斯卡今天已不太相信预兆。然而当时预兆却相当多,这暗示一场灾祸将临。这场灾祸穿上越来越大的皮靴,还想迈开越来越大的步伐,把不幸带到四面八方。这时,我的朋友赫伯特·特鲁钦斯基死了,一个木制女人给他的前胸添了一道创伤。这个女人却没有死。她被封存起来了,据称是为了修复而存放在博物馆的地下室里。可是,人们无法将灾祸关进地下室。灾祸同污水一起从下水道流出去,同煤气一道从煤气管道里散出去,到了每个住家。把汤锅放在蓝色火苗上煮的人,谁都没有料到,煮开他的汤的竟是灾祸。

【德】君特·格拉斯《铁皮鼓》 胡其鼎 译
(本段摘自章节 有信有望有爱)

周刊 Covid-19 分布式 6.824 Go MapReduce GFS BigTable

知识共享许可协议 本文采用「CC BY-SA 4.0」知识共享许可协议,如果还喜欢其他文章, 欢迎订阅“胡涂说”博客
公众号
微信公众号同步更新,欢迎关注😊
对我博客最大的鼓励来自于你的评论,欢迎选择 来回复, 也可以在 GitHub discussion 留言。