周刊第二期

比尔·盖茨, 成功团队, zookeeper, 开源软件安全

本文为周刊第二期,上一期: 周刊开刊

文摘

由于 The New York Times 每日推送消息太多,我已经将它从 Pocket 源中删除。

1. RECONSIDER

Ruby on Rails 的作者 DHH 关于创业公司的一些思考。DHH 认为创业公司应该谨慎对待风险投资(VC),VC 的钱拿的越多,指导你做事的 boss 也就越多。定义成功的不应该只有二元化的“做大”或“失败退出”,也不应该是只有你死我活竞争中的零和游戏,而应该是你成功 AND 我成功的商业世界。毕竟不只是创业和工作,还有生活的诗和远方。

文中引用了乔布斯 的一句名言 “Make a dent in the universe”, 意为“要在宇宙中留下足迹”,这也经常被创业者引用来激励员工。不过 DHH 说: “A dent in the universe is plenty”, 控制你的野心,生活的更开心点。

2. The five keys to a successful Google team

Google 前年发布了名为 Google re:work 的工作指导,其中提到了一个成功的谷歌团队的5个关键要素:

  1. 心理安全感 (Psychological safety): 我们能不能在这个团队放下顾虑和不安?
  2. 可靠性 (Dependability): 我们能不能依赖团队各位准时高质量完成工作?
  3. 结构 & 清晰度 (Structure & clarity): 我们的目标、职责和执行计划清晰吗?
  4. 工作的意义 (Meaning of work): 我们的工作对大家个人来说重要吗?
  5. 工作的影响 (Impact of work): 我们真心相信正在做的工作有意义吗?

3. 31 questions and answers about COVID-19 by Bill Gates

Bill GatesReddit 上 AMA (Ask Me Anything) 上回答关于 Covid-19 的问题,这里是整理文档,与原贴有少许不同。Bill Gates 不将隔离说成是英文媒体常提的 Social distancing, 而是更严格的词 Shut down (中文版本上翻译为 “闭关”),感觉这个词比 Lock down 还严厉。

技术

1. zookeeper

ZooKeeper aims to provide a simple and high performance kernel for building more complex coordination primitives at the client.

分布式系统中需要配置管理、组成员关系、leader 选举和分布式锁等协调服务,雅虎工程师便创造了 ZooKeeper 来提供通用的分布式协调服务。由于 Hadoop 生态中很多开源组件都是以动物命名或作为 logo, 雅虎工程师便给它起了个 “ZooKeeper” 的名字。

ZooKeeper 设计模型

ZooKeeper 给客户端提供了数据节点集(znodes)抽象表示,数据节点集以层次化命名空间的形式组织。

1、 znode 是 ZooKeeper 提供给客户端通过 API 操作的数据对象。有两种 znode: 普通 znode, 临时 znode. 临时 znode 会在 session 结束后自动被删除。创建 znode 时可以指定序号 (sequential) 标志,创建带有序号标志的节点时将简单递增计数器的值添加到名称后。 2、 对于 znode, 使用标准 UNIX 文件系统路径记号。例如: 使用 /A/B/C 给出 znode C 的路径,C 的父节点是 B, B 的父节点是 A. 临时 znode 不能有子节点。

                      [ / ]
                    /       \
                   /         \
              [ /app1 ]    [/app2]
            /     |     \
           /      |      \
  [/app1/p1] [/app1/p2] [/app1/p3]  

3、 session: 客户端连接 ZooKeeper 初始化一个会话。会话有超时时间。 4、 API: 提供给客户端对 znode 操作,如 create, delete, exists, getData, setData, getChildren …

ZooKeeper 应用场景 (原语)

1、 配置管理

2、 集群成员管理

利用临时节点可以实现群组关系管理。利用临时节点的特性,通过 watch 节点,如果有群组成员发生故障或断联,则标识其的临时 znode 会被删除。

3、 分布式锁

ZooKeeper 实现

         +---------------------------------------------------+
         |               ZooKeeper Service                   |
         |                                                   |
         |   +-------------+              +--------------+   |
         |   |             |              |  +--------+  |   |
Write +----->+   Request   |         txn  |              |   |
Request  |   |  Processor  +-+    +------>+              +----->Response
         |   |             | |txn |       |              |   |
         |   +-------------+ |    |       |  Replicated  |   |
         |                   |    |       |   Database   |   |
         |                   v    |       |              |   |
         |              +----+----+---+   |              |   |
         |              |             |   |              |   |
         |              |   Atomic    |   |              |   |
         |              |  Broadcast  |   +--------------+   |
         |              |             |      +--------+      |
         |              +-------------+           ^          |
         |                                        |          |
         |                                        |          |
         +---------------------------------------------------+
                                                  |
                                                  +
                                                 Read
                                                 Request

