纠正初学者关于流行技术的错误观念
公共学习
随着我不断学习,DEV 知道很多事情。问问他们吧。
在这篇文章中,我将尝试ELI5 一些我实际上并不了解或自己使用过的流行工具和技术,纯粹基于我从维基百科和博客文章中收集到的信息。
其中一些是由开源Apache 软件基金会管理的专门的分布式计算工具,作为业余爱好者/自学者,我从未接触过或有机会使用这类工具。
我希望您能告诉我我错在哪里,或者澄清我在这些事情上不可避免的不足之处:
Hadoop
Apache Hadoop是一款处理海量数据的工具。它将物理硬件从您正在运行的数据操作中抽象出来。Hadoop 负责对数据进行切分,并管理其在一组联网计算机上的存放位置,每台计算机都拥有独立且独立的内存和处理器。这组计算机被称为“集群”。这允许您进行水平扩展,因为软件会为您管理硬件的使用方式。水平扩展意味着添加更多组件,而垂直扩展则意味着增强现有组件的功能。您只需以较低的开销向 Hadoop 添加更多计算机即可上线,无需升级现有计算机即可获得更强大的性能。
与 Hadoop 交互的方法称为MapReduce。它之所以如此命名,是因为它包含一个“map”操作和一个“reduce”操作。“map”表示对序列中的每个元素(在本例中是分布在集群中的每块数据)应用该操作。“reduce”会将多个数据源处理成一个数据源,并合并每个数据源的结果。这与 Hadoopmap()
和reduce()
函数式编程方法类似,但不完全相同,后者专门用于在分布式计算环境中对工作负载进行分块。它之所以如此强大,是因为在“map”阶段,您已经实现了操作的并行化,集群中的每个节点都可以同时运行其对应的部分。
我一直想构建一个Raspberry Pi Hadoop 集群,但我不知道该用它做什么。
火花
Apache Spark是一个用于处理海量数据(类似于 MapReduce)的系统。MapReduce 在每台服务器上本地运行操作,而 Spark 则在内存中运行操作。Spark 在 Hadoop 集群中运行,通过以灵活的内存方式运行所有操作,从而加快了基本 MapReduce 模型的运行速度,减少了磁盘 I/O 操作(磁盘 I/O 可能会成为某些工作负载的瓶颈)。
Hadoop 和 Spark 都应用广泛,各有优势,但我了解的不够深入,无法详述。它们分别用于哪些类型的工作负载?这些底层设计差异又有何用处?既然 Spark 速度这么快,为什么不是所有Hadoop 集群都运行它呢?
更重要的是,我对这些东西的理解正确吗?
卡桑德拉
Apache Cassandra是一个类似MongoDB 的NoSQL数据库,旨在在分布式系统上运行,并支持 MapReduce 和 Hadoop。它使用自己的查询语言,类似于 SQL,称为CQL。
这就是我所得到的全部内容 - 如果您需要分布式系统中的 NoSQL 数据存储,这就是您要使用的内容。
卡夫卡
Apache Kafka是另一个分布式计算工具,它提供的是记录流。它有点像 Hadoop,因为记录流是从硬件中抽象出来的,Kafka 负责管理任何实际的物理映射——或者它运行在 Hadoop 集群上?这种特性允许这些流的传入“消费者”和“生产者”不必关心物理拓扑,并存储任何一台服务器都无法承受的庞大日志。流还可以通过某种方式连接并处理。它可以用作 RabbitMQ 等传统消息代理的替代品。
RabbitMQ
RabbitMQ是一个传统的消息代理。它提供队列,用于在大型系统中移动消息。这使得您可以将封装好的小型独立组件(如果您愿意,甚至可以使用不同的编程语言)组合成系统,并使用多种消息队列协议之一在它们之间传递所需的信息。这种模型称为面向消息的中间件(MOM),比庞大复杂的单片应用程序设计更易于扩展。
容器
容器是一种轻量级的操作系统虚拟化方法,无需模拟整台计算机。它允许您单独分发一组用户空间工具,而无需使用内核。当您进入容器时,它使用主机操作系统的内核与 CPU 和 RAM 交互,但会覆盖一个单独的用户空间,从而为正在运行的软件提供一个看起来像完全干净的操作系统的沙盒环境。这比传统的虚拟机更节省空间和资源,因为传统的虚拟机会窃取主机的部分资源,并在软件中模拟整台计算机来提供相同的效果。
Docker是容器化领域常用的PaaS ,它允许你使用名为Dockerfile的文本文件配置沙盒环境,并通过名为 的 YAML 文件编排多个容器docker-compose.yml
。这让你能够经济便捷地在完全独立、无菌且可复现的环境中运行应用程序的不同部分,例如 MySQL 数据库和 API 服务器。
Kubernetes
Kubernetes是容器之上的一层抽象,比 Kubernetes 更强大docker-compose.yml
。它是一个编排系统,让你不再以单个容器来思考庞大系统组件,而是以服务来思考。它创建并管理由相同容器组成的集群来运行这些服务。它可以通过启动新容器来管理负载,或关闭不需要的容器来自动扩展,从而帮助管理服务器成本。它还可以静默地终止并重启已进入中毒状态的容器。这听起来是个好主意——那么什么时候应该选择 Docker Compose 呢?
Redis
Redis是一个内存键值存储系统,支持各种抽象数据类型,例如列表和字符串,因此您可以直接在应用程序的编程语言中使用它来处理对象。它与标准关系型数据库的不同之处在于,您无需查询执行操作的引擎,只需直接在内存中对这些对象运行特定的操作即可。它既是数据存储,又是缓存,同时管理持久存储和快速的客户端数据检索。这允许您缓存用户请求,并避免重复请求访问服务器端数据库。我猜它也可以像 RabbitMQ 或 Kafka 那样用于消息传递。Redis 看起来很酷,它在我的 2020 年学习清单上,但我觉得自己对它还不够透彻。
照片由 stem.T4L 在 Unsplash 上拍摄
鏂囩珷鏉ユ簮锛�https://dev.to/decidously/ Correct-a-beginner-about-buzzword-technologies-4bbe