Google 内部工具:MapReduce; 替代品:Apache Hadoop、Spark
想要在上千台机器组成的大集群上、并行处理上 TB 级别的海量数据集,就要用到这类大规模数据处理工具了。
MapReduce,就是这类工具的先驱。Jeff Dean 等人 2004
年提出了这个分布式计算架构,最早在 Google 内部用来处理大规模数据的并行计算。Jeff Dean 还亲自为它撰写过使用指南。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wbuWRPCj-1647704837816)(//upload-images.jianshu.io/upload_images/18452536-7f8b1a13576c5d14.png?imageMogr2/auto-orient/strip|imageView2/2/w/400/format/webp)]
而 Apache Hadoop 这个开源替代品,也是根据 Jeff Dean 当年的论文自行实现而成,能提供与 MapReduce 文件系统类似的功能。
如果想要更快的数据处理速度,还有 Apache Spark 供你选择。相对于 Hadoop 的 MapReduce 会在运行完工作后将中介数据存放到磁盘中,Spark 使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。
序列化工具
Google 内部:Protocol Buffer; 外部替代品:Protobuf、Thrift、Avro
这一组工具用于结构化数据序列化,上面这些,都是 xml 替代品,比它更小、更快、也更简单。
Protocol Buffer 和 Protobuf 都是 Google 开发的序列化格式(Serialization Format),github 上可以找到这个项目的源代码。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5j0RKg3X-1647704837817)(//upload-images.jianshu.io/upload_images/18452536-3239a29bf7184916.jpeg?imageMogr2/auto-orient/strip|imageView2/2/w/660/format/webp)]
比起 XML 和 JSON,Protobuf 更小、更快,也更简洁,很适合做数据存储或 RPC 数据交换格式。只需要定义一次数据结构,就可以利用各种不同语言或者从各种不同数据流中对结构化数据进行轻松读写。
完全撇开 Google,也不是就没有别的选择了。其他厂商也有类似的序列化方案。
比如 Facebook 开发的 Thrift ,它与 Protobuf 基本一样。
Avro 同样也有 schema(也就是程序中结构化数据的定义),但是实现方式跟 Protobuf 和 Thrift 有很大区别。
由于数据不需要额外的标注,Avro 在序列化大量相同的数据时会比 Protobuf 和 Thrift 更有效率。不过在编码大量变化的数据时,因为 schema 会随数据一同存储,Avro 的效率会退化到 JSON 和 MessagePack 的级别。
看来在核心技术工具上,重回人间的前 Google 人还是有许多不错的选择的。
基础设施
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oJcOz43E-1647704837817)(//upload-images.jianshu.io/upload_images/18452536-b33794d959194b87.jpeg?imageMogr2/auto-orient/strip|imageView2/2/w/720/format/webp)]
大型集群管理系统
Google 内部:Borg;外部替代品:Kubernetes、Apache Mesos、HashiCorp Nomad
大型集群管理系统用于管理云平台中多个主机上的容器化的应用。
Borg 是 Google 内部的大型集群管理系统,现如今应用最广泛的服务编配系统 Kubernetes 就脱胎于 Borg。
Borg 让开发者能够不必操心资源管理的问题,做到跨多个数据中心的资源利用率最大化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPMXaMSI-1647704837818)(//upload-images.jianshu.io/upload_images/18452536-639c6f3b89670956.jpeg?imageMogr2/auto-orient/strip|imageView2/2/w/720/format/webp)]
没有 Borg 十五年的经验,也就不会有 Kubernetes。虽然作者把它放在开源 / 真实世界这一栏里,但事实上 Kubernetes 也是由 Google 设计并参与开发的。
Kubernetes 使用 Go 语言编写, 是一个大而全的解决方案,服务调度、网络、存储、安全通通一手抓,而且本身的架构也非常好,在上面做二次开发非常容易。
HashiCorp Nomad 同样是一个比较常见的开源调度程序,架构简单,能将资源管理器和调度程序的功能集成到一个系统中。Nomad 也是分布式的,高可用且易操作。但显然 Kubernetes 的功能会更丰富。
至于 Mesos,它仅仅是一个调度系统,无法直接使用,要配合各种 Mesos framework 来实现各类功能。
存储
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UctbDjkj-1647704837821)(//upload-images.jianshu.io/upload_images/18452536-1867e87d14ae9d13.jpeg?imageMogr2/auto-orient/strip|imageView2/2/w/720/format/webp)]
当然,Google 内部工具也不是所有的都能找到完美的替代品。
至少在存储这件事情上,就有网友不赞同原作者观点。他认为这份清单在一定程度上具有误导性,某些替代品根本达不到 Google 内部工具的水平。
比如将 Colossus 和 HDFS 对比是在开玩笑,相比之下,HDFS 就像是一个玩具。要说对比,它智能和十年前已经退役的 GFS 相当。
但 HDFS 恐怕是开源软件中 Colossus 最好的替代品,对于 “通用,大型,分布式文件系统” 的使用情况,很难找到有比 HDFS 更好的了。
其他开发工具
最后
下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术
高级UI,自定义View
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
[外链图片转存中…(img-33H4t6We-1647704837823)]