ZooKeeper 通过复制 ZooKeeper 数据给所有服务提供了高可用,副本数据库 (Replicated Database)是内存数据库,保存了整个数据树。在 ZooKeeper 中,客户端会随机连接到 ZooKeeper 集群中的一个节点。如果是读请求,则直接从该节点读取数据;如果是写请求,那么请求会被转发给 leader 提交事务,然后 leader 会广播事务,只要有超过半数节点写入成功,那么请求就会被提交。

保证 ZooKeeper 一致性的协议叫 ZAB(ZooKeeper Atomic Broadcast), 有一篇专门的论文介绍:Zab: High-performance broadcast for primary-backup systems. 关于 ZAB 这篇文章介绍的比较详细:深入分析 ZooKeeper 的实现原理.

资料:

视频

1. RSA session: Collaborating to Improve Open Source Security: How the Ecosystem Is Stepping Up

演讲者是Microsoft Azure 的 CTO Mark Russinovich, 主要讲如何提升开源(或使用开源)的安全性。以下是该 session 的主要内容:

  1. 软件供应链: 业界一些开源项目被植入后门的案例: webmin, rest-client, event-stream。 比如 rest-client 被植入后门偷取比特币:rest-client 的作者收到一封“热心”邮件说可以帮助他维护开源项目,作者正好没有精力维护该开源项目就同意了,但没想到新维护者拿到账号后就植入了恶意软件然后发布了新版本,下载新版本的客户端会被植入后面,偷取本机上的比特币钱包。
  2. 发现漏洞: 工具及解决方案: GitHub Security Lab 提供 CodeQL 查询接口来发现代码中的漏洞; oss-fuzz 工具做fuzz 测试。
  3. 依赖管理: npm 包平均被80个组件所依赖,最多的npm包的被15万+个组件依赖;npm也被形容成依赖黑洞。 解决方案: 利用 npm.broofa.com 可视化依赖树。
  4. 构建系统和包管理: rest-client 维护者泄露了密码,导致包被恶意撤回并发布恶意版本;ubuntu github 账号被 hack。 解决方案: 1. 可重复构建 reproducible builds 2. mirror repos 镜像包库,可以防止官方仓中的版本被撤回。
  5. SBOM (software bill of materials) : BOM(物料清单) 是硬件生产中的一个概念,表示一产品、成品或半成品是由那些零组件或素材原料所结合而成之组成元素明细。BOM 可以清晰描述产品的物料组成。SBOM 借鉴了这一概念,来追溯软件的组成。 目前支持的工具有: SPDX, in-toto.

2. Inside Bill’s Brain: Decoding Bill Gates

Inside Bill’s Brain 中文译为《走进比尔》,是去年 Netflix 推出的三集纪录片。我是去年的时候看的,五星推荐。bilibili 资源链接

纪录片讲述比尔·盖茨辞去微软 CEO 后投身慈善事业的故事,三集的主线是讲述比尔·盖茨解决世界上存在的三大难题:通过廉价厕所解决贫穷国家饮水污染问题、消除脊髓灰质炎、安全的核能;副线穿插着比尔·盖茨创业、生活、读书、微软反垄断案、以及他与妻子梅琳达的爱情。在纪录片的最后,导演回顾了这三个项目并问了他一个问题:厕所,有希望但很贵;脊炎,今年的病历又增加了;泰拉电力,(因为贸易战)跟中国的协议告吹,在美国建(核电站)又希望渺茫。你是否想过:“这太难了,是不是做的太多了,我不干了。”比尔·盖茨的回答是:确实,有时候你不得不说:“我们放弃吧”,有时候又不得不说“我需要更加努力”。

比尔·盖茨引述他和梅琳达都喜欢的《了不起的盖茨比》中的片段。虽然每件事都困难重重,但为了实现梦想,从不会选择放弃。


当我坐在那里缅怀那个古老的、未知的世界时,我也想到了盖茨比第一次认出了黛西的码头尽头的那盏绿灯时所感到的惊奇。他经历了漫长的道路才来到这片蓝色的草坪上,他的梦一定就像是近在眼前,他几乎不可能抓不住的。他不知道那个梦已经丢在他背后了,丢在这个城市那边那一片无垠的混沌之中不知什么地方了,那里合众国的黑黝黝的田野在夜色中向前伸展。
盖茨比信奉这盏绿灯,这个一年年在我们眼前渐渐远去的极乐的未来。它从前逃脱了我们的追求,不过那没关系——明天我们跑得更快一点,把胳臂伸得更远一点……总有一天……
于是我们奋力向前划,逆流向上的小舟,不停地倒退,进入过去。

【美】菲茨杰拉德《了不起的盖茨比》 巫宁坤 译
(本段摘自全书结尾)

周刊 比尔·盖茨 zookeeper 分布式 开源软件 安全

如果你觉得本文不错,欢迎订阅“胡涂说”博客