• GitHub 标星 6.2k+!前 Google 工程师出品,最佳开发工具大全!


    关注 “五分钟学算法”

    设为 “星标”,带你逛 GitHub!

    640?wx_fmt=png

    转自量子位,作者晓查、栗子、方驭洋

    一位曾经的谷歌工程师,花费两年时间,辛苦整理了一份清单。

    这个名为 “xg2xg” 的清单,原本是这位前谷歌工程师(ex-Googler),为所有离职的谷歌工程师写的一份 “厂外” 生存指南。

    但实际上,这个大全实打实地也成为了一份最佳开发工具大全

    所有的程序员,都能受益于此。

    640?wx_fmt=png

    https://github.com/jhuangtw-dev/xg2xg

    美国网友对这个大全给予了很高的评价:这份清单中列出的开源软件,不仅解决了硅谷大厂前员工的难处,也能为其他所有码农解除困惑。

    在这套大全的指导下,任何一个工程师,都能获得类似在谷歌内部写代码的体验。xg2xg 上线仅仅一天就登上趋势榜,截至今天,已在 GitHub 收获 6200+ Star!

    清单其中大部分替代软件是 Google 开源的项目,或者是受谷歌论文的启发,由开源软件基金会自己做的第三方实现。即使你从来没进过 Google 工作,也在享受着 Google 工程师们带来的福利。不禁让人感叹 “谷歌拯救世界”。

    下面就让我们一起来看看这份清单吧。

    开发工具一览

    这份清单总共有两部分,前半部分介绍的是码农常用的开发工具,包括核心技术、基础设施、服务、开发运维等;后半部分则面向非技术人员。

    核心技术工具

    640?wx_fmt=png

    大数据处理工具

    Google 内部工具:MapReduce;替代品:Apache Hadoop、Spark

    想要在上千台机器组成的大集群上、并行处理上 TB 级别的海量数据集,就要用到这类大规模数据处理工具了。

    MapReduce,就是这类工具的先驱。Jeff Dean 等人 2004 年提出了这个分布式计算架构,最早在 Google 内部用来处理大规模数据的并行计算。Jeff Dean 还亲自为它撰写过使用指南。

    640?wx_fmt=png

    而 Apache Hadoop 这个开源替代品,也是根据 Jeff Dean 当年的论文自行实现而成,能提供与 MapReduce 文件系统类似的功能。

    如果想要更快的数据处理速度,还有 Apache Spark 供你选择。相对于 Hadoop 的 MapReduce 会在运行完工作后将中介数据存放到磁盘中,Spark 使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。

    序列化工具

    Google 内部:Protocol Buffer;外部替代品:Protobuf、Thrift、Avro

    这一组工具用于结构化数据序列化,上面这些,都是 xml 替代品,比它更小、更快、也更简单。

    Protocol Buffer 和 Protobuf 都是 Google 开发的序列化格式(Serialization Format),github 上可以找到这个项目的源代码。

    640?wx_fmt=png

    比起 XML 和 JSON,Protobuf 更小、更快,也更简洁,很适合做数据存储或 RPC 数据交换格式。只需要定义一次数据结构,就可以利用各种不同语言或者从各种不同数据流中对结构化数据进行轻松读写。

    完全撇开 Google,也不是就没有别的选择了。其他厂商也有类似的序列化方案。

    比如 Facebook 开发的 Thrift ,它与 Protobuf 基本一样。

    Avro 同样也有 schema(也就是程序中结构化数据的定义),但是实现方式跟 Protobuf 和 Thrift 有很大区别。

    由于数据不需要额外的标注,Avro 在序列化大量相同的数据时会比 Protobuf 和 Thrift 更有效率。不过在编码大量变化的数据时,因为 schema 会随数据一同存储,Avro 的效率会退化到 JSON 和 MessagePack 的级别。

    看来在核心技术工具上,重回人间的前 Google 人还是有许多不错的选择的。

    基础设施

    640?wx_fmt=png

    大型集群管理系统

    Google 内部:Borg;外部替代品:Kubernetes、Apache Mesos、HashiCorp Nomad

    大型集群管理系统用于管理云平台中多个主机上的容器化的应用。

    Borg 是 Google 内部的大型集群管理系统,现如今应用最广泛的服务编配系统 Kubernetes 就脱胎于 Borg。

    Borg 让开发者能够不必操心资源管理的问题,做到跨多个数据中心的资源利用率最大化。

    640?wx_fmt=png

    没有 Borg 十五年的经验,也就不会有 Kubernetes。虽然作者把它放在开源 / 真实世界这一栏里,但事实上 Kubernetes 也是由 Google 设计并参与开发的。

    Kubernetes 使用 Go 语言编写, 是一个大而全的解决方案,服务调度、网络、存储、安全通通一手抓,而且本身的架构也非常好,在上面做二次开发非常容易。

    HashiCorp Nomad 同样是一个比较常见的开源调度程序,架构简单,能将资源管理器和调度程序的功能集成到一个系统中。Nomad 也是分布式的,高可用且易操作。但显然 Kubernetes 的功能会更丰富。

    至于 Mesos,它仅仅是一个调度系统,无法直接使用,要配合各种 Mesos framework 来实现各类功能。

    存储

    640?wx_fmt=png

    当然,Google 内部工具也不是所有的都能找到完美的替代品。

    至少在存储这件事情上,就有网友不赞同原作者观点。他认为这份清单在一定程度上具有误导性,某些替代品根本达不到 Google 内部工具的水平。

    比如将 Colossus 和 HDFS 对比是在开玩笑,相比之下,HDFS 就像是一个玩具。要说对比,它智能和十年前已经退役的 GFS 相当。

    但 HDFS 恐怕是开源软件中 Colossus 最好的替代品,对于 “通用,大型,分布式文件系统” 的使用情况,很难找到有比 HDFS 更好的了。

    其他开发工具

    列表中还有服务、开发运维、安全等工具的替代品清单,由于篇幅限制,我们不再一一介绍,有需求的同学可以自取。全部工具的下载链接请参阅文末的 GitHub 地址。

    640?wx_fmt=png

    还有什么福利

    如果你不是工程师,上面那些工具大概就用不上了。不过,只要是个公司或者团队,总会有 IT 和运营需求。

    比如说,饭总是要吃的

    很多网友看了这份清单,最感兴趣的就是这一项:

    离开 Google 的人类,再也找不回免费食堂。

    毕竟,“中午吃什么” 的哲学问题,每次想起来都是折磨。

    640?wx_fmt=jpeg

    羡慕的时候,可以用以下口令来安慰自己:

    公司有吃的,还不是为了让你们多点时间工作?

    如果你觉得这一条说服力不够,还可以跟一句补充说明:

    Google 最初是为什么提供免费食物的?就是山景城总部周围吃的选择太少了,开车出去吃来回要一小时。对,就是想让员工省下时间好好上班。

    吃,只是 IT / 运营章节的第一条。

    后面,还有梗图生成器 Memegen

    640?wx_fmt=png

    工作太辛苦的时候,可以皮一下:

    640?wx_fmt=jpeg

     当没有 GPU 的人,遇到了 Google Colab

    对此,甚至有人呼吁:

    如果 Google 全家桶把 Memegen 收了就好了。 

    所以,这个章节并没有和工作相关的资源么?

    看看完整列表的话,还是能找到的:

    640?wx_fmt=png

    有一些必要的小工具。

    比如,CODEOWNERS 可以用来指定哪些用户来审查代码,1Password 是个密码管理器。

    也有一些同学,没在上面找到自己需要的答案,便直接提问了:

    Google 这样的大厂,公司内部 wiki 用的是什么啊? 我们公司用的是 Quip,它就是个黑洞,文档一进去就出不来了。

    640?wx_fmt=jpeg

    然后,有热心人士回答了这个问题:

    虽然不知道 Google 用的什么,但 Confluence 是很常用的。

    除此之外,你还用过哪些比较实用的开发者工具呢?

    ---
    以上,便是今日分享,觉得不错,还请点个在看,谢谢~
    推荐阅读:



    啦,欢迎点击阅读原文进行访问~

  • 相关阅读:
    爱奇艺笔试题 输出01020304... ...
    ThreadPoolExecutor 中为什么WorkQueue会在corePoolSize满了之后入队
    jvisualvm 的使用
    连续子数组的最大和
    最长连续子序列
    leetcode 需要了解的知识点储备
    java String
    mysql MVCC
    java 批量导出(zip文件)
    java 中接口调用
  • 原文地址:https://www.cnblogs.com/csnd/p/16675142.html
Copyright © 2020-2023  润新知