DevOps 实用指南(一)

原文:annas-archive.org/md5/6b2697194400cac9f70f257dcd39ad77

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

DevOps 和大数据是最受追捧的技术趋势,为企业、行业和研发中心带来多方面的好处。它们的广泛采用与开源工具的流行和接受度,以及云计算、容器和物联网等其他技术进步密切相关。

在本书中,我们将讨论推动技术发展的商业驱动因素和市场趋势。我们将探讨关键的技术概念,如 NoSQL 数据库、微服务、数据科学和数据可视化。我们将基于 Spark 内存引擎,利用核心架构原则构建大数据企业应用。我们将讨论 DevOps 实践和框架,并通过流行工具的应用,准备进行持续集成、持续交付和持续部署。我们将深入研究流行的开源工具,如 Chef、Ansible、Jenkins、Git 和 Stack,它们在开发到部署周期的自动化中起到了重要作用。

本书在每个机会中介绍了流行供应商的不同版本,包括关键组件和区别。这将为读者提供帮助决策的信息。讨论的技术选择包括 Hadoop 平台、云产品、容器和编排服务、物联网平台以及 NoSQL 数据库。还详细讨论了流行工具在持续集成、交付、部署和监控中的选择。此外,还涉及了关于 Hadoop 集群的容量规划以及数据和云安全模型的主题,以帮助读者全面了解这些内容。

讨论了不同系统(包括大数据系统、云平台、微服务、数据科学、安全认证和物联网平台)向 DevOps 迁移的策略。同时还分享了 ERP 系统向 DevOps 迁移的详细测试策略。

本书尽力帮助读者从实际应用角度学习广泛的技术、工具和平台发展、框架和方法论。我相信读者会从多个角度发现它既有趣又有用。

本书内容

第一章,DevOps 简介,重点讨论了推动 DevOps 演变的商业趋势、驱动因素和市场动力。介绍了大数据、云计算、数据科学和内存计算的关键技术概念。还呈现了 DevOps 的应用场景以及其对组织采用的好处。

第二章,大数据与数据科学概论,从大数据概念的介绍开始,讨论了实时系统中内存数据库的特点,并展示了适用于不同用途的 NoSQL 数据库类型,以及与数据可视化、数据科学和数据科学家角色相关的概念。

第三章,DevOps 框架,讨论了源代码管理、构建、代码库、发布管理和测试自动化等内容。涵盖了持续集成、交付和部署,以及用于配置的基础设施自动化(基础设施即代码)、应用监控等内容。还讨论了 DevOps 成熟度模型、进展框架和敏捷方法论。

第四章,大数据 Hadoop 生态系统,重点介绍了大数据集群的概念,如数据湖、处理框架、节点类型、角色、容量规划、安全性和认证。讨论了不同的 Hadoop 框架版本(Cloudera、Hortonworks、MapR、Pivotal、IBM Open Platform、Amazon Elastic Mapreduce 和 Microsoft Azure HDInsight)。

第五章,云计算,讨论了云技术概念,如虚拟化和虚拟机监控程序,并介绍了像 REST API 这样的 WEB 协议。还讨论了云架构层和组件,并展示了不同的云模型,如私有云、公共云和混合云。详细介绍了 IaaS、PaaS、SaaS 及其变种。还讨论了基于云供应商的服务中包含的功能,如安全性、加密和业务连续性模型。

第六章,构建大数据应用程序,讨论了生命周期阶段,如数据发现、质量、摄取、分析、可视化、治理及其最佳实践。还讨论了批处理和实时数据摄取模型及相应的工具。讨论了数据存储概念,如数据湖、数据分析、Spark 内存引擎等。核心架构组件,如工作流、安全性、数据目录、客户端服务和 API 也有介绍。数据科学算法及其商业用途/应用、不同模型,如决策树、聚类、监督学习和无监督学习等也得到了充分覆盖。

第七章,DevOps - 持续集成与交付,讨论了 CI/CD 方法论,并介绍了像 Git、Maven、Gerrit、Nexus、Selenium 和 Jenkins 等流行的开源工具。还讨论了与 Jenkins 兼容的不同工具和插件。

第八章,DevOps 持续部署,展示了流行的持续部署工具 Ansible 和 Chef;详细讨论了它们的高级功能,如 Habitat、Automate 和 Compliance 用于安全性。详细阐述了核心组件、架构和术语(Chef、cookbooks、knife、Playbooks、towers)。深入介绍了持续监控工具 Splunk 和 Nagios。

第九章,容器、物联网和微服务,涵盖了虚拟化、容器、编排、物联网(IoT)、微服务、虚拟化监控和仿真。详细介绍了多个供应商提供的容器(AWS、Google、Pivotal 和 Azure),包括 J2EE 和 Docker 等开源技术的组件级别。讨论了编排工具(Mesos、Kubernetes 和 Docker Swarm)。介绍了多个 IoT 平台,包括商业供应商(ThingWorx、Electric Imp 和 Predix)和开源平台(Eclipse 和 Contiki)。详细描述了微服务设计模式、架构模型、客户端和服务器端服务模型以及最佳实践。

第十章,数字化转型的 DevOps,详细介绍了企业系统(如大数据、云、数据科学、物联网和安全认证系统)的数字化旅程细节,以及面向渐进采纳的挑战和最佳实践。详细阐述了微服务模型及其不同的模式和模型。

附录 A,ERP 系统的 DevOps 采用,讨论了像 SAP 这样的 ERP 系统如何采用 DevOps 进程,并使用 Jenkins 和 Git 等开源工具来提高效率。

附录 B,DevOps 周期表,以周期表形式展示了许多开源 DevOps 工具,涵盖了开发、部署和监控的各个阶段。

附录 C,商业智能趋势,展示了优先级的转变,我们可以看到数据准备和发现被评为主数据管理的高附加值。

附录 D,测试类型和级别,向我们展示了每个层次(DB、APP 和 UI)的端到端测试周期。详细讨论了各种测试类型。

附录 E,Java 平台 SE 8,展示了 Java 企业版分层架构组件供参考。

本书所需内容

本书适合具备软件开发生命周期和系统基础知识的读者。它将帮助读者理解基本的主题,并欣赏各种技术的应用。对于云服务、大数据集群、Hadoop 应用、微服务、容器、安全性以及数字化迁移等高级概念,需要了解架构知识。

本书适合谁阅读

如果你是大数据架构师、解决方案提供者或在大数据环境中工作的任何利益相关者,并希望实施 DevOps 策略,那么本书适合你。

约定

本书中,你会看到几种不同的文本样式,用以区分不同种类的信息。以下是一些样式的示例及其含义的解释。文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 用户名如下所示:“例如——sqoop import -connect jdbc:mysql://:/ -username -password --table --target-dir

一段代码块的格式如下:

 - hosts: webservers
serial: 6 # update 6 machines at a time
roles:
- common
- webapp
- hosts: content_servers 

任何命令行输入或输出的格式如下所示:

C:>Java -jar Jenkins.war 

新术语重要词汇以粗体显示。你在屏幕上看到的文字,例如菜单或对话框中的文字,都会以这样的格式出现在文本中:“仪表板中的管理 Jenkins 选项将提供配置各种参数的多种选项。”

警告或重要提示如下所示。

小贴士和技巧如下所示。

读者反馈

我们始终欢迎读者的反馈。让我们知道你对本书的看法——你喜欢或不喜欢什么。读者反馈对我们非常重要,因为它帮助我们开发你真正能够从中获得最大收益的书籍。如果你有任何一般性的反馈,只需发送邮件至feedback@packtpub.com,并在邮件主题中提到书名。如果你对某个主题有专业知识,并且有兴趣撰写或贡献一本书,请参阅我们的作者指南,网址为www.packtpub.com/authors

客户支持

现在,作为 Packt 书籍的骄傲拥有者,我们为你准备了一些帮助,帮助你最大程度地利用你的购买。

下载本书的彩色图像

我们还提供了一份 PDF 文件,包含本书中使用的截图/图表的彩色图像。这些彩色图像将帮助你更好地理解输出中的变化。你可以从www.packtpub.com/sites/default/files/downloads/HandsonDevOps_ColorImages.pdf下载该文件。

勘误

尽管我们已经尽最大努力确保内容的准确性,但错误还是会发生。如果您在我们的书籍中发现错误——可能是文本或代码中的错误——我们将非常感激您能报告给我们。通过这样做,您可以帮助其他读者避免困扰,并帮助我们改进后续版本。如果您发现任何勘误,请访问www.packtpub.com/submit-errata,选择您的书籍,点击“勘误提交表单”链接,并输入您的勘误详情。一旦您的勘误得到验证,您的提交将被接受,勘误将上传到我们的网站或加入该书的勘误列表中。要查看以前提交的勘误,请访问www.packtpub.com/books/content/support,并在搜索框中输入书名。所需信息将显示在勘误部分。

盗版

互联网上的版权作品盗版问题在所有媒体中都是一个持续存在的问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现我们的作品以任何形式的非法复制,请立即提供相关的网址或网站名称,以便我们采取措施。请通过copyright@packtpub.com与我们联系,并提供可疑盗版内容的链接。感谢您的帮助,帮助我们保护作者和确保我们能够为您提供有价值的内容。

问题

如果您对本书的任何内容有问题,您可以通过questions@packtpub.com与我们联系,我们将尽力解决您的问题。

第一章:DevOps 简介

在传统的应用程序开发和维护方法中,多个利益相关者、部门、团队和供应商参与了整体的软件开发生命周期SDLC)。我们大多数人都熟悉应用生命周期管理的各个阶段:业务分析师收集业务需求,然后由开发团队开发(或可能外包),由 QA 团队测试(也可能外包)功能和适用性。在适用的情况下,还会进行性能和压力测试,由相关的团队使用相关的工具进行。接着,生产部署过程会通过 IT 团队进行管理,使用检查表和审批流程,之后由维护团队进行监控和支持。我们会发现,从功能开发到可用性和维护的每个成熟周期阶段,都是由独立的团队、部门、流程和工具在孤岛中管理的。这种方法往往由于技术、框架、流程、人员和工具的影响,导致最终产品在功能、成本、进度、质量、性能以及与供应商之间的接口和集成等行政开销上产生影响。此外,在这种方法中,维护、支持成本和技能需求往往被忽视。然而,从应用生命周期和业务角度来看,维护和支持活动是关键的,且需要提前评估、估算和充分考虑。

本章将涵盖以下主题:

  • DevOps 简介

  • DevOps 的业务应用

  • 业务驱动因素/市场趋势

  • DevOps 战略

  • DevOps 的好处

在几乎每个领域,许多技术创新已经发生,挑战着传统的 IT 管理方法。技术的进步和变化是深刻的、迅速的,并且通常是交织在一起的,涉及多个领域,如敏捷方法论、DevOps、大数据、云计算等。全面和整体的方法无疑将带来回报,并为组织带来最大价值。许多机构已经开始采用这些技术,迈向未来的征程。

在 DevOps 之前,软件开发面临的挑战包括系统的抗拒变更;部署充满风险,环境间缺乏一致性(它在我的机器上能运行症状),孤岛效应的影响——例如团队之间相互传递问题,导致重复工作、技能集重复以及内部争斗。为了解决上述问题并弥合这个差距,DevOps 作为一种流行的选择应运而生。

DevOps(开发加运维)最近在 SDLC 中占据了核心地位。DevOps 提供了一个通过开源工具增强的过程框架,用于整合应用生命周期的所有阶段,并确保它们作为一个统一的单元运作。它有助于在开发、测试、部署和支持的各个阶段对过程进行对齐和自动化。它包括诸如代码仓库、构建自动化、持续部署等最佳实践。

DevOps 在包括大数据系统和项目在内的系统中的应用,是与传统开发周期相比的一种文化转变。本书的目的是提出组织的概念和采纳策略,涵盖 DevOps、大数据、云、数据科学、内存技术等技术领域。采纳并遵守 DevOps 实践将为任何组织带来回报,并帮助其提高绩效和效率。

各个 IT 功能领域对开源工具的接受度、其受欢迎程度和多功能性,正在全球范围内日益增加。事实上,许多新型的工具变体已被引入市场,针对每个领域。DevOps 的开源工具是 DevOps 在市场中成功被机构采纳的主要推动力,接下来的部分将详细讨论这一点。

如我们所见,各行各业的 DevOps 采纳在每年都稳步增长:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据以下图示,DevOps 在企业中的渗透显示出健康的趋势:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DevOps 应用 - 商业场景

DevOps 的应用因多种场景而有所不同,以下是其积累的好处:

  • 开发周期的自动化:通过最小的人工干预满足业务需求,开发人员可以通过代码仓库使用开放工具运行构建;QA 团队可以创建一个作为复制品的 QA 系统,并将其无缝快速地部署到生产环境中。

  • 单一的真相版本 - 源代码管理虽然有多个版本的代码,但很难确定哪个版本适用于特定目的。我们缺乏一个单一的真相版本。代码评审反馈通过电子邮件进行且没有记录,导致混乱和返工。

  • 一致的配置管理:我们在不同的系统上开发、测试和构建源代码。验证平台和依赖关系的兼容版本是手动的,容易出错。确保所有系统使用相同的语言,具有相同版本的工具、编译器等是非常具有挑战性的。我们的代码在构建系统上运行正常,但在移至生产系统时却无法正常工作,导致关于业务交付的尴尬,以及为响应而产生的成本开销。

  • 产品准备就绪我们有一个开发代码、测试和构建的过程,并且有明确的时间节点。这个过程中有很多手动检查和验证;不同团队之间的整合导致我们的承诺和交付日期变得不可预测。我们希望定期了解我们的产品离交付还有多远以及它的质量,以便提前规划,而不是被动应对。

  • 手动过程自动化:我们正在遵循手动过程,这些过程常常容易出错,希望通过在适用的地方遵循自动化过程来提高效率。测试周期自动化、增量测试和与构建周期的集成将加速产品质量、发布周期,以及基础设施服务的自动化,例如创建、启动、停止、删除、终止和重启虚拟机或裸机。

  • 容器化代码的可移植性是主要挑战。代码在开发和 QA 环境中可以运行,但迁移到生产系统时会遇到许多问题,例如由于依赖问题导致代码无法编译,构建失败等。构建平台无关的代码是一个挑战,而维护多个平台版本的开发和 QA 平台则是一个巨大的负担。可移植的容器代码可以缓解这些问题。

  • 本地化挑战:我们有许多本地系统。从容量规划到周转时间,都存在多种挑战。资本支出和运营费用是不可预测的。云迁移似乎有多种选择和供应商,因此需要有效的采纳方法来确保结果。

DevOps 采用大数据的商业驱动因素

促使大数据系统广泛流行和采纳 DevOps 的因素列举如下。

数据爆炸

数据是新型货币——没错,你没看错,它和石油、黄金一样,都是一种宝贵的资产。在过去十年里,许多公司意识到数据作为一种无价资产对其增长和业绩的潜力。

让我们了解数据为何如此重要。对于任何组织来说,数据可以有多种形式,例如客户数据、产品数据、员工数据等。如果没有关于员工、客户或产品的正确数据,后果可能是灾难性的。正确的数据是有效经营企业的基本知识和常识。如今几乎没有企业不依赖于数据驱动的决策;现如今,CEO 们比以往任何时候都更加依赖数据来做出商业决策,例如哪个产品在市场上更成功,哪个地区的需求量更大,哪个价格更具竞争力,等等。

数据可以通过多种渠道生成,包括内部数据、外部数据甚至社交媒体数据。内部数据是通过内部系统和操作生成的数据,例如在银行中,通过多个渠道如 ATM、在线支付、购买等,新增客户或进行客户交易。外部数据来源可能是从印度储备银行(RBI)获取黄金汇率和外汇汇率等数据。如今,社交媒体数据广泛用于产品的营销和客户反馈。智能地利用来自各个渠道的数据是商业成功的关键。

更进一步,部分公司甚至将数据变现,例如 Healthcare IQ、Owens & Minor、State Street Global Corporation、Ad Juggler、comScore、Verisk Analytics、Nielsen 和 LexisNexis。这些组织购买原始数据,如在线产品销售的网页分析数据,或每个品牌的在线搜索记录,再将这些数据重新处理成有组织的格式,出售给需要竞争情报数据以重新定位产品市场的研究分析师或组织。

让我们分析一下推动数据和商业增长的因素。市场和客户行为的根本变化对数据爆炸产生了显著影响。一些关键的变化驱动力包括:

  • 客户偏好:如今,客户有多种方式与企业互动;例如,银行提供多个渠道,如 ATM 提款、在线银行、移动银行、卡支付、现场银行等。购买方式也是如此,可以是在商店、在线或基于移动设备的,这些渠道都需要企业维护以进行业务运营。因此,这些多个渠道促成了数据管理的增加。

  • 社交媒体:数据正源源不断地从社交媒体涌入,如 Facebook、LinkedIn 和 Twitter。一方面,它们是个人之间的社交互动网站;另一方面,企业也依赖社交媒体来推广他们的产品。以 TB 或 PB 级别发布的数据反过来被许多组织用于数据挖掘。这正在促进数据的爆炸性增长。

  • 监管:公司需要按照监管机构的要求,以适当的格式存储数据,并保持一段规定时间。例如,为了打击洗钱,每个从事金融业务的组织都需要保留清晰的客户记录和凭证,以便在较长时间内(如 10 到 15 年)与监管机构共享。

  • 数字化世界:随着我们向无纸化的数字世界迈进,我们不断增加更多的数字数据,如电子书和企业资源计划(ERP)应用程序,以自动化许多任务并避免纸质工作。这些创新也正在推动数字数据增长。

下一代将更加依赖数据,物联网和数据科学处于前沿,推动着商业和客户的优先事项。

云计算

云平台作为事实上的服务线的接受带来了许多基础设施采购和管理方面的变化。将硬件和其他类型的商品化工作迁移到云端对于提高效率也至关重要,因为将这些 IT 功能迁移到云端可以提升服务效率,并且使 IT 部门能够将注意力从操作系统的修补上转移开。随着云的采用,DevOps 成为了最广泛实施的流行选择。随着云的普及,基础设施/服务器的添加变得触手可及。这一点,再加上可信的开源工具,为 DevOps 铺平了道路。

在短短的时间内,可以使用开源工具添加构建、QA 和预生产机器,并根据需要进行精确的复制和配置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大数据

大数据是用来表示数据的多个维度,如大容量、高速和多样性,并为业务提供价值的数据术语。数据来自多个来源,如结构化、半结构化和非结构化数据。数据的速度可以是批量模式、来自机器传感器或在线服务器日志的实时数据,甚至是实时流式数据。数据的体积可以是 TB 或 PB,通常存储在基于 Hadoop 的存储和其他开源平台上。大数据分析还扩展到了建立社交媒体分析,例如基于 Twitter、LinkedIn、Facebook 等社交媒体数据的市场情绪分析;这些数据有助于了解客户情绪,并支持市场营销和客户服务活动。

数据科学与机器学习

数据科学作为一个领域有许多维度和应用。我们熟悉科学;我们理解通过建立可重用的、已确立的公式而产生的特征、行为模式和有意义的见解。以类似的方式,数据也可以通过工程学和统计方法进行研究,以了解行为模式和有意义的见解。因此,它可以被看作是数据+科学,或者说是数据的科学。机器学习是数据提取、提取、转换、加载ETL)或提取、加载、转换ELT)准备的结合,并使用预测算法从数据中提取有意义的模式,以生成商业价值。这些项目具有与项目或产品开发一致的开发生命周期。与 DevOps 方法论的对齐将为程序的演进提供有价值的益处。

内存计算

传统的软件架构以前基于磁盘作为主要的数据存储;随后,数据从磁盘转移到主内存和 CPU,以执行业务逻辑的聚合操作。这造成了大批量数据从磁盘到内存单元来回移动的 IO 开销。

内存技术基于硬件和软件创新,将完整的商业应用数据处理在主内存中,因此计算速度非常快。为了实现内存计算,许多底层硬件和软件的进步做出了贡献。

软件进展包括以下内容:

  • 数据分区

  • 没有汇总表

  • 插入唯一的增量

  • 数据压缩

  • 行与列存储

硬件进展包括以下内容:

  • 多核架构支持大规模并行扩展

  • 多重压缩

  • 主内存具有可扩展的容量

  • 快速预取无限大小

我们将在接下来的章节中详细阐述这些内容。

规划 DevOps 战略

本书讨论的良好 DevOps 战略帮助用户深入理解主题,并将其应用于多种技术和接口,使组织提供聚焦,形成对当前问题的共同(无偏)视角,发展未来状态,揭示增长机会,最终产生更好的商业成果。

一个全面的 DevOps 战略,在最基本的层面,必须回答以下问题:

  • 我们的商业目标是什么?

  • 我们如何规划路线图?我们从哪里开始?

  • 我们应该如何集中我们的努力?

  • 我们试图达成什么目标?

  • 这一进度表是什么?

  • 这对业务的影响是什么?

  • 我们的利益相关者如何看待这一价值?

  • 做这件事的好处与成本是什么?

一个良好的 DevOps 战略将为组织带来多重好处,将精力集中在高影响问题上,清晰地制定未来状态,识别增长机会,为更好的商业成果铺平道路。

DevOps 平台战略将是一个独特且广泛的程序,涵盖软件生命周期的各个方面,集成多种技术、平台和工具,面对许多需要用技巧、精确度和经验来处理的挑战。

一个组织可以考虑引入 DevOps 来满足特定需求,例如以下目的:

  • 自动化基础设施和工作流配置管理

  • 自动化代码库、构建、测试和工作流

  • 持续集成和部署

  • 虚拟化、容器化和负载均衡

  • 大数据和社交媒体项目

  • 机器学习项目

有许多种开源工具可供选择,以在 DevOps 的特定领域中进行采纳,例如以下工具:

  • Docker:Docker 容器将应用程序及其依赖项打包在一个箱子里。它作为主机操作系统上的隔离进程运行,共享内核与另一个容器。它享有像虚拟机一样的资源隔离和分配优势,但更便捷和高效。

  • Kubernetes: Kubernetes 是一个用于 Docker 容器的开源编排系统。它将容器分组成逻辑单元以便易于管理和发现,在节点上处理调度,并积极管理工作负载,以确保其状态与用户声明的意图匹配。

  • Jenkins: Jenkins 是一个通过应用程序或像 Tomcat 这样的 Web 服务器进行使用的 Web 启用工具,用于持续构建、部署和测试,并与构建工具(如 Ant/Maven)和源代码库 Git 集成。它还具有主节点和从节点。

  • Ansible: Ansible 自动化软件的供应、配置管理和应用程序部署,采用无代理、Secured Shell (SSH)模式,Playbooks、Towers 和 Yum 脚本是其机制。

  • Chef 和 Puppet: Chef 和 Puppet 是基于代理的拉取机制,用于工作单元的部署自动化。

  • GitHub: Git 是一种流行的开源版本控制系统。它是一个基于 Web 的托管服务,用于 Git 仓库。GitHub 允许您托管远程 Git 仓库,并具有丰富的基于社区的服务,使其成为开源项目的理想选择。

有各种可用的全面框架,如 RedHat Openshift、Microsoft Azure 和 AWS 容器服务,配备预集成和配置的工具以实施。

这里列出了一些流行的开源工具:

  • 源代码管理: Git、GitHub、Subversion、Bitbucket

  • 构建管理: Maven、Ant、Make、MSBuild

  • 测试工具: JUnit、Selenium、Cucumber、QUnit

  • 仓库管理: Nexus、Artifactory、Docker hub

  • 持续集成: Jenkins、Bamboo、TeamCity、Visual Studio

  • 配置供应: Chef、Puppet、Ansible、Salt

  • 发布管理: Visual Studio、Serena Release、StackStorm

  • : AWS、Azure、OpenShift、Rackspace

  • 部署管理: Rapid Deploy、Code Deploy、Elastic box

  • 协作: Jira、Team Foundation、Slack

  • BI/监控: Kibana、Elasticsearch、Nagios

  • 日志: Splunk、Logentries、Logstash

  • 容器: Linux、Docker、Kubernetes、Swam、AWS、Azure

我们将深入探讨 DevOps 框架、成熟模型及在相应上下文中应用这些工具的章节。

DevOps 的好处

对于以下原因,组织不遵循 DevOps 实践将是具有挑战性的:

  • 对于开发、QA 和生产系统的每一次部署都需要高投入

  • 复杂的手动安装过程既繁琐又昂贵

  • 缺乏全面的操作手册使得系统难以操作

  • 缺乏足够的跟踪或日志文件细节使得故障排除不完整

  • 未评估其他应用程序的性能影响的应用程序特定问题

  • 根据业务应用程序要求的 SLA 遵守,将是具有挑战性的

  • 在隔离环境中监视服务器、文件系统、数据库和应用程序将存在漏洞

  • 在独立环境中,为故障转移而进行的业务应用冗余是昂贵的

DevOps 在大数据系统中的应用和成熟将为组织带来以下好处:

  • DevOps 流程可以作为独立流程实施,或与其他流程结合使用

  • 自动化框架将提高业务效率

  • DevOps 框架有助于在应用程序代码中构建弹性

  • DevOps 流程包含了针对操作要求的 SLA(服务水平协议)

  • 操作手册(runbook)在开发过程中准备,以支持运营

  • 在成熟的 DevOps 流程中,基于操作手册(runbook)的开发已经集成

  • 在 DevOps 流程中,特定应用的监控是开发过程的一部分

  • DevOps 规划考虑了高可用性和灾难恢复技术

  • 弹性与技术特性相一致地被构建到应用程序代码中

  • DevOps 全脚本安装实现完全自动化部署

  • DevOps 运维团队和开发人员熟悉使用日志框架

  • 非功能性需求,如可操作性、维护性和监控,得到了充分关注,并与系统开发规范相结合

  • 持续集成和持续交付消除了人为错误,减少了升级时的计划停机,并促进了生产力的提升

总结

本章我们了解了 DevOps 的概念、主要市场趋势,以及推动 DevOps 在大数据、云计算、数据科学等系统中应用的商业驱动因素。并展示了包含大量 DevOps 应用示例的商业场景。接下来的章节将详细介绍如何使用流行的开源工具实现 DevOps 的应用,从而极大提高组织的生产力。

在下一章,我们将讨论大数据、内存技术、数据科学技术以及数据可视化技术的概念。

第二章:大数据与数据科学简介

我们将讨论一些关键的技术概念,如内存计算和 NoSQL 数据库,这些都是大数据主题的基石,此外还会涉及数据可视化和数据科学的概念。这些概念对于初学者来说非常有价值,并且在未来的章节中构建大数据应用时会受到赞赏。熟悉这些概念的读者可以选择跳过本节。在本章中,我们将涵盖以下主题:

  • 大数据特性

  • 内存计算概念

  • NoSQL 数据库

  • 数据可视化

  • 数据科学

大数据

大数据在各行业、学术界、组织和个人中有许多解释和定义。这是一个非常广泛且不断发展的领域,许多组织以某种形式采用大数据来补充现有的分析和业务工具。大数据系统主要用于从数据中提取有意义的价值和隐藏的模式。它们还用于补充不同类型的传统工作负载,从而实现规模经济,降低成本。大数据的三大主要来源是人类、组织和传感器。

大数据系统的特点包括一些属性,如数据量、数据速度、数据的多样性和价值;其他特征包括真实性、有效性、波动性和可视化:

  • 价值:大数据的最终目标是通过大数据项目的所有分析,为公司创造一定的商业价值和目的。

  • 数据量:大数据系统的规模可以根据业务需求扩展,达到千兆字节、太字节、拍字节、艾字节、泽字节等。每个企业有不同的规模需求;例如,企业资源计划ERP)系统可能涉及到千兆字节的数据,而物联网IoT)和机器传感器数据可能涉及到拍字节的数据。

  • 数据速度:数据访问的速度可以是批处理作业、定期处理、接近实时、实时数据,如来自 Web 服务器日志的数据、实时视频和多媒体流数据、物联网传感器信息、天气预报等。我们可以将每分钟每一天由一个组织发送的短信数量、Facebook 状态更新或信用卡刷卡次数相关联。

  • 数据的多样性:数据的多样性是大数据的关键组成部分之一。数据可以有多种形式,例如,类似销售发票报表日期、销售金额、商店 ID、商店地址等的结构化数据,这些数据可以轻松适应传统的关系型数据库管理系统(RDBMS);半结构化数据,如网页或服务器日志、机器传感器数据和移动设备数据;非结构化数据,如社交媒体数据,包括 Twitter 动态、Facebook 数据、照片、音频、视频、MRI 图像等。

结构化数据有一个形式和规则,遵循特定的元数据模型,并且日期遵循特定的模式。然而,非结构化和半结构化数据没有预定义的元数据模型规则。大数据的目标之一就是利用技术从非结构化数据中提取业务意义。

  • 数据真实性:这是数据的可信度;数据应该没有偏差和异常。它确保从不同源系统收集的数据的质量和准确性,并进行预处理质量检查,保持数据的干净,确保没有脏数据积累。

  • 数据有效性:数据应该正确且有效,确保其适合预定用途,确保其适用性。即便是在传统的数据分析中,数据的有效性对于程序的成功至关重要。

  • 数据波动性:这是数据的保质期,它的有效性只限于特定的时间段。过时的数据将无法为任何项目或程序生成预期的结果。

  • 可视化:通过图像进行可视化比使用度量或 Excel 格式的原始数据更能吸引人眼球。能够从输入数据系统或数据流到最终分析的过程中可视化数据趋势和模式,是大数据项目的一项重要资产。

在传统的数据仓库中,数据是结构化的,就像关系型数据库(RDBMS)中的数据一样,数据模式会被建模以便将数据加载到数据库中。

在大数据系统中,数据的处理从数据摄取到持久化、计算、分析等,与传统的数据仓库系统有很大不同,因为数据量、速度和格式在从源系统摄取到持久化的过程中差异很大。这些系统需要高度可用性和可扩展性,才能支撑从暂存到持久化和分析的过程。

可扩展性是通过集群资源池化的方式实现的,包括内存、计算和磁盘空间。根据不同的工作负载需求或随着业务扩展而增加的数据量,可以向集群中添加新的机器,以补充资源需求。对于执行实时分析、生产系统或持有实时数据的暂存和边缘系统来说,高可用性非常重要。高可用性集群意味着即使发生硬件或软件故障,也能确保容错系统,确保数据和系统的持续访问。

我们将在第四章中讨论基于 Hadoop 的集群建设作为支持,大数据 Hadoop 生态系统,包括各种行业工具。

另一种重要的大数据技术是内存计算,它包括软件和硬件技术的进步,用以处理大数据系统中巨大的数据量、速度和多样性。我们将详细讨论这些技术。

内存技术

在传统的应用程序开发中,磁盘是数据存储的主要持久性。此方法的挑战在于,针对业务逻辑和应用计算,数据需要从存储磁盘传输到主内存,造成巨大的 I/O 开销。同样,在基于业务逻辑的计算完成后,聚合、计算或分析结果的数据会从 CPU 和主内存传输到存储中,或者数据会被持久化回存储磁盘,从而导致多次 I/O 开销。

如下简单示意图所示,与其他硬件组件相比,磁盘速度增长较慢,而对更高性能和更快速度的需求则日益增加:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内存数据库(IMDB)

与传统的基于磁盘的数据持久化方法相比,内存技术使得完整的应用程序需要将数据加载到系统的主内存中。这使得应用程序的执行速度提高了 10 到 20 倍。

  • 数据永久驻留在主内存中

  • 主内存是数据存储的主要持久性

  • 磁盘作为持久化存储,用于日志记录和从磁盘恢复

  • 主内存访问对性能至关重要

  • 依赖缓存的算法/数据结构在响应上更加高效

** 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**

为内存系统采用的硬件技术进展

许多硬件进展已被集成到现代内存计算架构中,如多核架构和大规模并行扩展。

内存数据库经过优化,能够利用多核处理器的能力来实现极快的查询。处理器速度不再依赖于时钟速度,而是取决于系统并行度。现代服务器主板上有许多 CPU,每个 CPU 有多个核心。

可以在不同级别实现并行性,例如从应用程序级别到数据库级别的查询执行。多线程应用程序处理通过将每个查询映射到单个核心来处理,因此多个查询被并行分配到多个核心上。查询处理还涉及数据处理(即,数据库需要并行查询)。内存系统将工作负载分布到单个系统的多个核心上。

为内存系统采用的软件技术进展

软件技术进展促进了内存数据库IMDB)引擎的发展;它们如下所示:

  • 数据压缩

  • 无聚合表

  • 仅插入表

  • 列、行和混合存储

  • 分区

数据压缩

内存技术使数据压缩技术能够实现高达 20 倍的数据压缩。有多种算法,如位图、游程编码、字典编码、前缀/后缀编码、集群编码、相对编码、增量编码和间接编码。内存引擎将应用最合适的算法或算法组合,以实现最佳的压缩比和性能。

数据压缩的目标是尽可能减少数据来回传输的量。为实现此目标,需要使用适当的算法和技术,以最小化与数据压缩和解压缩相关的开销。提高整体查询性能也是有效数据压缩的目标之一。

没有聚合表。

内存数据库消除了维护昂贵的预聚合表的需要,因为数据存储在系统内存中,计算和聚合是即时进行的,因为数据没有来回传输。这消除了维护物化聚合视图的开销,我们可以实时生成这些视图。

仅插入表。

在典型的数据库中,删除记录是性能和开销密集型的。内存数据库不是删除记录,而是将其标记为过时记录,类似于版本控制系统,它不用于计算。因此,删除记录和重新索引其余记录(这些操作是性能密集型的)所带来的开销被消除。

列、行和混合存储。

在线事务处理OLTP)应用程序采用行存储方式,其中表数据作为记录序列存储。行存储表和存储在 OLTP 应用程序中更为高效,原因如下:

  • 应用程序在任何给定时间只处理单个记录。

  • 在任何时刻,单个记录可能会遭受多次选择和/或更新。

  • 应用程序通常访问完整的记录(或行)。

  • 由于列值有很多不同的值,因此压缩率较低。

  • 在 OLTP 应用程序中,需要聚合或快速搜索。

  • 配置表的行数较少。

在线分析处理OLAP)系统(如数据仓库)中,使用列存储,其中聚合函数起着重要作用;列中的条目存储在连续的内存位置,因此在列存储中聚合操作快速而高效。列存储或表在以下情况下是有利的:

  • 计算通常只在单列或少数几列上执行。

  • 根据少数几列的值来执行表搜索。

  • 表中有大量的列。

  • 需要对表行执行列密集型操作,如聚合、扫描等。

  • 由于大多数列仅包含少量不同的值(与表中的行数相比),因此可以实现较高的压缩率

IMDB 技术通过使用混合存储提供更高的效率。它使用算法选择适当的行存储和列存储的组合,以获得最佳的性能效率。它还为用户提供了自定义存储选项的选择,如选择或更改任何特定表的列式或表式存储。在某些情况下,使用列存储在 OLTP 应用程序中能最大化效率;这需要对事务系统中的插入和索引列数据存储进行平衡且充分理解的方式。

分区

数据分区是为了提高性能、方便管理、简化备份和恢复等。数据分区技术有多种类型。

基于一些共同亲和力的分区方法,例如按相等的时间段(如月份、周、年)分组数据,或按表的大小、维度、功能等进行分区

示例包括将前 1M 条记录分组的表、分组处理工资数据的表等

数据分区策略中使用了多种技术,如分组分区、水平分区、垂直分区、混合分区等。

内存数据库系统列举如下:

  • Apache Spark

  • Pivot GemFire

  • eXtremeDB

  • SAP HANA

  • IBM SolidDB

  • MSSQL 服务器

  • Oracle TimesTen

  • MemSQL

  • VoltDB

启用商业智能和可视化工具的内存技术列举如下:

  • Microstrategy

  • Tableau

  • QlikView

  • PowerBI

  • TIBCO Spotfire

NoSQL 数据库

传统的关系型数据库管理系统(RDBMS)因其结构化数据、预配置模式和事务企业应用程序中严格的数据一致性而广受欢迎,具有以下特点:

  • 支持集中式应用程序,如 ERP 系统,这些系统整合了企业数据

  • 应用程序可用性可能从适中到高可用性

  • 支持的数据流速适中

  • 通常,数据输入限制在少数几个源系统

  • 它们处理的数据主要是结构化的

  • 数据库支持复杂和嵌套事务

  • 主要期望是扩展支持多个并发用户的读取操作

  • 支持适中的数据量,并具有缓存和清除功能

大多数现代应用程序基于 NoSQL 数据库来创建灵活的数据模式、读取时模式或无模式,从而有效设计基于网页和云的系统。关键需求是能够处理大量数据,并迅速将数据分发到计算集群中,以支持不断更新的应用程序快速变化。传统的 RDBMS 系统无法满足云和网页应用程序中大规模数据库集群的需求。

NoSQL 数据库系统是为以下场景设计的:

  • 支持分布在多个位置的去中心化应用程序,如 web 应用程序、移动应用程序、物联网等

  • 应用程序需要持续可用,不能容忍停机

  • 它们支持高速数据,数据来源可能是设备、传感器等

  • 获取的数据不局限于单一位置,可以分布在多个位置

  • 数据形式分为结构化、半结构化和非结构化

  • 事务类型大多较为简单;然而,它们可以维持高数据量,并能长时间保留数据

  • 需要为高强度读写操作和大数据量的系统提供可扩展性

  • 支持多个用户的并发操作

NoSQL 数据库有四种类型,分别有不同的用途:

  • 键值数据库:也叫做 键值存储。它存储没有模式的数据。该名称来源于数据按索引或唯一键与关联值存储的特点。它们具有高度可扩展性,能够为 Web 应用程序提供会话管理和缓存,具有高性能和无模式设计。此类数据库很受欢迎,示例包括 Cassandra、DynamoDB、Azure 表存储ATS)、Riak、BerkeleyDB、Aerospike 和 MemchacheDB。

  • 文档数据库:这些数据库存储半结构化的数据,如文档描述和信息。每个文档都会分配一个唯一键,用于检索文档数据。一个优势是数据记录可以基于唯一键创建和更新,从而存储、检索和管理文档。对于基于 Web 的应用程序,数据交换通过 JavaScript 和 JavaScript 对象表示法JSON)进行,JSON 在内容管理和移动应用程序数据处理中非常流行。文档数据库的流行示例包括 Couchbase 服务器、CouchDB、DocumentDB、MarkLogic 和 MongoDB。

  • 宽列存储:这些存储是将数据表按列而非按行组织。宽列存储可以在 SQL 和 NoSQL 数据库中找到,提供非常高的性能和高度可扩展的架构。宽列存储比传统的关系数据库更快,能够非常快速地查询大量数据,因此被用于如推荐引擎、目录、欺诈检测等数据处理密集型系统。一些流行的宽列存储示例包括 Google Bigtable、Cassandra 和 HBase。

  • 图形数据库:图形数据存储将数据表示为关系模型,并将数据组织为节点。它们的设计目的是表示数据关系作为相互连接的元素,例如,通过图形展示它们之间关系的数量。一个例子是节点之间的连接;图形数据模型可以随时间演变,因此适用于灵活的架构。图形数据库在必须映射关系的系统中得到了有效应用,比如社交网络中的好友连接、预订系统或客户关系管理。图形数据库的例子包括 AllegroGraph、IBM Graph、Neo4j 和 Titan。

NoSQL 数据库的选择基于业务需求,如构建需要高性能、可扩展性、灵活性、功能性和复杂性的海量数据和 Web 应用程序。

  • 架构:基于 Web 和云的系统的基本要求是持续运行、跨地域的数据复制、可预测的性能等等。架构应设计为支持多样化的工作负载模式,技术应支持高容量、多样性和高速的数据摄取。能够实时执行事务,对数据湖或多个系统进行实时分析。一些系统基于主/从模型,比如 MongoDB,另一些是无主模型,其中数据库集群中的所有节点执行相同的角色,如 Cassandra。

  • 数据模型可扩展性:数据模型基于不同类型,如宽行表存储、文档导向、键值存储或图形存储等,以便快速和弹性地扩展,以适应所有场景和时刻,必要时可以跨多个数据中心,甚至扩展到云端。

  • 数据分布模型:根据其固有的架构差异,NoSQL 数据库在数据的读取、写入和分布方面表现不同。例如,Cassandra 非常适合在集群中的每个节点上进行写入和读取,并且可以在多个云提供商的数据中心之间复制和同步数据。

  • 开发模型与支持:根据它们的开发 API,NoSQL 数据库可能有独特的类似 SQL 的语言(例如,Cassandra 的 CQL)。技术的供应商或社区支持将是管理环境的个人和团队宝贵的资源。

  • 性能和持续可用性:在一个在线世界中,海量数据必须在变化的工作负载下以极高的速度执行,因此数据库必须扩展并执行,以支持应用程序和环境,因为纳秒级的延迟可能会导致销售损失。像航班预订系统(及其数据)这样的创收系统需要 24 小时、7 天不间断地可用,因为企业无法承受任何停机时间。

  • 可管理性和成本:需要平衡 NoSQL 平台开发和运营复杂性的成本,以便从成本和使用角度对企业可行。部署一个结构良好的 NoSQL 程序提供了所有已经列出的好处,同时还能降低运营成本。

NoSQL 的好处

正如我们所见,对于云应用程序和分布式系统,NoSQL 数据库是事实上的标准数据库,主要是因为 NoSQL 数据库相比其他数据库管理系统提供了许多强大的特性和好处,如下所示:

  • 持续可用性:数据库应全天候 24 小时、每周 7 天,或者达到 99.999%的可用性,即使在基础设施故障时也能保持可用。

  • 经济性/最低操作成本:与维护相关的投资和支出;NoSQL 系统的可扩展性应对企业可负担,并能够支持现有应用程序。

  • 可扩展架构:网页应用程序支持多个地理位置,因此数据库的架构特性应具备弹性和可扩展性。数据处理功能和能力需支持多个并发的企业系统。

  • 高响应性:云端和基于网页的应用程序是低延迟的应用程序,必须根据业务需求快速响应。这些应用程序应能在不同条件下运行,如变化的混合工作负载、多种数据模型,以及与第三方工具和应用程序的集成。

  • 弹性可扩展:数据库和支持的应用程序应设计为能线性和可预测地满足当前和未来的数据需求,并且在运营上成熟。

数据可视化

一张图胜千言。数据可视化是以图表、图形、图片或其他视觉方式表示数据。它帮助用户快速理解和分析与数据相关的复杂数据模式、变化和偏差。我们都能同意,浏览大量数值数据记录会非常疲劳。而能够通过图形化方式展示相同的数据将是一种非常有效、高效且节省时间的方法,用来识别我们需要的模式。有许多工具可以帮助进行数据可视化;最简单的形式包括条形图、饼图等。

在大数据可视化中,数据模式起着重要作用。数据可视化的几个好处如下:

  • 以简洁、易懂的方式传达概念

  • 识别需要关注或改进的领域

  • 明确影响客户行为的因素

  • 帮助你了解应将哪些产品放置在哪些位置

  • 按细分市场和时间段预测销售量

数据表示和可视化方法如下所列:

  • 图形图表:

    • 区域图

    • 条形图

    • 气泡图

    • 密度图

    • 误差条

    • 直方图

    • 折线图

    • 多组条形图

    • 平行坐标图

    • 点线图

    • 人口金字塔

    • 雷达条形图

    • 放射性柱形图

    • 散点图

    • 跨度图

    • 螺旋图

    • 堆叠面积图

    • 流图

  • 图表:

    • 流程图

    • 插图图表

    • 时间轴

    • 树形图

    • 网络图

    • 文氏图

    • 饼图

    • 象形图表

    • 泡泡图

    • 矩形树图

  • 表格:

    • 日历

    • 甘特图

    • 热力图

    • 茎叶图

    • 计数图

    • 时间表

  • 地图:

    • 区域分级图

    • 连接图

    • 点图

    • 流向图

数据可视化应用

数据可视化非常有价值,可以预览原始数据,以图片和图表形式作为可呈现的格式。以下列出了一些有助于此类工具:

  • 时间序列:用于绘制单个变量的性能趋势,例如某一汽车型号在 5 年内的销售情况,使用折线图(en.wikipedia.org/wiki/Line_chart)展示趋势。

  • 名义比较:比较一般趋势,例如使用条形图比较不同车型的销量。

  • 排名:用于比较不同地点在 5 年内特定车型的汽车销售情况。使用条形图(en.wikipedia.org/wiki/Bar_chart)显示在销售上跨区域的比较。

  • 部分到整体:用于测量整体的比率(即 100%中的百分比)。班级中获得A等级学生的百分比通过饼图(en.wikipedia.org/wiki/Pie_chart)或条形图来显示比较比例。

  • 频率分布:用于评估特定变量在给定区间内的趋势,例如房产价格变化在 0-10%,11-20%等区间内的年数。可以使用直方图(en.wikipedia.org/wiki/Histogram)或条形图。箱线图(en.wikipedia.org/wiki/Box_plot)有助于可视化分布的关键统计数据,如中位数、四分位数、异常值等。

  • 相关性:用于比较两个变量(XY)趋势移动的依赖性,以确定它们是否倾向于一起移动或相反方向移动,例如,绘制月份内失业率(X)和 GDP 增长(Y)的散点图(en.wikipedia.org/wiki/Scatter_plot)。

  • 偏差:用于比较实际与参考金额,例如比较业务几个投资组合的实际与预算支出的比较,使用条形图表示。

  • 地理或地理空间: 用于比较变量在地图或地理布局中的分布,例如按州划分的商店位置。地图图en.wikipedia.org/wiki/Cartogram)是一种典型的图形,用来绘制停车场各个楼层的汽车数量。

一些商业数据可视化工具如下:

  • Tableau

  • QlikView

  • Microstrategy

  • 微软 PowerBI

  • TIBCO Spotfire

  • Looker

  • DOMO

  • ZOHO

  • Information Builders

  • Chart

一些数据可视化开源工具如下:

  • Google Charts

  • Js

  • Ploty

  • Chart Js

  • Charted

  • Leaflet

  • FusionCharts

数据科学

与数据科学相关的一些类似术语包括:

  • 数据科学: 一门跨学科的领域,也被称为数据驱动科学。包括几个阶段,如数据发现、研究来源于不同数据源的各种信息(无论是结构化还是非结构化),获取数据,并应用科学方法和流程以获得洞察力,并应用这些知识创建增值的业务和 IT 策略。

  • 数据挖掘: 数据挖掘是寻找大数据集中模式的广泛术语。它是将大量数据分类成更易理解且具有凝聚力的信息集的过程。挖掘大量结构化和非结构化数据以识别模式,有助于组织控制成本、提高效率、发现新的市场机会,并增加竞争优势。

  • 机器学习: 机器学习是设计能够基于输入数据进行学习、调整和改进的系统的学科和实践。这通常涉及到实现预测性和统计性算法,随着更多数据的流入,系统能够不断地聚焦于正确的行为和洞察。

数据科学与大数据和数据发现其他接口部分的相互依赖和接口关系如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大数据发现是大数据、数据科学和数据发现的结合。

Gartner 分析师定义了一种新的发展角色——公民数据科学家,他们使用这些工具,将传统业务分析师的技能与专家统计学家的部分专业知识相结合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现代数据科学家的角色需要具备广泛的跨学科技能,涉及数学、统计学、计算机科学、沟通能力和商业理解等多个领域的交叉。数据科学家最基本、最普遍的技能是能够整合系统并从底层数据中提取有意义且可重复的模式。更为持久的需求是数据科学家需要用所有利益相关者都能理解的语言进行沟通,并展示数据讲故事的特殊技能,无论是口头的还是视觉的,理想情况下两者兼具。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结

在本章中,我们了解了大数据、内存技术、NoSQL 数据库、数据可视化和数据科学的概念。

在下一章中,我们将讨论 DevOps 框架和最佳实践的概念。

第三章:DevOps 框架

本章将介绍不同的 DevOps 流程、框架和最佳实践。我们将展示 DevOps 流程成熟度框架和进阶模型,并提供每个阶段的检查表模板。我们还将熟悉敏捷术语和方法论,以及组织采纳它所带来的好处。本章将涵盖以下主题:

  • DevOps 流程

  • DevOps 进阶框架

  • DevOps 成熟度模型

  • DevOps 最佳实践

  • 敏捷与 DevOps

DevOps 流程

业界公认的 DevOps 标准流程并被组织采纳,列举如下;我们将详细讨论它们:

  • 源代码管理

  • 源代码审查

  • 配置管理

  • 构建管理

  • 仓库管理

  • 发布管理

  • 测试自动化

  • 持续集成

  • 持续交付

  • 持续部署

  • 基础设施即代码

  • 应用性能监控

  • 常规自动化/持续改进

  • DevOps 框架——在 DevOps 框架下,我们将学习生命周期模型、成熟度状态、进阶和最佳实践框架,并同时研究敏捷方法论:

    • DevOps 项目生命周期

    • 成熟度状态

    • 进阶框架

    • DevOps 实践框架

    • 敏捷方法论

DevOps 最佳实践

采纳 DevOps 最佳实践有助于使团队与组织目标保持一致,并推进组织目标的实现。DevOps 在软件开发的每个阶段提供了多个流程框架。DevOps 的全面实施需要组织文化的转变,将部门、人员和软件生命周期的过程整合在一起。这使得组织能够在合规性和流程遵循方面在成熟度路线图上不断向上发展:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DevOps 流程

以下是业界公认并被组织采纳的 DevOps 标准流程,详细讨论如下。

源代码管理(SCM)

源代码管理系统已经使用了数十年,提供了许多功能和优势。然而,将它们与 DevOps 流程集成则能提供强大的集成和自动化功能。源代码管理系统使得多个开发人员可以在不同的地理位置的多个开发中心同时开发代码。SCM 有助于在文件级别进行代码库和版本控制,避免开发人员互相覆盖代码,并能让他们在各自的分支上并行工作。

开发人员将他们的代码更改合并到主分支或子分支,这些更改可以被跟踪、审计、查询以修复漏洞,并在需要时回滚。分支管理是版本控制系统(SCM)的一个重要功能,软件的多个分支被用于不同的大版本和小版本发布,跟踪各个版本发布中的功能和漏洞修复。SCM 使得在开发、测试和生产环境中管理过程遵循成为可能,促进了从开发到支持的整个软件生命周期管理。

DevOps 流程框架强调采用 SCM 为组织带来以下好处:

  • 软件开发团队成员之间服务的协调

  • 定义任何版本的单一真实来源,无论是小版本还是大版本

  • 在实施之前审查更改

  • 跟踪共同作者、协作和个人贡献

  • 审计代码更改和回滚功能

  • 增量备份和恢复

市场上流行的 SCM 工具如下:

  • IBM ClearCase

  • Perforce

  • PVCS

  • Team Foundation Server

  • Visual Studio Team Services

  • Visual SourceSafe

开源 SCM 工具如下——它们的流行也归功于 DevOps 的广泛采用:

  • Subversion (SVN)

  • Concurrent Version System (CVS)

  • Git

  • SCCS

  • 版本控制系统

  • Bitbucket

代码审查

代码审查是提高软件实例质量的重要过程,在它们集成到主流之前。代码审查有助于识别并消除常见漏洞,如内存泄漏、格式错误和缓冲区溢出。代码审查或检查可以是正式的也可以是非正式的。在正式的代码审查中,过程通过多种方法进行,比如正式会议和逐行审查代码的互动。非正式的代码审查可以是肩膀上的审查、电子邮件、对编程、工具辅助代码审查——这些也叫做代码走查

代码审查流程框架为组织带来的好处如下:

  • 软件开发团队成员之间的协作

  • 在集成之前识别并消除代码缺陷

  • 改善代码质量

  • 快速的开发周期回转

用于代码审查自动化的专有工具:

  • Crucible

  • Collaborator

  • Codacy

  • Upsource

  • Understand

用于代码审查自动化的开源工具:

  • Review board

  • Phabricator

  • Gerrit

  • GitLab

配置管理

配置管理CM)是根据基础架构库ITIL)在企业级别管理配置项的广泛主题;即使是配置管理数据库CMDB)也是配置管理策略的一部分。配置管理包括识别、验证和维护软件和硬件的配置项,例如补丁和版本。简而言之,它就是管理系统的配置,确保其适合预期用途。配置管理工具将验证系统配置的适当性,确保其符合需求并在各系统之间的互操作性。一个常见的例子是确保在开发系统上开发的代码在 QA(测试)系统和生产系统上有效运行。系统之间的任何配置参数丢失都会对应用程序的性能造成灾难性影响。

根据 DevOps,结合配置管理流程和工具对组织的好处可以总结如下:

  • 促进组织进行配置变更影响分析

  • 允许在不同系统上自动配置,如开发、QA 和生产

  • 促进系统的审计、账户和验证

  • 通过确保一致性来减少冗余工作

  • 高效管理同时更新

  • 避免单一真相版本的配置相关问题

  • 简化开发和运维团队成员之间的协调

  • 它有助于跟踪缺陷并及时解决

  • 有助于预测性和预防性维护

一些流行的基础设施配置管理工具如下:

  • BMC Software 的 Atrium

  • 惠普企业的通用配置管理数据库

一些流行的软件配置管理工具如下:

  • Chef

  • Puppet

  • Ansible

  • Salt

  • Juju

构建管理

构建管理是准备构建环境的过程,将软件应用程序的所有组件组装成一个完整、可工作的产品,适合其预期用途。源代码、编译器、与硬件和软件组件的依赖关系等被编译成一个有机的整体。构建可以是手动的、按需的或自动的。按需自动构建会使用脚本重新启动构建,并且只在少数情况下使用。计划的自动构建通常是在持续集成服务器上进行的夜间构建。触发的自动构建是在持续集成服务器中,一旦提交到 Git 仓库后即会启动。

根据 DevOps,构建管理流程和工具对组织的好处可以总结如下:

  • 确保软件可用性的关键功能

  • 确保软件在客户环境中的可重用性和可靠性

  • 提高软件的效率和质量

  • 它也是一种监管要求

一些常用的构建工具如下:

  • Ant

  • Buildr

  • Maven

  • Gradle

  • Grunt

  • MSbuild

  • Visual Build

  • Make (CMake/QMake)

构件仓库管理

构建构件仓库管理器是用于托管多个成功构建的二进制组件(可执行文件)仓库的专用服务器。通过集中管理不同类型的二进制文件,它减少了访问的复杂性及其依赖关系。

其好处如下:

  • 管理构件生命周期

  • 确保构建是可重复和可重现的

  • 有序访问构建构件

  • 方便在团队和供应商之间共享构建

  • 基于构件的保留策略,以符合审计要求

  • 高可用性的构件和访问控制

一些常用的仓库工具如下:

  • Sonatype Nexus

  • JFrog Artifactory

  • Apache Archiva

  • NuGet

  • Docker Hub

  • Pulp

  • Npm

发布管理

发布管理是软件生命周期中的一个过程,旨在促进发布从开发、测试、部署到支持/维护的顺利流动。它与 SDLC 中的其他 DevOps 过程领域进行接口交互。

发布管理已经成为开发过程中的一个重要组成部分几十年。然而,它被纳入 DevOps 框架后,形成了一个完整的自动化周期。

发布管理是一个迭代周期,由增加新功能或对现有功能进行更改的请求开始。一旦变更获得批准,新版本将被设计、构建、测试、审查,并在接受后部署到生产环境。在支持阶段,可能会有增强或性能改进的需求,从而启动新的开发周期。

采用发布管理的好处如下:

  • 产品生命周期的整体管理,跟踪并整合每个阶段

  • 协调所有阶段活动——开发、版本控制、构建、质量保证、系统配置、生产部署和支持

  • 跟踪各个环境中最近部署的状态

  • 与每个发布相关的所有工作项活动的审计历史

  • 发布管理的自动化依赖于其所有阶段的自动化

  • 团队可以编写发布定义并以可重复、可靠的方式自动化部署,同时追踪从开发到生产的所有发布。

  • 对授权访问和变更批准进行细粒度访问控制

一些发布管理工具如下:

  • Electric Cloud

  • Octopus Deploy

  • Continuum

  • Automic

  • Quikbuild

  • UrbanCode Release

  • CA Service Virtualization (LISA)

  • BMC 发布过程管理

  • Plutora Release

  • CA Release Automation

  • Serena Release

  • MS Visual Studio

  • StackStorm

  • Rally

测试自动化

手动测试每一个可能的场景既繁琐、劳动密集,又费时费力且昂贵。测试自动化或自动化测试是指在没有人工干预的情况下运行测试用例。尽管并非所有测试用例都符合自动运行的条件,但大部分用例都可以安排自动执行。自动化是通过使用自动化工具运行测试用例,或通过调度自动化脚本来实现的。最近的测试数据作为输入,结果则被捕获以供分析。测试自动化的目标是通过减少需要手动运行的测试用例数量来补充手动测试,而不是完全替代手动测试。

自动化测试适用于重复性、单调、繁琐且耗时的测试用例,且这些用例具有明确的输入和边界条件。不适用于频繁变更的、临时的或首次执行的测试用例。软件自动化测试可以基于几种框架类型:数据框架、关键字框架、模块化框架和混合框架。

测试大数据系统涉及多种技术、集成、框架和测试模块,如功能测试、安全性测试、可用性测试、性能测试、集成测试等。

采用测试自动化的好处如下:

  • 提高软件质量和响应能力

  • 通过用自动化替代手动工作实现快速周转

  • 提高整体测试生命周期的有效性

  • 持续集成和交付的增量和集成测试

一些测试自动化工具如下:

  • Visual Studio Test Professional

  • QTP (UFT)

  • SoapUI

  • TestDrive

  • FitNesse

  • Telerik Test Studio

  • Selenium

  • TestComplete

  • Watir

  • Robotium

持续集成

持续集成是一种 DevOps 最佳实践,开发人员将他们的代码以小的逻辑单元连续集成到共享的公共仓库中,并保持规律性(例如,每天一次)。这种过程的优势在于代码质量和适应性透明化。如果不采用这种方式,而是等待固定时间后再进行批量代码集成,可能会暴露出许多缺陷或集成问题,而解决这些问题可能会很昂贵。

为了实现持续集成,需要实现一些前提条件,如下:

  • 使用版本库来管理源代码

  • 定期代码提交计划

  • 自动化测试代码更改

  • 自动化构建

  • 在预生产环境中部署构建

持续集成的好处如下:

  • 提前并频繁提交最新的代码

  • 由于早期暴露了构建问题,构建周期更短,提交更频繁

  • 构建过程的透明性意味着更好的责任归属和更少的缺陷

  • 自动化部署过程可实现更快的周转时间

一些常见的持续集成工具如下:

  • Jenkins

  • TeamCity

  • Travis

  • Go CD

  • Buddy

  • Bitbucket

  • Chef

  • Microsoft Teamcenter

  • CruiseControl

  • Bamboo

  • GitLab CI

  • CircleCI

  • Codeship

以下图示展示了持续集成、持续交付和持续部署的角色:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

持续交付

持续交付是软件开发周期中持续集成的下一步;它通过尽量减少人工努力和开销,实现软件的快速、可靠开发和产品交付。在持续集成中,正如我们所见,代码开发结合了审查,接着是自动化构建和测试。在持续交付中,产品以小的、频繁的单位移动到预生产(暂存)环境中,进行彻底的用户验收测试。重点是了解软件功能和性能相关的问题。这使得与业务逻辑相关的问题能在开发周期早期被发现,确保在进入生产环境部署或添加新功能等其他阶段之前解决这些问题。持续交付为开发人员提供了更高的可靠性和可预测性,确保预定功能的可用性。通过持续交付,您的软件始终准备好发布,最终的生产部署是根据业务决策在时间上手动进行的步骤。

持续交付过程的好处如下:

  • 开发的代码不断交付

  • 代码不断且定期接受审查

  • 高质量的软件被快速、可靠且重复地部署

  • 最大化自动化,最小化人工开销

执行持续集成的工具同样完成持续交付的工作。

持续部署

持续部署是代码更改的完全成熟和完整的过程周期,涵盖了软件生命周期的每个阶段,最终将代码部署到生产环境中。

持续部署要求整个过程实现自动化——也称为自动化应用发布——涵盖所有阶段,如应用打包、确保依赖项集成、部署测试,以及为合规性生成充分的文档。

持续部署和自动化应用发布的好处如下:

  • 频繁的产品发布尽可能快地交付软件

  • 通过代码更改实现自动化和加速的产品发布

  • 代码更改从技术和质量角度都符合生产要求

  • 产品的最新版本以可交付格式准备好

  • 部署建模减少了错误,从而提高了产品质量

  • 集中访问所有工具、流程和资源数据有助于更快地故障排除和缩短市场时间

  • 开发、质量保证和运营团队之间的有效协作提高了产出和客户满意度

  • 由于集中查看所有阶段的活动,减少了审计工作量

执行持续集成的工具也完成持续交付的工作。

基础设施即代码

基础设施即代码IaC)是一种通过定义配置文件来执行基础设施服务的方式。在 DevOps 的范围内,IaC 是通过代码自动化日常任务,通常是配置定义文件,如 Shell 脚本、Ansible 剧本、Chef 食谱或 Puppet 清单。通常是服务器和客户端的设置,采用推送或拉取机制,或者通过安全外壳SSH)无代理进行操作。许多常规的系统任务,如创建、启动、停止、删除、终止和重启虚拟机或裸金属机器,都是通过软件来执行的。在传统的本地系统中,许多系统管理任务都是手动的,并且依赖于人为操作。然而,随着大数据和云计算的爆炸式发展,所有常规的系统活动和任务都像软件代码一样进行管理。它们被保存在代码仓库中,并且最新的构建更新会经过测试以进行部署。

IaC 的优点如下:

  • 使用定义文件和代码更新系统配置非常快捷

  • 所有代码及其更改的版本更加不易出错,并且具有可复现的结果

  • 对 IaC 部署和测试系统的彻底测试

  • 较小的常规更改容易管理,而较大的基础设施更新可能包含难以检测的错误

  • 使用定义文件进行审计追踪和合规性检查非常容易

  • 多台服务器同时更新

  • 系统可用性高,停机时间少

一些基础设施即代码(IaC)工具如下:

  • Ansible Tower

  • CFEngine

  • 厨师

  • Puppet

  • SaltStack

常规自动化

每个组织都致力于自动化日常的重复任务;事实上,大多数公司和软件产品的生存依赖于它们自动化的程度。企业资源规划(ERP)系统、数据可视化、领域应用、数据分析等几乎所有环节都可以进行自动化。一些自动化的领域包括基础设施(部署、补丁、可扩展性)、应用程序(开发、集成、构建、交付、部署)、负载均衡器、反馈和缺陷/错误管理。

有多个工具可以自动化每个环节,正如我们在前面的章节中所见,我们将在接下来的章节中探索它们的应用。

关键应用性能监控/指标

性能指标是每个工具、产品和服务的一部分。因此,组织始终保持对其应用程序、产品和服务的性能指标监控的警觉。为了实现任何产品的高质量输出,首先必须达到一定的标准化过程和度量标准。衡量性能指标有许多参数,例如:应用程序或硬件系统的可用性或运行时间与停机时间的对比和响应能力,工单分类、确认、解决时间表等。

DevOps 关注的是度量指标和反馈,并通过持续改进流程推动发展。

有多种工具可用于各种需求的应用监控;我们将在本章后续部分中讨论在 DevOps 框架背景下最合适和最适用的工具。

DevOps 框架

在 DevOps 框架下,我们将研究生命周期模型、成熟度状态、进展与最佳实践框架,以及敏捷方法论。

实现 DevOps 成熟度是一个逐步的过程,朝着良好的结构化和规划目标前进,如以下各阶段所述。

DevOps 成熟度生命周期

DevOps 项目的各个阶段与软件开发生命周期相对应,具体描述见此处。我们将详细探讨每个阶段:

  • 发现与需求阶段: DevOps 发现阶段是一个高度互动的项目阶段,旨在从关键利益相关者处收集当前流程、框架和工具的输入与反馈。模板和检查表用于捕捉这些输入。该阶段的时间线取决于关键利益相关者的可用性、所需文档的存在以及待探索流程的复杂性。发现阶段的交付物如下:

    • 详细描述当前流程、工具、框架状态的模板

    • 关键利益相关者对收集的详细信息的签署确认

    • 现有最佳实践和 DevOps 方法

    • 现有挑战、约束(如适用)

    • 可重用的工具、流程、工件

  • 设计阶段: 设计阶段也是架构阶段;它旨在制作出实现目标状态的蓝图。这是一个反复权衡工具和流程替代方案的过程,最终通过关键利益相关者达成一致。时间线和成本将基准化,并根据项目的新发现进行定期回顾和修订。该阶段的时间线取决于关键利益相关者对流程、工具和预算的接受度。设计阶段的交付物如下:

    • 已达成目标状态共识

    • 将要采用的 DevOps 流程基线

    • 最可行工具的基线,准备实施

    • 商定的时间线和成本基线

  • 开发阶段: 从蓝图阶段基准的工件将作为开发阶段的输入;包括已商定的流程变更、要实施的工具、要采纳的框架等。一个涵盖交付物、时间表、依赖关系、约束条件、资源平衡等的详细项目计划将非常有用。敏捷 Scrum 方法论将是实施 DevOps 的框架,并将在后续详细讨论。开发阶段的时间线将根据最初基准的项目计划来制定,并随着已完成的里程碑进度定期修订。开发阶段的交付物如下:

    • 初步项目计划已基准并已签署确认

    • 在项目完成之前持续收集反馈

    • 每个阶段的资源分配

    • 包括新技能、新方法、新流程和工具

    • 针对项目风险、约束等的解决方案

    • 按照项目计划约定的交付物

  • 部署阶段: DevOps 部署阶段遵循上述 DevOps 流程框架中详细列出的最佳实践。它取决于部署的是流程、应用工具,还是基础设施。时间线将根据开发阶段积累的经验进行评估。部署阶段的交付物如下:

    • 部署指南——生产环境切换计划

    • 部署检查清单

    • 关键利益相关者的签字确认

    • 回滚计划

    • 容量规划

  • 监控阶段: 监控每个阶段在开发、构建、集成和部署过程中的关键性能因素,随着时间的推移进行跟踪。接着是跟踪缺陷、漏洞修复、用户反馈和持续改进的计划。监控阶段的时间线依据组织的需求和性能基准来设定。监控阶段的交付物如下:

    • 操作手册

    • 反馈表和检查清单

    • 用户指南,支持手册

    • 流程手册

    • 性能基准

DevOps 成熟度图

DevOps 采用是一个为组织增值的过程。它不是一蹴而就的,而是随着时间的推移,逐步成熟并显现出成效。就像任何能力成熟度模型CMMI)或流程成熟度模型一样,关键的成功因素必须定义为程序的绩效目标。关键评估参数的初步成熟度状态由关键利益相关者达成一致。然后,项目章程中将定义要实现的参数变量的目标成熟度水平,并详细列出程序、里程碑、预算和由利益相关者批准的约束:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DevOps 流程成熟度框架

DevOps 进展框架/准备度模型

正如前面模型中所讨论的,DevOps 的采用是组织向更高成熟度状态发展的过程。以下表格列出了 DevOps 在广泛范围内的不同实践领域和成熟度水平。DevOps 的成熟度水平可能会根据团队的标准有所不同,甚至同一组织的不同部门或分支机构,在相同流程下,可能会有显著更为先进的实践。提升到整个企业的最佳 DevOps 流程工作流应成为所有团队和部门的最终目标:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DevOps 成熟度检查清单

如前节所见,流程成熟度框架通过检查清单和讨论进行评估。对于每个关键重点领域,详细的发现将指示成熟度水平。

发现的结果提供了成熟度水平的一般估计,并评估其产生的影响:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

DevOps 过程项目的敏捷框架

DevOps 项目通常基于敏捷框架,以实现开发和实施过程的高效快速周转。

基于敏捷软件开发的项目已经在行业内得到广泛接受和采纳。传统的瀑布模型已经过时,无法跟上敏捷方法论带来的优势。

敏捷方法论的成功归功于其核心目标:

  • 个人和互动优先于流程和工具

  • 工作软件优先于全面文档

  • 客户协作优先于合同谈判

  • 变更采纳灵活性优于项目计划遵循

敏捷开发方法

Scrum 是一种敏捷开发方法,专注于功能开发,由以下角色组成的团队来执行:

  • Scrum Master 负责团队组建、主持冲刺会议和消除开发障碍

  • 产品负责人创建并优先排序产品待办事项列表,并负责每个冲刺迭代周期内功能的交付

  • Scrum 团队负责管理和组织在冲刺周期内完成的工作

  • 产品待办事项列表是要开发的功能特性和需求的清单

敏捷开发方法是一种增量和迭代的方法,用于开发用户故事、软件功能或功能模块。客户可以早期看到产品特性,并在需要时做出必要的更改。开发周期被划分为两个到四周的冲刺周期,以完成工作单元。其理念是,较小的周期能够与开发人员和测试人员共同快速开发和管理。结构和文档不重要,但工作特性被认为是有价值的。开发过程在连续的冲刺周期中迭代完成。发现的缺陷会在最早的冲刺中修复并成功测试。当开发新功能或逻辑时,会进行回归测试。用户验收测试会在冲刺周期后进行,以标记产品是否可以发布:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

采用敏捷软件开发最佳实践的好处如下:

  • 工作软件能够让客户满意,因为他可以查看功能特性

  • 客户可以在任何开发阶段添加变更请求

  • 软件能够在几周内快速且持续交付

  • 项目围绕着有动机的个体构建,并且应当信任这些个体

  • 冲刺团队在交付方面具备高技能和高效率

  • 由于开发人员和测试人员共同开发,缺陷将在冲刺周期内解决

  • 沟通方式有效,因此交付的产品质量更高

  • 持续关注技术卓越带来良好的设计

  • 自组织团队专注于最佳架构、需求和设计

  • 团队精简且高效,因此生产力得到了最大化

总结

在本章中,我们了解了 DevOps 流程、框架、最佳实践以及 DevOps 流程成熟度框架和进展模型,并且配有检查表模板。我们还探讨了敏捷术语和方法论。

在下一章,我们将详细讲解大数据生态系统、不同的框架、Hadoop 集群、节点、容量规划等内容。

第四章:大数据 Hadoop 生态系统

我们在前几章讨论了大数据技术的关键概念。在本章中,我们将介绍构建大数据集群、框架、关键组件以及流行厂商的架构。我们将在后续章节中讨论大数据 DevOps 概念。

本章将涵盖以下主题:

  • 大数据 Hadoop 生态系统

  • 大数据集群

    • 类型与应用

    • 高可用性

    • 负载均衡

  • 大数据节点

    • 主节点、工作节点、边缘节点

    • 它们的角色

  • Hadoop 框架

    • Cloudera CDH Hadoop 发行版

    • Hortonworks 数据平台 (HDP)

    • MapR Hadoop 发行版

    • Pivotal 大数据套件

    • IBM 开放平台

    • 基于云的 Hadoop 发行版

    • Amazon Elastic MapReduce

    • Microsoft Azure 的 HDInsight

  • 容量规划

    • 因素

    • 指导原则

大数据 Hadoop 生态系统

Apache Hadoop 是一个开源软件平台,基于廉价硬件构建,用于将集群扩展到 TB 或 PB 级别,支持大数据处理,跨越成千上万的服务器。它在分布式数据存储和大规模数据集的分布式处理方面非常流行和高效。Hadoop 提供了一整套服务,如数据持久化、数据处理、数据访问、数据治理、数据安全和运营。Hadoop 集群的几个好处列举如下:

  • 数据可扩展性:大数据量可以指数级增长以容纳这些大数据量,Hadoop 支持数据的分布式处理;数据集群中的每个节点都参与存储、管理、处理和分析数据。节点的增加使得集群能够迅速扩展,支持 PB 级别的数据存储。

  • 数据可靠性:Hadoop 集群配置提供数据冗余。例如,在某些节点发生意外故障的情况下,Hadoop 集群管理软件会自动将数据和处理任务复制到其余活跃节点上。即使在某些节点不可用的情况下,应用和数据的功能也能得到保证,从而确保了业务的持续性。

  • 数据 灵活性:在传统的关系数据库管理系统中,通常在存储结构化数据之前会创建模式表,这被称为写时模式。根据处理应用程序的数据需求,Hadoop 系统可以加载多种数据格式,例如结构化、半结构化或非结构化数据。因此,模式是在数据加载过程中动态创建的,称为读时模式

  • 经济性:Hadoop 是开源的,基于低成本的廉价硬件构建,因此比专有的许可证软件更加经济。

组织采用 Hadoop 系统是因为其多功能性,能够在大数据量下持久化数据、快速、可靠和高效地管理、可视化和分析大量数据,并且支持各种数据格式,具有数据治理、工作流、安全性等功能,并且成本低廉。

Hadoop 生态系统中的内置工具和功能

Hadoop 生态系统提供了许多内置工具、功能和能力,列举如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 数据存储Hadoop 分布式文件系统HDFS)提供可扩展、容错且具有成本效益的存储。Hadoop 可以通过将存储分布到多个节点上来处理数据的指数级增长;组合的存储容量可以根据需求增长,同时单位存储成本保持经济。还有其他存储管理工具,如 HBase、Solr 等。

  • 数据湖:Hadoop 的一个关键优势是能够经济地构建数据湖。它将成为组织存储所有相关数据需求的宝贵资产,这些数据来自不同的数据源并被收集和整合。例如,在制造业中,机器维护数据、库存数据、销售数据、机器性能的传感器数据、客户反馈的社交媒体数据、供应商和供应商数据、天气报告等,可以根据数据湖的需求定期捕获。

  • 数据处理

    • Hadoop 生态系统:Hadoop 生态系统提供了批处理、流处理和混合系统的数据处理功能。

    • MapReduce:MapReduce 是 Hadoop 中用于批处理任务的初始处理框架。MapReduce 的处理技术遵循映射、洗牌和归约算法,使用键值对。批处理任务类似于客户的每月电话账单。

    • 流处理:像股票价格信息和航空公司预定数据一样,Apache Storm 非常适合处理流数据。

    • 混合处理系统:这些处理框架可以同时处理批量和流数据工作负载,例如 Apache Spark、Flink 等。一个典型用例是 物联网IoT)中的卡车传感器数据捕获、在云中聚合并分析以推导模式等。

  • 数据访问

    • Hadoop:Hadoop 提供了多种方式来访问和处理数据。

    • Apache Solr:Apache Solr 提供了对存储在 HDFS 中数据的索引和搜索功能。

    • Hive:Hive 为 Hadoop 提供数据仓库功能,采用一种类似 SQL 的简单语言叫做 HiveQL,该语言提供了索引,使查询更快。可以使用标准 SQL 编程接口,并且提供了与一些分析软件包(如 Tableau、QlikView 等)更好的集成。

    • HBase:一个 NoSQL 列式数据库,提供列式数据存储模型等功能,并为 Hadoop 系统提供稀疏数据存储。

    • Flume:Flume 从源系统(如 Web 服务器日志数据)收集数据,通过 Flume 代理进行聚合并传输到 Hadoop。

    • Mahout: Mahout 是一个机器学习库,包含了一系列用于聚类、分类和协同过滤的核心算法。这些算法可以在任何处理框架或引擎中实现,如 MapReduce,并且在像 Spark 这样的内存数据挖掘框架中更加高效。

    • Sqoop: Sqoop 是一个有价值的工具,用于将数据从其他数据库系统(主要是关系型数据库)迁移到 Hadoop 中。

    • Pig: Pig Latin 是一种基于 Hadoop 的语言,擅长处理非常深且非常长的数据管道(这是 SQL 的一个限制)。它比 SQL 更简单,更易于使用。

  • 资源管理: YARN 是动态资源利用的一个重要推动力,是 Hadoop 框架的核心部分。它管理多租户用户的日益增加的工作负载,运行各种 Hadoop 应用而不会影响性能。

  • 统一管理: Ambari 是一个 RESTful API,提供一个用户友好的网页界面用于 Hadoop 管理。它是 Apache Hadoop 集群的配置、管理和监控工具。Hadoop 集群的配置任务包括在多个主机上安装 Hadoop 服务并为集群配置 Hadoop 服务。Ambari 通过中央管理控制台管理 Hadoop 集群服务,例如启动、停止和重新配置 Hadoop 服务。Ambari 通过仪表盘监控 Hadoop 集群的健康状况和状态,并与 Ambari Metrics System 集成,用于指标收集,以及 Ambari 警报框架。该警报系统会在节点宕机、磁盘使用率超过阈值等情况下进行通知。

  • 工作流管理:

    • Oozie: Oozie 是一个工作流处理系统,管理和调度一系列任务。任务可以用多种语言编写,如 MapReduce、Pig 和 Hive,并且可以逻辑地相互链接。Oozie 允许调度依赖任务,将一个查询的输出作为下一个任务的输入,确保数据流的顺利进行。

    • ZooKeeper: ZooKeeper 是一个集中式服务,用于维护配置文件、命名、提供分布式同步和提供组服务。所有这些服务都以某种形式被分布式应用程序使用。

  • 综合数据安全与治理:

    • Hadoop 的安全性有三种实现模式——身份验证、授权和加密。

    • 身份验证确保只有真实用户能够访问 Hadoop 集群。目前使用的工具有 MIT Kerberos、AD、OpenLDAP 等。

    • 授权授予用户数据权限,如只读、写、修改、删除等。目前使用的工具是 Apache Sentry。

    • 数据加密确保数据在静态和传输过程中免受未经授权的访问。静态数据加密工具是 Navigator Encrypt,传输中的数据加密工具可以通过启用 TLS/SSL 来实现。

    • 在分布式环境中管理 Hadoop 系统的访问权限可能是一项挑战,因为这些环境将 Hadoop 的各个组件部署在不同的集群中,以优化性能。例如,在大型生产环境中,将会有不同的集群组负责工作流、数据存储、数据分析等;因此,管理各个组的访问权限可能会是一项艰巨的任务。

大数据集群

Hadoop 集群是由两个或更多计算机或系统(称为节点)组成的系统。它为用户提供一个统一的系统。节点协同工作来执行应用程序或执行其他任务,类似于虚拟机。根据不同的数据需求,有多种 Hadoop 集群变体。这些平台构建的关键特性是可靠性、负载均衡和性能。

单节点或伪分布式集群包含必要的守护进程,如 NameNode、DataNode、JobTracker 和 TaskTracker,这些进程都在同一台机器上运行。单节点集群是一种简单的配置系统,用于通过模拟完整集群环境来测试 Hadoop 应用,且其副本因子为 1。

小型 Hadoop 集群由一个主节点和多个工作节点组成。主节点包含 Job Tracker、Task Tracker、NameNode 和 DataNode。一个从节点或工作节点在需要时可以同时充当 DataNode 和 TaskTracker;可以配置仅存储数据的工作节点和仅计算的工作节点。这些节点用于 Hadoop 应用和项目的全栈开发,副本因子为 3,例如用于有效备份的多节点集群。

多节点或完全分布式集群遵循 Hadoop 集群的主从架构模式。NameNode 和 TaskTracker 守护进程运行在主机上,DataNode 和 TaskTracker 守护进程则运行在一个或多个从机上。此部署用于 Hadoop 应用的全栈生产部署,并且副本因子为 3。

Hadoop 集群特性

本节将讨论 Hadoop 集群的关键特性,如高可用性的负载均衡和分布式处理等。

高可用性

高可用性HA)集群通过系统中的冗余设计提供不中断的服务和资源。高可用性不仅要在集群内实现,也需要在集群之间实现。

集群内的高可用性通过一个主节点实现,主节点监控工作节点的任何故障,确保负载分配到其他活跃工作节点。

在不同区域的集群实例之间实现高可用性是通过使每个集群系统监控其他集群,并在故障转移发生时,通过冗余硬件和软件重新配置复制服务器和服务来完成的。硬件故障容忍通过 RAID 系统实现,而对于网络系统,在链路断开时,提供备用链路路径以保证服务的连续性。

负载均衡

服务器之间的负载均衡是网络和基于互联网的应用程序日益广泛使用中的一个关键功能。它是一个重要特性,能够将来自客户端的流量请求均匀地分配到所有分配给应用程序的集群中的活跃节点机器上。在节点发生故障时,请求会重新分配到其余活跃的节点上,这些节点负责处理订单。为了可扩展,Web 集群必须确保每个服务器得到充分利用,从而提高网络容量并改善性能。基于负载均衡的 Web 应用服务器被称为Web 农场,它们根据调度器和算法独立地重定向请求。几种常见的负载均衡算法包括最少连接法、轮询法和加权公平法,每种算法都有其独特的适用性。

高可用性和负载均衡

高可用性和负载均衡结合了两种类型集群的特性,增加了服务和资源的可用性和可扩展性。持续的高可用性和负载均衡是整个 Web 托管和电子商务项目的支柱;它需要确保支持网络流量的可扩展性,而不会最终成为瓶颈或单点故障。除了简单地将客户端流量重定向到其他服务器外,Web 系统还需要验证服务器、冗余和负载均衡特性,如全天候的通信检查。这种类型的集群配置广泛应用于航空公司和火车订票系统、电子商务、银行、电子邮件服务器以及 24/7 应用程序中。

分布式处理和并行处理

分布式处理涉及将一个大型计算任务分解成多个较小的任务,以便在单独的小型节点集群上并行运行。它代表了一个大规模并行的超级计算机。这种集群模型适用于大规模计算任务的应用,并提高了可用性和性能。这些集群系统用于基于科学研究的计算、天气预报等需要高处理能力的任务。

Hadoop 大数据集群的使用

大数据集群用于多种目的,如存储、分析、测试、开发等。为正确的工作负载选择合适大小的集群至关重要,因此集群的容量规划是一项重要且关键的任务。

满足不同需求的大数据集群如下:

  • 开发集群:构建开发平台有许多需求,例如验证将应用程序迁移到大数据平台上开发功能的技术,以便开发带有机器学习的高级分析用例。

  • 测试集群:构建一个测试平台,用于测试在开发集群中开发的功能和特性。

  • 数据湖集群:用于提供广泛存储容量的构建,来自不同源系统的数据(包括第三方数据源)被汇聚到数据湖中。在数据加载到数据湖之前,会进行预处理活动以过滤和执行聚合操作。数据湖为组织中不同部门提供多功能的数据需求。

  • 分析集群:一个用于执行高级分析的平台,使用适当的算法并发布生成的结果。

Hadoop 大数据集群节点

我们将讨论不同类型的节点及其在 Hadoop 生态系统中的角色和用途:

  • NameNode:NameNode 是 HDFS 文件系统的重要组成部分。它保存文件系统中所有文件的目录树,并跟踪集群数据文件的存储位置。该文件的数据本身并不存储。每当客户端应用程序需要查找文件,或想要修改文件时,都会与 NameNode 进行通信。这些修改会作为日志存储在 NameNode 中,并附加到本地文件系统的编辑文件中。当 NameNode 启动时,它会从一个镜像文件(fsimage)读取 HDFS 的状态,并将编辑应用到日志文件中。

  • Secondary NameNode:Secondary NameNode 的整个目的是在 HDFS 中设置检查点。Secondary NameNode 仅是 NameNode 的辅助节点;它定期合并 fsimage 和编辑日志文件,并保持编辑日志的大小在一个限制内。

  • DataNode:DataNode 在 HDFS 中存储数据。一个功能齐全的文件系统拥有多个 DataNode,数据在它们之间进行复制。客户端应用程序可以直接与 DataNode 进行通信,一旦 NameNode 提供了数据的位置。

  • 边缘/跳跃节点:边缘节点是 Hadoop 集群与外部网络之间的接口。通常,边缘节点用于运行客户端应用程序和集群管理工具。它们也常常作为数据传输到 Hadoop 集群的中转区。

  • 集群管理:集群管理软件应用程序提供端到端的功能和特性,用于管理集群环境。它有助于提升性能,增强服务质量,提高合规性并降低管理成本。

  • 安全性:以下是 HDFS 文件级别和节点级别的安全性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通常,边缘节点通过外部交换机连接到外部世界,允许第三方系统通过 Kafka 或基于 STB 的方式访问,并为入站用户提供 SSH 访问。

上述所有集群服务器通过专用网络交换机相互连接,隔离与外部世界的流量。

节点类型及其角色

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 节点:Hadoop 集群可以根据其所承担的角色配置不同的服务器。大致可以分为三种类型,每种类型的硬件配置不同:

    • 主节点(也称为名称节点):在企业部署中,主节点运行关键的管理服务。这些节点只存储元数据,因此不需要大量存储空间,但由于这些文件至关重要,主节点服务包括以下内容:

      • 企业管理器

      • 资源管理器

      • 备用资源管理器

      • NameNode

      • 备用 NameNode

      • 日志节点

      • HBase 主节点

      • Hive 服务器

      • Sqoop 服务器

      • ZooKeeper

      • Oozie 服务器

      • Spark/作业历史服务器

      • Cloudera 搜索

      • Cloudera Navigator

      • Hive 元存储

      • Kafka 主节点

      • Flume 主节点

    • 工作节点:在 Cloudera 企业部署中,工作/从节点是运行工作服务的节点。由于这些节点执行任务并存储实际数据,因此它们设计为容错的。工作节点可以有以下角色:

      • 数据节点

      • 节点管理器

      • HBase 区域服务器

      • Impala 守护进程

      • Solr 服务器

      • Kafka 经纪人

      • Flume 代理

    • 网关/边缘节点:这些是运行 Hadoop 客户端服务的地方,包括:

      • 第三方工具

      • Hadoop 命令行客户端

      • Beeline

      • Impala Shell

      • Flume 代理

      • Hue 服务器

      • Spark 和其他网关服务

      • HA 代理

商业 Hadoop 发行版

如前所述,Hadoop 是一个开源社区分发的堆栈,集成了多个组件或接口层。许多商业厂商在基本的 Hadoop 平台上进行定制,提供市场上的硬件产品平台和服务。我们将讨论以下几种流行的选项:

  • Cloudera CDH Hadoop 发行版

  • Hortonworks 数据平台HDP

  • MapR Hadoop 发行版

  • 亚马逊弹性 MapReduce

  • IBM 开放平台

  • 微软 Azure 的 HDInsight——基于云的 Hadoop 发行版

  • 关键大数据套件

Hadoop Cloudera 企业版

Hadoop 开源的标准框架,包含不同的层和组件,展示如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Cloudera 专有的发行版框架是基于 Hadoop 开源代码构建的,定制化服务如以下主题所示。我们将讨论使其成为领先企业产品的各个组件。

数据集成服务

外部源系统的数据导入到 Hadoop 系统可以通过多种方式,具体取决于业务需求。

  • 批量传输

    • Apache Sqoop:Sqoop 是一个命令行界面应用程序,用于在关系型数据库和 Hadoop 之间传输数据。它支持保存的作业,可以多次运行,帮助我们导入自上次导入以来对数据库所做的更新。它还支持增量加载单个表或自由格式 SQL 查询。
  • 实时数据传输

    • Apache Kafka:Kafka 是一个由 Apache 软件基金会开发的开源消息代理项目,使用 Scala 编写。该项目旨在提供一个完整的、高吞吐量、低延迟的实时数据流处理平台。它是一个高度可扩展的发布/订阅消息队列,构建为分布式事务日志,这使得它在企业基础设施中处理流数据时非常重要。

    • Apache Flume:Flume 采用一种简单、灵活且分布式的架构来进行数据流处理。它能够可靠地摄取大量日志数据并进行聚合。它有一个简单且可扩展的数据模型,灵活地构建和支持在线分析应用程序。Flume 是一个非常强大、容错性高且可靠的服务,具有内置的故障切换和恢复功能。

    • Apache Chukwa:Chukwa 是一个用于在分布式文件系统(如 Hadoop)上进行数据收集和分析的框架,简化了日志分析、处理和监控。Chukwa 代理在相应的机器上运行,收集来自各种应用程序生成的日志。它提供了高度的灵活性来摄取由服务器生成的大量日志数据。收集器从代理接收数据并将其写入 HDFS,HDFS 作为存储,MapReduce 框架将处理、分析和解析任务,并归档这些海量日志数据。

    • Apache Avro:Avro 是一个语言中立的远程过程调用和数据序列化框架,开发于 Apache 的 Hadoop 项目中。由于 Hadoop 可写类缺乏语言可移植性,Avro 使用 JSON 来定义数据类型和协议,并以紧凑的二进制格式序列化数据。Avro 对于处理可以被多种语言(如 Java、C、C++、C#、Python 和 Ruby)处理的数据格式非常有帮助。

Hadoop 数据存储

Hadoop 中的数据存储是一个关键功能,我们将讨论实现这一目标的各种方式:

  • Apache HDFS(文件系统):HDFS 是一个分布式、可扩展且便携的文件系统,使用 Java 编写,旨在支持 Hadoop 框架。HDFS 存储大型文件——通常是从几 GB 到 PB 级别——并分布在多台机器和数据节点上。数据节点之间可以相互通信,重新平衡数据,移动副本并保持数据的高复制性。

  • Apache HBase (NoSQL):HBase 是一个开源的非关系型分布式数据存储系统,运行在 HDFS 之上,提供了一种容错的方式来存储大量稀疏数据。HBase 是一个面向列的键值数据存储系统,由于与 Hadoop 和 HDFS 的渊源,它备受推崇。它适用于在大规模数据集上进行快速的读写操作,具有高吞吐量和低输入/输出延迟。

  • Apache Kudu (关系型):Apache Kudu 是一个开源存储引擎,专为结构化数据设计,支持低延迟随机访问,并且能够高效地执行分析访问模式。它填补了 HDFS 和 HBase NoSQL 数据库之间的空白。Kudu 表看起来像 SQL 关系型数据库中的表,作为结构化数据的存储系统。像关系型数据库管理系统(RDBMS)一样,主键由一个或多个列组成,确保唯一性,并充当高效更新和删除操作的索引,作为结构化数据表的存储系统。

数据访问服务

  • Apache Spark:Spark 是一个开源框架,用于机器学习和基于内存技术的数据处理流处理。它为程序员提供了一种名为弹性分布式数据集(RDD)的数据结构,这是一种应用程序接口。RDD 是只读的,可以将多个数据集分布到一群机器上,具有容错功能。

  • Apache Hive:Hive 数据仓库软件通过 SQL 便于对存储在分布式存储中的大型数据集进行读取、写入和管理。结构可以映射到已经存储的数据上。提供了命令行工具和 JDBC 驱动程序,用于将用户连接到 Hive。

  • Impala:Impala 是 Cloudera 的 SQL 查询引擎,用于查询存储在 Apache Hadoop 集群中的数据,支持开源的大规模并行处理(MPP)。Impala 使用户能够对存储在 HDFS 和 Apache HBase 中的数据执行低延迟 SQL 查询,而无需额外的数据移动或转换。

  • Solr:Apache Solr 是一个网站搜索平台,因其可以用来索引和搜索文档及电子邮件附件,广受企业搜索领域的欢迎。它基于一个名为 Lucene 的 Java 库(whatis.techtarget.com/definition/Apache-Lucene),用 Java 编写,提供了 RESTful XML 接口和 JSON API,用于构建搜索应用程序。Solr 可以搜索和索引多个网站,根据搜索查询的分类法(searchcontentmanagement.techtarget.com/definition/taxonomy)返回相关内容推荐(searchsqlserver.techtarget.com/definition/query)。

  • Apache Pig:Pig 提供了一种高级语言,称为 Pig Latin,它是一种类似 SQL 的语言,拥有许多内置操作符,用于执行数据操作,如连接、过滤、排序等,并用于执行 Hadoop 中的所有数据操作。Apache Pig 的组件是 Pig Engine,它将 Pig Latin 脚本作为输入,并将脚本转换为 MapReduce 作业。作为一个工具,它非常高效,能减少开发和编码时间。作为一个平台,它采用多个查询路径,将其表示为数据流来分析大量数据集。

  • Kite 是 Hadoop 的高级数据层,提供 API 和一组工具,用于在存储系统(如 HDFS)之上创建逻辑抽象,并以记录、数据集和数据集仓库的形式操作。它可以通过插件访问 Mavin,并协助打包、部署和运行分布式应用程序。它加速了 Hadoop 中流处理 ETL 应用程序的开发,这些应用程序提取、转换和加载数据到目标仓库,如 Apache Solr、企业数据仓库、HDFS、HBase 和 OLAP 应用程序。

  • MapReduce 是一种基于 Java 的分布式计算处理技术和框架。正如 MapReduce 名称的顺序所暗示的那样,reduce 任务始终在 map 作业之后执行。map 作业通常将输入数据集拆分为独立的块,每个块中的单个元素被分解为元组(键/值对)。reduce 框架对 map 作业的输出进行排序,然后将其输入到 reduce 任务中。这些任务完全并行处理,从而在多个计算节点上扩展数据处理。输入作业和输出作业存储在文件系统中。该框架负责任务调度、监控并重新执行失败的任务。通过配置更改,MapReduce 模型框架可以轻松扩展应用程序,使其在集群中的数以万计的机器上运行。

数据库

Apache Cassandra 架构是一个分布式 NoSQL 数据库管理系统,以其可扩展性、性能和持续运行的能力而著称。Apache Cassandra 基于环形设计,其中所有节点都扮演相同的角色,没有主节点的概念。与其他架构(如主从架构、传统架构或分片设计)相比,Cassandra 设置和维护都非常简单,并且设计用于处理跨商品服务器的大量结构化数据。

Apache Cassandra 的高可用性和可扩展架构使其能够处理大量数据,以及跨多个数据中心分布的数千个并发用户和操作,通过分发用户流量来确保高性能。Cassandra 具有内置功能,如数据建模、高可用性集群、监控工具、查询语言等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

统一(公共)服务

  • 资源管理:Apache Hadoop 的Yet Another Resource NegotiatorYARN)是一种集群管理技术。YARN 是 Apache 软件基金会第二代 Hadoop 2 版本的关键特性之一,也是其开源分布式处理框架的一部分。它还具有多功能性;资源管理器可以支持其他范式,而不仅仅是 Map/Reduce。

  • Apache Oozie:Apache Oozie 是一个调度工作流以管理 Hadoop 作业的系统。Oozie 中使用有向无环图(DAG)表示工作流,它由控制流节点和活动节点组成。工作流的开始和结束,以及控制工作流执行路径的机制,都是由控制流节点定义的。通过工作流触发计算处理任务的执行发生在动作节点上。

  • Apache Sentry:Hadoop 在文件系统级别提供强大的安全性,但缺乏足够的粒度来有效地保护用户和商业智能应用程序对数据的行级访问。Sentry 允许在服务器、数据库和表级别进行访问控制,并授予不同的权限级别,包括选择、插入等。它为经过身份验证的用户提供数据访问权限,能够控制和强制执行数据访问等。它能够实现 Hadoop 中数据和元数据的细粒度访问控制。列级安全性可以通过创建允许列子集的视图来实施,通过限制基础表和授予权限来实现。Sentry 的管理简单且方便,通过基于角色的授权进行管理。它是一个策略引擎,可以轻松地授予多个组在不同权限级别(如资源、角色、用户和组)上对相同数据的访问权限。

以下图表提供了 Hadoop 系统所采用的安全模型的全面视图。企业级实现中,在多个层面上都存在安全需求,例如集群级、用户级和应用级等。

Cloudera 提供了四层安全性,分别是;边界安全、访问控制、安全可见性和数据保护。Cloudera 企业安全可以分为四个广泛类别;身份验证、授权、数据保护和审计:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以下表格列出了流行工具提供的安全特性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Cloudera 专有服务与操作/集群管理

  • Cloudera Navigator:Cloudera Navigator 是 Cloudera Enterprise 的一部分,是一个完全集成的数据管理和安全系统,旨在为 Hadoop 平台提供支持。Cloudera Navigator 是 Hadoop 的数据治理解决方案,提供数据发现、持续优化、审计、数据血缘、元数据管理和策略执行等关键功能。Cloudera Navigator 支持持续的数据架构优化,并满足合规性要求。

  • Cloudera Manager:Cloudera Manager 是一个端到端的应用程序,用于管理 CDH 集群。Cloudera Manager 通过提供对 CDH 集群每个部分的精细化可视化和控制,设定了企业级部署的标准——使操作员能够提高性能、增强服务质量、增加合规性并降低管理成本。

  • Cloudera Director:Cloudera Director 与 Cloudera Manager 以及云服务提供商合作,提供对云中集群的集中式和程序化管理,包括 CDH 集群的部署、配置和维护。使用 Cloudera Director,您可以监控和管理多个 Cloudera Manager 和 CDH 部署,跨不同的云环境进行管理。

一个 Hadoop Hortonworks 框架

以下图像展示了 Hortonworks 的框架。许多组件与之前看到的 Hadoop 堆栈相同;接下来我们将讨论该发行版独有的组件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据治理和调度管道

Apache Falcon 是一个数据管理工具,用于管理系统基础设施、数据和处理逻辑之间的依赖关系。数据管理员可以为 Hadoop 工作流定义操作和数据治理策略,以监督 Hadoop 集群中的数据管道 (searchdatamanagement.techtarget.com/definition/Hadoop-2)。使用 Falcon,我们可以管理成千上万的计算节点,在任何给定时间,集群中通常会运行大量作业,从而确保复杂处理作业的一致性和可靠性。

Falcon 依赖于 Oozie 作业调度软件来生成处理工作流,设置复制程序,并对传入数据进行保留和归档。数据治理引擎调度和监控数据管理策略,如增强的监控等。其他功能包括跟踪作业活动中的失败、依赖关系、审计和数据血统,并对数据进行标签化,以符合数据保留和发现要求:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

集群管理

Apache Knox 是一个堡垒安全服务器;通过屏蔽对 Hadoop 集群节点的直接访问,帮助设置更加安全,适用于企业级安装。Knox 通过支持无状态协议,能够轻松地进行水平扩展。Knox 提供由用户和组通过 LDAP 或 Active Directory 管理的身份验证功能。身份联合是基于 SSO 和 HTTP 头的。

通过服务级别的访问控制列表 (ACL) 支持授权。Knox 策略的实施涵盖了身份验证、联合认证、授权、审计、调度、主机映射和内容重写规则等。该策略通过在拓扑和集群定义内定义的提供者列表实施,用于路由和在用户-facing 的 URL 和集群内部之间进行转换。

数据访问

  • Apache Tez:这是一个应用框架,允许为数据处理构建复杂的有向无环图任务。它是基于 Apache YARN 功能的资源管理框架,能够扩展构建高性能的批处理和交互式数据处理应用程序,从而在保持 MapReduce 可扩展性至 PB 级数据的同时,显著提高响应时间。Tez 适用于需要接近实时的查询处理和机器学习等场景,提供了一个强大的框架,以数据流图的形式表达计算。

  • Apache HCatalog:这是一个 Hadoop 的存储管理层,方便从 Hadoop 集群网格读取和写入数据,支持不同的数据处理工具,如 Hive、Pig、MapReduce 等。对于存储在 HDFS 中的不同数据格式,如 RCFile、Parquet、ORC 文件或 Sequence 文件,使用 Hive 序列化-反序列化器 (SerDe) 以启用关系视图。Apache HCatalog 提供了诸如表抽象和数据可视化等功能,供工具用于清理和归档。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据工作流

WebHDFS 协议为外部应用程序提供通过互联网、HTTP 或网页访问,用于管理存储在 HDFS 集群中的文件和数据,与 Hadoop 集群的高性能本地协议或默认的 Java API 同等。WebHDFS 基于行业标准的 RESTful 机制,提供与本地 Hadoop 协议相当的安全性。使用 WebHDFS 常用工具如curl/wget,用户可以访问 HDFS 执行操作,如读取文件、写入文件、创建目录、修改权限、重命名等。

Hadoop MapR 框架

MapR 是 Apache Hadoop 的商业发行版,其 HDFS 被 MapR-FS替代。以下是包含常见 Hadoop 开源组件的 MapR 框架;我们将接下来回顾这个发行版中特有的组件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

机器学习

MLLIB 是一个机器学习算法和工具集,适用于预测模型和数据科学。它包含一些广泛的类别,如分类、聚类、协同过滤等。每个类别下使用的部分机器学习算法如下所示:

  • 分类:逻辑回归,朴素贝叶斯

  • 回归:广义线性回归、生存回归、决策树、随机森林和梯度提升树

  • 聚类:K-means、Gaussian 混合模型(GMMs)、频繁项集、关联规则和序列模式挖掘

GraphX 是 Spark 中用于图和图并行计算的新组件,用于实现需要建模对象之间关系的算法类型。在许多实际应用中,如社交网络、网络通信和天体物理学,图形处理在表示实体之间的模型关系时非常有效和高效。

SQL 流

Apache Drill 是一个分布式 SQL 引擎,支持在非关系型数据存储上进行数据探索和分析,如 Hadoop、MapR、CDH、NoSQL(MongoDB、HBase)、云存储(Amazon S3、Google Cloud Storage、Azure Blob Storage、Swift)等。它使用碎片化的内存列式执行引擎进行分布式查询优化和执行,适用于复杂数据和无模式数据。通过在运行时编译和重新编译查询的查询引擎,能够实现高性能的数据处理,支持任何数据结构。用户可以使用标准 SQL 和 BI 工具查询数据,而无需创建和管理模式。它支持无模式的 JSON 文档模型,类似于 MongoDB 和 Elasticsearch,并支持行业标准的 API——ANSI SQL、ODBC、JDBC 和 RESTful API。

Apache Shark 是基于数据仓库的系统,和 Apache Spark 配合使用;它的分布式查询引擎大大提高了高端分析结果和 Hive 查询的性能。Shark 支持 Hive 的大部分特性,如查询语言、元数据存储、序列化格式和用户定义函数。Apache Shark 基于 Apache Spark 构建,而 Spark 是一个并行数据执行引擎,因此 Shark 可以以亚秒延迟响应复杂查询。它通过列式内存存储系统提供最大的性能提升,因为数据存储和处理都在集群内存中或数据库中的内存化视图中进行。

存储、检索和访问控制

Accumulo 提供细粒度的数据访问控制和单元格级访问控制,通过复杂的策略管理对敏感数据的访问。它是一个低延迟、大表数据存储和检索系统,基于键/值存储设计。Accumulo 提供对庞大的 HDFS 表的极快速访问,同时控制对其数百万行和列,甚至单元格级别的访问。它通过为每个数据单元格编码策略规则,结合不同数据集并实施访问控制策略,从而实现对数据集的细粒度访问控制。

数据集成和访问

Hue 是一个开源 Web 界面,允许通过 Apache Oozie 在任何 HDFS 集群中分析数据。它具有许多内置功能,例如 Hue 编辑器,可以构建工作流并安排它们定期自动运行。它还提供一个仪表板,用于数据查询、监控进度和日志,并执行如暂停或停止任务等操作。支持的应用程序包括 Apache Hive、Apache Impala(孵化中)、MySQL、Oracle、PostgreSQL、SparkSQL、Apache Solr SQL、Apache Phoenix、Apache Solr 和 Apache Spark。

HttpFS–Apache Hadoop HttpFS 是一项服务,提供通过 REST API 对 HDFS 的 HTTP 访问,支持所有 HDFS 文件系统操作(包括读取和写入)。它支持不同版本 Hadoop 运行的 HDFS 集群之间的数据传输(解决 RPC 版本问题),或者支持防火墙后面的集群。

配置和协调

数据提供工具为 Hadoop 系统提供云托管和协调服务,以下讨论了两种流行的选择:

  • Juju:Hadoop 发行版中提供的容器选项是 Juju 框架。它允许用户在一系列服务上部署本地构建的软件,包括 MAAS、EC2、Azure 和 LXD 容器。Juju 可以建模、配置和管理服务,并通过几条命令将其部署到所有主要的公共和私有云。Juju 商店中有数百个预配置的服务可供使用。

  • Apache Whirr–云上的大数据:Apache Whirr 可用于在云平台(如 Amazon EC2、Rackspace 服务器和 CloudStack)上定义、配置和配置大数据解决方案。Whirr 会自动启动云中的实例(库集合)并在其上启动 Hadoop。它启动云中立的大数据服务,用于定义和配置 Hadoop 集群,并为 MapReduce 任务添加 Hive、HBase 和 Yarn 等包。

Pivotal Hadoop 平台 HD Enterprise

以下是 Pivotal HD Enterprise 框架。该框架中的开源 Hadoop 组件已在前面讨论过。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于 IBM 大数据的 Hadoop 生态系统

以下是基于 IBM 大数据的 Hadoop 生态系统。我们已经熟悉了此框架中列出的多数开源 Hadoop 大数据组件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于 AWS 的 Hadoop 生态系统

Amazon Elastic MapReduceEMR)是一项服务,允许用户在 Amazon 的网络基础设施内启动和扩展 Hadoop 集群。EMR 实例使用 Amazon 预构建和定制的 EC2 实例,这大大简化了 Hadoop 和 MapReduce 组件集群的设置和管理。EMR 能够在 AWS 云 Hadoop 集群中有效地分析大数据集。

以下图示展示了 AWS EMR 框架,其中描述了多个服务层:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提供了一个与多种 Hadoop 开源组件集成的 AWS EMR 框架,如下所示:

  • R:它是一个 GNU 包,是一个开源编程语言和统计计算与图形软件环境,广泛应用于统计学家和数据挖掘人员开发统计软件和进行数据分析。作为一门语言,R 既灵活又强大。

  • Presto:Apache Presto 是一个分布式并行跨平台查询执行引擎,运行于 Hadoop 平台上。Presto 支持使用标准 ANSI SQL 查询多个数据源,如 HDFS、MySQL、Cassandra、Hive、关系型数据库及其他数据存储。Presto 执行多个分析查询,优化低延迟和交互式查询分析,并且在不间断的情况下进行扩展。Presto 支持如今许多最佳的工业应用,如 Facebook、Teradata 和 Airbnb 等。

  • Gradle:现代软件开发的格局在不断演变,构建自动化的需求也在不断变化。项目涉及大量且多样的软件栈,使用多种编程语言,并采用广泛的测试策略。采纳敏捷实践有助于尽早集成代码,以及通过构建支持频繁且便捷地交付到测试和生产环境。Gradle 是一个开源构建自动化系统,建立在 Apache Ant 和 Apache Maven 的概念之上。Gradle 使用有向无环图来安排任务的顺序,并引入了一种基于 Groovy 的领域特定语言来声明项目配置。Gradle 专为多项目构建而设计,具备管理依赖关系的能力。Gradle 可以定义和组织大型项目构建,并建模项目间的依赖关系。它支持增量构建,通过智能地确定构建树的依赖关系和是否需要重新执行来优化构建过程。

  • Cascading:Cascading 是一个用于在 Apache Hadoop 上构建大数据应用的应用程序开发平台,提供了 Apache Hadoop 和 Apache Flink 的抽象层。Cascading 用于在 Hadoop 集群上创建和执行复杂的数据处理工作流,隐藏了 MapReduce 作业的底层复杂性。Cascading 通过计算引擎、系统集成框架、数据处理和调度能力提供了所需的抽象层级,具有最佳的抽象级别。Cascading 为 Hadoop 开发团队提供了可移植性,可以在不需要重写代码的情况下开发简单或复杂的数据应用程序。

  • Apache Phoenix:Apache Phoenix 是一个开源的、支持大规模并行的关系数据库引擎,它以 Apache HBase 为基础支持 Hadoop 上的 OLTP。它提供了对大数据集的随机实时访问,并通过熟悉的 SQL 接口支持如 Spark、Hive、Pig、Flume 和 MapReduce 等 Hadoop 系统。Apache Phoenix 抽象化了底层数据存储。聚合查询在数据存储节点上执行,减少了通过网络发送大量数据的需求。

  • Apache Mahout:Apache Mahout 是一套可扩展的机器学习算法,主要集中在协同过滤、聚类和分类等领域。

微软 Hadoop 平台是托管在微软 Azure 上的 HDInsight

以下是托管在微软 Azure 上的 HDInsight 生态系统架构。虽然一些原生开源层按原样嵌入,但其他一些则根据微软的专有产品进行了定制:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

系统的容量规划

Hadoop 集群的大小调整是一个重要任务,因为有许多因素会影响其性能。容量规划和 Hadoop 集群的大小调整对优化分布式集群环境及其相关软件至关重要。机器的数量、机器的规格以及每个节点的有效处理规划将帮助您有效地优化性能。

在 Hadoop 生态系统中,不同层次(组件/服务)相互作用,导致在任何层次之间复杂集群堆栈中的性能开销;因此需要在每个接口进行必要的性能测试并进行适当的调优,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有许多因素会影响复杂 Hadoop 分布式集群的容量规划、大小调整和性能。以下是一些需要考虑的因素:

  • 数据量

    • 数据量及其增长

    • 数据保留策略:在丢弃数据之前保留多少年的数据

    • 数据存储机制(数据容器,如果有的话使用的压缩类型)

  • 工作负载类型:如果工作负载是 CPU/IO/内存密集型的,我们将需要相应地考虑硬件。如果处理量可能快速增长,我们还需要考虑增加新的数据节点。

  • 工作负载的频率:如果数据负载是批处理还是实时流数据,是每天几次、每晚、每周还是每月加载?

  • 安全类型:身份验证、授权和加密

  • 所需的服务类型

    • 集群的业务 SLA 是什么?是否需要实时支持?

    • 除了核心 Hadoop 服务外,还有哪些类型的服务在运行?

    • 将安装/使用多少第三方工具?

  • 操作系统选择:选择操作系统取决于多个因素,例如团队的管理能力、采购和维护成本、稳定性、性能、可靠性、支持的可用性等。

    • CentOS:Linux CentOS 在功能上与 RHEL 兼容,并且是 Hadoop 集群中工作节点的流行选择。

    • RedHat 企业 Linux(RHEL):Linux RHEL 广泛应用于 Hadoop 集群中的服务器。

    • Ubuntu:非常流行的基于 Debian 的 Linux 发行版,提供桌面版和服务器版。

    • SLSE:由 SUSE 开发的 Linux 企业服务器。它主要为服务器、大型机和工作站设计,但也可以安装在桌面计算机上进行测试。

    • Solaris, OpenSolaris:在生产集群中不太流行。

    • Fedora Core:用于服务器和工作站的 Linux 发行版。

  • 网络考虑:Hadoop 非常依赖带宽,因为大多数时间所有节点都在同时互相通信。可以考虑使用专用交换机、10 GB/sec 的以太网带宽,以及通过交换机互联的机架。

估算和容量规划的指导方针

合理的集群规模包括为主节点和工作节点以及边缘节点选择合适的硬件,同时保持低成本。

以下是一些需要考虑的因素,并附上一些容量规划的基本指导:

  • 数据大小

    • 对于数据大小,建议的副本因子为 3

    • 如果要存储的总数据为 Y TB,则在复制后将变成 3Y TB

    • 如果使用任何压缩技术存储数据,则可以考虑压缩因子

    • 对于磁盘效率,建议总磁盘可用容量的 60-70% 使用率

    • 因此,包含磁盘压缩因子的总磁盘容量 = 3 x Y x 7

  • 数据增长率

    • 考虑到数据增长因素,比如每年增长 1 TB

    • 考虑使用 3 倍副本因子

    • 磁盘效率因子为 70%

    • 我们需要计算 1 TB * 3 / .6 = 4-5 TB

    • 每增长 1 TB 数据的存储容量

    • 考虑到数据处理需求和数据量的增长,相当于添加一个新的节点

    • 数据节点规划数:

      • 假设我们需要在 HDFS 中存储 200 TB 的数据

      • 使用 3 倍副本时,总容量将达到 600 TB

      • 考虑到副本因子,总存储将是 600 * 1.3 = 780 TB(大约)

      • 假设每个节点有 12 个磁盘,每个磁盘容量为 2 TB = 每个节点 24 TB

      • 所需节点数量为 780/24 = 33 个节点

      • 考虑到数据增长需求,我们需要按月、周、年等计划集群扩展所需的额外节点

集群级别的规模估算

根据各个节点的角色,集群规模和容量规划对不同节点非常重要。

对于主节点

主节点模式的容量规划至关重要,需要考虑系统资源和托管服务,如下所示:

  • 内存:主名称节点的容量规划是一个非常重要的任务。经验法则是为每百万个块预留 1 GB 堆内存。例如:

    • 考虑一个 5 节点的集群

    • 每个节点的原始存储为 20 TB

    • 假设 HDFS 块大小为 128MB

    • 总块数 = 5 * (2010241024) = 33 百万(大约)

    • 总 HDFS 块大小为 3300 万

    • 基于复制因子为 3,所需堆内存大小 = 33/3 = 11

    • 实际块的总数大约为 11 GB。

    • 还有其他因素需要考虑:

      • 名称节点是稳定的实体,因此在规划大小配置时,还应考虑未来的增长前景。

      • 资源管理器、HBase 主节点、zookeeper 等服务也将运行在此节点上。

      • 经验法则是为 HBase 等服务保留至少 2 GB,为资源管理器保留 4 GB。

      • 根据正常使用情况,主节点的内存配置应为 128 GB 至 512 GB。

  • CPU:每个节点的处理器核心数应为 2 GHz 或更高,具体取决于该节点上运行的服务数量。

  • 磁盘:主节点的本地磁盘应配置为 RAID10,并配有热备件,以确保在磁盘故障时能够提供良好的性能和快速的恢复。应该为 /var 配置一个单独的分区,最小大小为 1 TB,或者根据日志存储所需的容量进行配置。强烈建议在生产环境中配置高可用性。

工作节点

工作节点的容量规划需要根据它所运行的服务仔细考虑系统资源(内存、CPU、磁盘):

  • 内存:工作节点上的内存基于它们将要运行的工作负载和守护进程。每个工作节点应考虑配置 256 GB 至 512 GB 的内存。

  • CPU:CPU 的容量基于工作负载类型和计划的并行 MapReduce 任务数。通过启用超线程,MapReduce 任务的总数应为核心数的 1.5 倍。建议至少配置 24 核心,且处理器主频大于 2 GHz。

  • 磁盘:应考虑使用大量小型 SATA 磁盘(2 至 4 TB),而不是少量大型磁盘。所有磁盘应配置为 JBOD,并启用 noatime 和 nodiratime,同时 /var 作为与根 OS 分区分离的单独分区。建议添加额外节点来增强存储,因为这也会提高处理能力。

网关节点

网关节点不运行任何特定的 Hadoop 服务;它们的配置应基于将要运行的任务。

  • 网络

    • 网络是一个核心组件,应非常仔细地考虑,因为 Hadoop 的处理是基于数据的邻近性。

    • 如果工作负载仅包含映射作业,且只进行数据转换,那么数据在网络上传输的量不会很大。如果工作负载有大量的 reduce 操作,如聚合、连接等,那么节点之间的数据传输量就会很大,在这种情况下,我们应该考虑至少 10 GB 的网络容量。

    • 在考虑网络配置时,还应考虑运行其他服务,如 HBase 和 Spark。

    • 每个机架平均考虑 15 到 20 个节点。

    • 推荐将双以太网卡绑定在一起,以支持故障转移。

    • 设置数据本地性和跨机架的复制配置(机架意识)是一种良好的实践,这样即使某个机架发生故障,数据仍然可以访问。

    • 核心交换机与机架顶部交换机相连时,应该具有高带宽(10 GB/sec 或更高)。应考虑机架顶部交换机以及核心交换机的冗余配置。

总结

在本章中,我们介绍了大数据 Hadoop 组件、流行框架及其为各种服务提供的独特组件。在下一章中,我们将介绍云计算的术语和技术,如公共、私有、混合模型,基础设施、平台、身份、软件和网络服务等服务产品。我们还将介绍一些流行的市场供应商。

第五章:云计算

云技术对于构建大数据、数据科学和物联网系统至关重要,它们可以应对海量数据,并提供灵活性和可扩展性。DevOps 在云环境中尤为突出,它通过将环境配置作为代码执行,能够创建与软件项目一致的复制环境。在本章中,我们将讨论云计算术语、架构模型、服务提供的基础构件,如平台、基础设施等。我们还将讨论流行的市场供应商等内容。

在本章中,我们将讨论以下主题:

  • 云计算概念

  • 架构模型:

    • 公有云

    • 私有云

    • 混合云

    • 社区云

  • 服务提供:

    • PaaS

    • IaaS

    • SaaS

    • IDaaS

    • NaaS

  • 市场供应商:

    • 亚马逊

    • Azure

    • SalesForce

  • 云计算安全

  • 云备份解决方案

云计算技术

云技术涵盖了多种服务提供和基础技术,以下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

云计算的日益普及导致其在银行、保险、高科技、制药、制造等行业的广泛应用。大数据系统从多个源系统中获取大量数据,且数据格式多样。因此,将数据存储或暂存于云端,相比本地系统,具有较高的经济效益。

即使是物联网,来自机器的传感器数据也会迅速达到 TB 和 PB 级别,因此只有云系统能够经济地存储如此庞大的数据量。通过战略性和系统化地采用业务流程、应用程序、平台和基础设施,企业可以获得以下多重好处:

  • 动态负载模式与弹性可扩展性:云的一个知名应用场景是工作负载变化且不可预测。在这种情况下,客户可以通过将高需求计算任务转移到云端,按需扩展 IT 容量,而无需为峰值负载配置资源,从而为企业节省成本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 快速部署:云端资源的容量规划和采购时间大幅缩短,因此使用云设置时,应用程序部署变得相对容易且迅速;同时可以将基础 IT 需求转交给云服务提供商。

  • 按需付费:只为所需和使用的部分付费。其主要优点在于节省了许多支持网络和系统的产品的努力和成本,如垃圾邮件/病毒防护、加密、数据归档、电子邮件服务和异地存储。

  • 更高价值:IT 支持系统的管理工作转移到云服务提供商那里,从而使内部 IT 资源能够专注于更高价值的业务活动,并且资本支出可以用于更紧迫的业务投资。

云的采用涉及以下各层:

  • 商业流程

  • 应用

  • 平台

  • 基础设施

我们将在接下来的部分详细讨论这些内容。它们也在以下图表中表示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

云技术概念

虚拟化是一个重要的技术,通常与云技术一起提及。它是云计算相关的主要技术框架,旨在通过创建多个共享同一物理基础设施(如操作系统、服务器、存储设备或网络)的专用执行环境。虚拟化软件操作硬件,而云计算指的是服务,并提供共享计算资源软件或数据作为综合服务的价值。

虚拟化是在裸机或现有操作系统上创建虚拟机,并使用虚拟机管理程序。

有一些模型,比如 Oracle VM、Sun xVM Server、LynSecure 和 VirtualLogicVLX,能够在没有操作系统的裸机系统上运行虚拟机管理程序(hypervisor):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

另一个类别涉及在现有操作系统上安装虚拟机管理程序软件。一些例子包括 VMWare Fusion、Virtual Server 2005 R2、容器、Microsoft Hyper V、Windows Virtual PC 和 VMWare workstation 6.0:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虚拟机监控器VMM)或虚拟管理器,是一种技术,用于创建设备或资源的虚拟版本,使多个应用程序能够在同一台服务器上同时运行多个不同的操作系统。DevOps 确保在开发、QA、预生产和生产等环境之间的配置一致性。云上虚拟机的使用以及与 DevOps 一致的复制,是快速响应的有效模式。安装在操作系统上方的虚拟机管理程序或 VMM,使服务器、工作站、存储和其他系统独立于物理硬件层。虚拟机VM)是基于架构的计算机系统仿真,并提供专门的功能。主机是运行一个或多个虚拟机的计算机,而每个虚拟机被称为客户端机器

虚拟化提供了许多好处,包括以下几点:

  • 最大化资源:传统构建的系统通常大部分未得到充分利用。虚拟化可以通过高效利用容量来减少需要获取的物理系统数量。虚拟化帮助最大化硬件投资的使用,以便从服务器中获得更多价值。

  • 多系统:这些可以帮助你在相同的物理硬件上运行多种类型的应用程序,甚至为这些应用程序运行不同的操作系统,比如在同一台服务器上运行 Linux 和 Windows,并部署相应的应用程序。

虚拟化可以是完全虚拟化或准虚拟化。

完全虚拟化是指将包含所有软件的服务器模拟到另一个系统。它在以下场景中更为适用:

  • 在多个用户之间共享计算机系统

  • 隔离用户之间以及控制程序之间

  • 模拟客户端或主机系统的服务器系统

**Para-virtualization(半虚拟化)**允许多个操作系统在单个硬件设备上运行,它在以下场景中更为适用:

  • 方便迁移到新系统,因为可以轻松迁移客户机系统

  • 容量管理,轻松增加额外资源

  • 客户机实例的灾难恢复管理

虚拟化提供了诸如系统整合、完全托管的虚拟化系统和成本高效的系统等好处。

然而,超越虚拟化的云解决方案提供了以下功能,我们将详细讨论:

  • 自助服务

  • 弹性

  • 自动化管理

  • 资源池和可扩展性

  • 按需付费服务

有状态、无状态服务器和 REST 协议通常与云计算技术一起提及。

有状态服务器通过会话形式保持用户的状态信息。一旦用户登录到网站,便会创建一个唯一标识符,并由 Web 服务跟踪该会话的信息。会话信息将在用户的所有其他请求中保持,直到浏览器关闭;这些会话信息有助于为用户提供个性化服务。会话的详细信息也有助于监控并发的网页流量,并结合安全功能,例如防止恶意用户通过已建立的连接同时发起多个请求,导致网页服务器被淹没。

无状态服务器顾名思义,不会为用户保持任何状态信息,因此每个请求都是完全独立处理的,作为一个新的请求,与前一个请求无关。

Web API 的设计遵循无状态架构,并使用REpresentational State Transfer(REST)协议。这种无状态设计中的用户身份是通过分配给用户的唯一用户 ID 来实现的,该 ID 需要随每个请求一起传递。

REST 是一种以资源(或数据)为主要目标的架构方法,而不是 API 应提供的功能(功能性)。它提供了更好的可扩展性、互操作性,并且在以下场景中应用得当:

  • 客户端服务器

  • 无状态服务器

  • 可缓存的网页系统

  • 分层系统

  • 按需代码

  • 统一接口

REST 是一组约束,确保了可扩展、容错且易于扩展的系统,这些约束已被 万维网 (WWW) 采纳。RESTful API 可以使用其他传输协议,例如 SNMP、SMTP 等。超文本传输协议 (HTTP) 是用于在 WWW 中链接超文本页面的协议。这也是除了其他传输协议(如 FTP、gopher 等)之外,传输文件的常用方式。在大多数情况下,RESTful API 使用 HTTP 作为传输层,因为 HTTP 的基础设施、服务器和客户端库得到了广泛采用。RESTful API 遵循所有 REST 约束,而 HTTP API 则利用 HTTP 作为其传输协议,包括依赖 HTTP 的 SOAP API。

使用 REST API 的过程就像在网站之间进行导航一样。HTTP 和 HTTPS 是实现 REST API 时使用的两种关键协议。统一资源标识符 (URI) 被 REST API 用作访问特定网站的地址。URI 由两部分组成——统一资源定位符 (URL) 和 统一资源名称 (URN)。URL 表示计算机网络上特定资源的位置,并定义了检索该资源的机制。URN 是 web 资源的名称。

例如,https://en.wikipedia.org 是我们的 URL,而 /wiki/Cloud_computing_architecture 是我们的 URN。

组合 en.wikipedia.org/wiki/Cloud_computing_architecture 是一个独特的 URI 资源地址或标识符。

在与任何 REST API 交互并通过 HTTP 协议与服务器通信时,有四个基本操作:GET、POST、PUT 和 DELETE。

  • GET 将检索指定的元素

  • PUT 将创建或替换指定的元素

  • POST 用于创建另一个元素

  • DELETE 将删除指定的元素

这些也用于获取调用响应的状态;例如,HTTP 状态码 404 表示页面或地址 未找到

在使用 REST API 时,展示输出结果的两种数据格式是 JavaScript 对象表示法 (JSON) 和 可扩展标记语言 (XML)。JSON 的优点是更容易解析,因此在大多数情况下比 XML 更受欢迎。而 XML 在结果验证和导航方面具有一些更先进的功能,但它更为复杂。通过在 URI 末尾使用 .json,可以传递 JSON 格式的输出。

身份验证与安全

通过 HTTP 协议的 REST API 确保身份验证、安全机制和数据保护,它们加密客户端和服务器之间的流量。一些 API 依赖于 GET 请求来查看数据,而无需身份验证;然而,对于任何数据修改,身份验证是严格执行的。HTTP 身份验证的用户名和密码是基础模型,使用 Base64 哈希,这不是一个可扩展和安全的模型,基于令牌的身份验证机制,通常称为 Authtype 1/2,现在在 API 调用中更为突出。

多层云架构模型

云架构也遵循表现层、业务逻辑层和数据层的分层表示模式,以支持应用的多层模型。典型的架构模型及其底层组件如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这一分层架构模型得到了流行的云服务提供商的支持,在每个服务层提供多个增值特性和功能,具体如所列。

表现层

表现层是面向用户并与之互动的层。它通过与其他层通信,在网站/网页上显示与可用服务相关的信息。它协调与网络中其他层(如业务层和数据层)之间的交互,将服务和查询请求的结果发送到浏览器:

  • 弹性基础设施:为了满足实时需求,虚拟化管理程序被启用以创建虚拟机或容器,实现云基础设施的弹性。这些系统具备自助服务 BI 功能,提供如资源利用率监控、可追溯的计费和资源供应等特性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 纵向扩展:将应用迁移到更大的虚拟机上,或通过重新调整虚拟机(回收虚拟机的容量)以适应应用的可扩展环境,这被称为纵向扩展或扩展上行。这通常与多个依赖关系相关。

  • 弹性平台可扩展性:这通常与应用层相关,指其能够处理不断增长的工作量。通过增加或扩展系统、网络或流程,以满足业务增长的需求。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 横向扩展:这是通过在额外的机器上提供更多应用层实例(通过额外资源),然后在它们之间分配负载来实现的。尽管横向扩展允许通过提供资源在应用之间重新分配资源,应用架构应能够通过额外节点扩展,并通过分配负载来支持。

  • 基于节点的可用性:大多数传统应用程序都是为在单一机器上运行而开发的。在这里,每个节点在托管应用程序中扮演着独特角色,并且其可用性受到衡量。这些应用程序需要重新编写代码,以适应云提供的可扩展性和弹性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 基于环境的可用性:采用多线程架构构建的应用程序能从基于集群的环境中获益,这些环境具备内建的弹性和可扩展性。对于使用不均衡,或者在某些特定时期出现的高峰情况,这是至关重要的。应用程序应设计成能够检测实时资源需求变化,如带宽、存储和计算能力,并自动采用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

业务逻辑层

业务逻辑层也称为应用层。顾名思义,业务逻辑执行应用程序所需的所有处理,并通过与底层数据层的通信,将所需的详细信息发送到展示层。

  • 虚拟网络:这是一种用于访问网络上远程系统的技术,也被称为远程桌面共享,并使得通过其他协议(如远程帧缓冲RFB)、远程桌面协议RDP)和Apple 远程桌面ARD))实现对系统的可视化显示和控制。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 面向消息的中间件面向消息的中间件MOM)使得在分布于异构平台的应用程序模块之间发送和接收消息成为可能。MOM 通过软件或硬件基础设施的支持,减少了跨多个操作系统和网络协议开发应用程序的复杂性。以下是 MOM 的一些变种:

    • 精确一次交付:对于许多关键系统而言,消息的精确一次交付至关重要。通过使用过滤条件,可以避免重复消息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 至少一次交付:为确保消息至少交付一次而不丢失,针对每条消息,都会添加一个相关的确认。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 基于事务的交付:这确保消息被完全交付,并作为一个事务接收,符合 ACID 标准。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 基于超时的交付:在此过程中,消息不会从系统中删除,直到客户端系统确认收到并读取该消息。因此,消息将被存储在系统中,直到那个时刻,并且在客户端系统中隐藏,作为备份。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据层

数据层是数据的存储库;它支持展示/业务/应用层处理浏览器请求。浏览器的请求通过共享底层数据转化为应用逻辑,确保根据业务需求保密性和一致性。

  • 严格一致性:数据的多个副本在不同位置进行维护,以便在发生故障时提供数据冗余,确保副本的一致性,并提高响应时间。数据副本可以进行读操作或写操作;它们的方程式 N(副本数量) < R(副本读取访问) +W(副本写入访问),N <R+W,确保数据一致性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 最终一致性:最终一致性由存储在不同位置的数据使用;数据并非始终保持一致,以确保在网络分区情况下数据的性能和可用性。所有副本通过异步传播数据修改来更新。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关系数据库

许多传统的关系数据库,数据根据模式结构化并通过数据操作进行强制执行,如 Microsoft SQL Server、Oracle 数据库、MySQL、IBM DB2 和 Amazon 关系数据库服务,得到了支持。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NoSQL 数据库

云平台提供并支持许多新时代的 NoSQL 数据库版本,如以下内容:

  • 提供文档数据库,如 Couchbase Server、CouchDB、DocumentDB、MarkLogic 和 MongoDB

  • 提供图形数据库,包括 AllegroGraph、IBM Graph、Neo4j 和 Titan

  • 提供列存储,如 Google Bigtable、Cassandra 和 HBase

数据存储

云平台支持多种类型的存储,包括以下内容:

  • 键值存储:我们已经看到,在 Map Reduce 框架中,值以键值对的形式存储,没有模式,数据的值可以是数字、字符串、计数器、JSON、XML、HTML、二进制文件、图片、短视频等。在键值存储或键值数据库中,值通过键进行标识和访问。这种数据存储形式适合存储、检索和管理关联数组。这种数据结构设计方法被称为字典或哈希。一些流行的数据库包括 Aerospike、Apache Cassandra、Berkeley DB、Couchbase Server、Redis、Riak 等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Blob 存储:Blob 是二进制大对象。它用于存储大量非结构化的二进制数据,如文本或二进制数据,这些数据可以通过 Web 协议(如 HTTP 或 HTTPS)访问。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 块存储:块 Blob 由不同大小的存储块组成,并通过块 ID 进行标识。块存储非常适合流数据,其中大视频被分割成更小的片段并并行上传以减少上传时间,并进行组装。这适用于文件共享应用程序,将文件块并行上传到存储服务,然后组装成块 Blob:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

云架构

接下来介绍了最常见的实施模型。

公共云

在公共云中,应用程序和服务托管在公共云平台上。系统和服务易于公众访问;例如,亚马逊、微软 Azure、谷歌、Salesforce 等:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

公共云的好处包括以下内容:

  • 经济规模:通过与大量消费者共享相同的资源,公共云具有成本效益。

  • 可靠性:公共云在不同位置维护副本,用于故障转移时提供冗余,提供高可靠性。

  • 弹性可伸缩性:公共云可以根据需求从资源池中灵活扩展或缩小。

  • 灵活性:有多种选择供应商的选项,还可以将公共云与私有云集成等。

  • 按需付费:此功能使资源在消费者需要时可访问。

私有云

在私有云中,应用程序、操作系统、云基础设施和存储均位于私有云中。它们仅供组织内部操作。私有云可以由组织内部管理,也可以由第三方管理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最重要的安全功能是防火墙将私有云与外部世界分开,从而从数据窃取中大幅增强安全性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

私有云的优势在于在组织内部保持组织信息的隐私和安全性,并且组织内部具有更多控制权。尽管成本较高,但通过增强安全性,也提供了更高的效率。

挑战在于私有云的可伸缩性受限,并且取决于组织的资源可用性。采购可能导致价格虚高或不灵活。私有云可能局限于本地地理位置,无法扩展到其他地区。

混合云

混合云结合了私有云和公共云的优势,包括:

  • 根据组织需求定制并整合的安全功能

  • 可伸缩性特性、架构灵活性,以及在公共和私有模型之间平衡成本效率的优化

挑战包括网络集成及相关的复杂性,以及在集成公有云和私有云时的安全合规性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

社区云模型

社区云便于一组机构共享系统和服务,所有合作伙伴组均可访问;例如,在教育领域,研究可以跨机构设置,基础设施和服务可由第三方管理。它在大组织的不同供应商组之间也能有效地促进协作。

好处包括成本效益,以及快速社区协作的优势。

安全功能根据社区需求进行优化,且优于公有云。

挑战可能包括数据治理、安全性和成本。由于所有数据都托管在一起,因此必须采取严格的安全措施,以防止未经授权的访问:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

云服务

云服务通常被广泛分类为私有云基础设施即服务平台即服务软件即服务。每种服务的变体取决于提供商与客户之间管理的层级:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

软件即服务(SaaS)

如前图所示,在 SaaS 中,所有组件和服务层级均由提供商所有。

SaaS 是一种应用程序托管在云端作为服务的模式,客户通过互联网的网页接口(如浏览器)访问。与传统的在单独计算机上安装应用程序的系统不同,客户无需在其计算机上安装任何特定的应用程序,也不需要维护或支持 SaaS 上的应用程序。云服务提供商负责升级、托管集成等工作。提供商负责所有的修补、升级,并确保基础设施的正常运行,并适当地收取费用。

SaaS 应用程序的设计和构建旨在支持多个并发用户使用网页浏览器工具。这些应用程序在大多数情况下非常适合标准的商业用途,在某些场景下也提供定制化的应用程序,例如以下内容:

  • 视频会议

  • 内容管理

  • 人力资源薪资应用程序

  • 团队协作和共享屏幕、应用程序等:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

软件即服务有几种选项,接下来将讨论。

单租户

每个客户作为租户拥有一个独立的软件实例,所有支持的基础设施都为该客户提供服务。每个租户都有自己的独立数据库和软件实例。没有共享,每个租户都是相互隔离的。其优势如下:

  • 增强的安全性

  • 服务的可靠性

  • 轻松备份和恢复

  • 从 SaaS 迁移到自托管系统很容易

  • 灵活性

  • 升级控制

多租户

多租户意味着多个组织访问同一服务器或资源;每个组织(或公司)被视为一个租户。架构具有集中化的计算、存储和网络,多个客户通过共享基础设施和软件来提供服务。每个客户共享支持基础设施和单一数据库。对于每个租户来说,系统看起来就像是专门为他们定制的。数据在客户之间被分区并加密,以便分别为他们提供服务;所有客户共享相同的应用程序代码副本,这使得它成为一个多租户云应用程序。所需的 IT 资源较少,用于修补、维护和升级应用程序(降低 TCO)。

多租户通过两种方式实现:通过实例复制的多租户,以及通过数据隔离实现的有效多租户。随着租户数量的增加,实例复制会成为一种开销,相应地虚拟机(VM)的数量会爆炸,导致性能和维护上的开销。

多实例

多实例按用户需求进行部署,以水平和无限的方式扩展多实例云。每个客户部署单独的应用逻辑和数据库进程,并根据组织的需求配置独特的实例集。多实例系统提供数据隔离,因为客户不会共享数据库和基础设施。

多实例环境提供了许多好处,包括更大的灵活性和更高的数据安全性,有效防止未经授权的入侵。其架构使得部署和扩展变得容易,可以满足更高的性能要求和服务水平协议(SLA)或 24×7 无缝服务体验。它有助于更好地管理产品更新、升级、配置管理和定制。客户的服务可以继续保持可用,同时迁移到本地服务器或另一个云平台进行例行维护和应对突发问题。创建和管理多个应用实例是一个有效的模型。

持续维护和升级多个实例环境(如数据库和 Web 应用实例)的挑战是,它比多租户模型更昂贵,因为从一个实例到多个实例的功能或特性传播不被支持。

SaaS 的好处

SaaS 的好处如下:

  • 快速的设置时间使得企业能够快速适应 SaaS 平台

  • 降低 IT 系统基础设施、硬件、许可证、软件等的采购成本

  • 降低软件升级等方面的维护成本

  • 安全套接字层SSL)已经建立起来用于安全访问,并且无需 VPN

  • SaaS 应用程序非常可靠和稳定

SaaS 的一些挑战包括低安全性特点,并且它的可定制性较差。

平台即服务(PaaS)

在 PaaS 中,用户可以获得一个基础设施,并为他们的定制需求提供一个平台,以便开发应用程序,并具有部署和维护它们的能力:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有不同类型的平台即服务(PaaS):

  • PaaS 开发即服务——独立开发环境。

  • 带有数据即服务的 PaaS。

  • 带有数据库即服务的 PaaS。

  • 与 SaaS 相关联的 PaaS。

  • 配备操作环境的 PaaS。

  • 开源平台 PaaS。

开发即服务(DaaS)。

开发即服务(Development as a Service)是一个基于网页的、社区共享的开发工具,相当于传统(非云计算)交付模型中本地安装的开发工具。在独立开发模型中,提供了运行时环境和集成开发工具,用于应用程序开发。可以选择多种开源开发和部署工具来开发应用程序,这些工具已包含在软件包中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据即服务与 PaaS。

数据即服务通常被认为是软件即服务(SaaS)提供的一种专业子集。这是一种基于网页的设计构造,通过某些定义的 API 层访问来自基于云的应用程序的数据,云应用程序的底层数据层可以是 RDBMS、文件系统或 Amazon S3。

数据库即服务与 PaaS。

数据库即服务类似于平台即服务(PaaS),其中可选择传统的关系型数据库(RDBMS)或非关系型数据库。

与 SaaS 环境相关联的 PaaS。

许多成功的产品供应商为他们的合作伙伴和**独立软件供应商(ISV)**创建了商业模式,共同开发应用程序,以利用扩展的技能、成本效益和市场速度。为了支持这一点,生态系统或环境作为 PaaS 被创建,使得合作伙伴和 ISV 可以根据规定的要求进行开发。

一些与 SaaS 环境协作的 PaaS 示例包括:

  • Salesforce.com 的 Force.com:客户和独立软件供应商(ISV)可以在salesforce.com生态系统中进行开发,并可以通过自己选择的方式或通过salesforce.com应用市场 AppExchange 进行销售。

  • Workday PaaS:通过 Workday 解决方案,客户可以集成应用程序,并利用服务进行构建、配置、测试和部署集成解决方案。例如,财务管理、人力资源 SaaS 解决方案等。

  • Google 应用环境:这是为独立软件供应商(ISV)开发 Google 应用程序的 PaaS。Google 应用引擎是一个可扩展的模型,根据弹性需求分配资源。Google 应用市场是所有 Google 应用的仓库,还提供搜索功能。Google 应用引擎的开源云平台是 AppScale,可以部署在公共云和私有云上。

  • Intuit 开发者网络:这是为 QuickBooks 会计软件提供的 PaaS,支持本地和云选项。ISV 可以开发定制化软件,并通过 Intuit 市场集成和推广其应用程序。

与操作环境相关的 PaaS

许多平台(IaaS)供应商已不再仅仅提供操作系统、网络等基础设施;他们还提供其他增值服务,如应用程序开发工具和性能指标。他们提供的产品包括平台和操作环境,以便提供更好的增值服务,让开发人员在支持下构建或部署应用程序。

与操作环境相关的 PaaS 示例如下:

  • Windows Azure:从仅提供基础设施(IaaS)发展起来,Azure 提供了从 Windows、SQL 抽象、开发工具、管理工具到服务的多个工具,成为一个完全成熟的 PaaS。

  • AWS Elastic Beanstalk:这是 Amazon 与Amazon Web ServicesAWS)一起打包的 PaaS,用于部署应用程序。Elastic Beanstalk 具有内置自动化功能,有助于组织实现自动化,按需自动扩展,并控制底层 IaaS 资源。

  • AT&T 平台即服务:AT&T 提供的 Synaptic 计算即服务CaaS),使用户能够轻松从零开始构建和部署应用程序。该平台提供预构建的应用程序模板。

  • IBM SmartCloud:这是一个混合型产品,能够根据需求增加将工作负载转移到公共云。支持的应用程序包括 Java、Web 和企业应用程序,部署在他们的私有云上。

开放平台 PaaS

开放平台 PaaS 不依赖于任何单一的云实现;开发人员可以根据平台开发自己的自定义工具或开源工具。通过开放平台 PaaS,云之间的迁移非常方便。这些平台非常适合混合云环境,支持在公共云和私有云上部署。

以下是一些开放平台 PaaS 的示例:

  • OpenShift:由 Red Hat 提供的全面集成平台,先进的功能也包括 JBoss 应用服务器和中间层。支持的应用程序包括 Java、Python、Perl、PHP、Ruby 等。

  • Cloud Foundry:该平台提供 VMware 公共云、vSphere 和 vCloud,用于构建、部署和操作基于云的应用程序,支持多种编程语言,如.NET、Java、Scala 和 Ruby。

  • Engine Yard:这是一个完全托管的 PaaS,与多个私有云和公共云(如 Azure 和 AWS)配合使用。可以为 Ruby on Rails 和 PHP 等语言构建应用程序。

  • CloudBees:这是一个为公共和混合云提供完整生命周期应用程序的平台。它主要是一个基于 Java 的平台,支持构建、测试、运行、管理和开发,独立于底层平台。

  • OrangeScape:支持私有或公共云,并提供可移植性。主要功能是使用 OrangeScape Studio 为非程序员进行面向过程的应用程序开发。它有预建立的业务模板可供使用。

  • Apprenda:主要用于 Azure PaaS 上的.NET 应用程序开发。组织可以将应用程序重新部署到其他本地或公共云中。

  • DotCloud:这是一个多栈解决方案,支持多种语言、数据库、缓存和消息组件。平台支持的语言有 Java、Perl、Ruby 和 PHP。

  • CumuLogic:这是一个云服务平台,支持自动化、自动扩展、监控、资源管理和用户管理,适用于基于 Java 的公共和私有云平台。

一个开源平台服务将包括整套开源应用程序。Cloudera 企业分发提供了一整套组件,用于

大数据 Hadoop 平台作为平台服务,包括 20 个组件(以下列出)从ETL(抽取转换加载)应用到MLLs(机器语言库)作为完整的平台服务:

这里,我们举一个 Cloudera 企业 PaaS 包的例子,因此它将符合其自己的规范。

  • Apache Sqoop:提供关系数据库(RDMS)和 HDFS 之间的数据移动;具有高度可扩展的架构。

  • Apache Spark:基于内存使作业处理更快、更容易编写。

  • Apache Sentry:为 Hadoop 用户提供基于角色和粒度级别的访问控制。

  • Apache Pig:这是一个用于处理大型数据集的批量分析框架,使用高级语言。

  • Apache Parquet:为 Hadoop 提供了高效的列式数据和压缩格式。

  • Apache Oozie:用于有效调度所有 Hadoop 作业的工作流调度程序。

  • Apache Mahout:用于各种任务的机器学习库,如分类聚类、协同过滤等。

  • Apache Kafka:基于发布订阅的 Hadoop 消息服务;其架构是分布式和弹性的。

  • Apache Impala:这是一个用于 HDFS、S3 或 HBase 的 SQL 查询编程语言,具有高并发和低延迟。

  • Apache Hive:这是用于 Hadoop 数据的 ETL 转换的批处理处理,具有 SQL 框架。

  • Apache HBase:这是一个流行的 Hadoop 列存储,它具有可扩展性,并支持随机读写访问。

  • Apache Flume:这是一个流数据处理框架,用于实时收集和聚合事件数据到 HDFS 或 HBase 中。

  • Apache Hadoop:这是最流行的存储平台,它还提供数据处理和资源管理功能。

  • Apache DataFu:用于大规模数据分析的统计评估定制函数,使用 PIG 编写。

  • Apache Avro:这是一个数据序列化框架,支持以二进制格式和 RPC 进行丰富的数据结构处理。

  • Apache Crunch:这是一个框架,包含用 Java 编写的用户自定义函数,用于编写、测试和运行 MapReduce 管道。

  • HUE:Hadoop 用户体验,提供基于 Web 的图形用户界面,便于与 Hadoop 数据交互。

  • Kite SDK:软件开发工具包,提供应用程序接口(API)。它包含创建 Hadoop 应用程序的示例和文档。

  • Cloudera Search:这是一个自由文本搜索引擎,类似 Google 风格,供使用 Hadoop 数据的企业用户使用。

  • Apache Zookeeper:这是一个资源协调服务,效果显著且可靠,用于分发 Hadoop 环境的基础设施即服务IaaS)。

IaaS 提供基础设施资源的访问权限。客户可以根据协议时间租赁服务,按需使用这些资源。基础资源包括物理机器、虚拟机、虚拟存储等。

除了这些主要资源外,IaaS 还通过服务器虚拟化扩展资源给最终用户;这些资源包括虚拟机磁盘存储、虚拟局域网VLANs)、负载均衡器、IP 地址和软件包等。

基础设施即服务(IaaS)是一种灵活高效的硬件计算资源租赁模式,包括虚拟机、存储、带宽、IP 地址、监控服务、防火墙等。消费者需根据使用资源的时间长度支付费用。

这个过程也非常简单便捷,提供虚拟机的管理访问权限。消费者还可以运行任何软件,启动 Web 服务器,安装新应用程序,甚至自定义操作系统。

IaaS 平台还支持云平台之间的可移植性和互操作性。例如,消费者拥有的服务器硬件上运行的网络应用(如 Web 服务器和电子邮件服务器),可以移植到 IaaS 云中的虚拟机上运行。

IaaS 面临的挑战如下:

  • 与 PaaS 和 SaaS 面临的挑战类似,IaaS 也存在网络依赖性和基于浏览器的风险。

  • IaaS 支持消费者在虚拟机基础设施中运行传统软件,但这可能暴露与这些传统软件相关的安全漏洞:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

针对 Linux 平台的 IaaS 提供以下所有流行的云端虚拟机模型:

  • CentOS

  • Debian

  • Kali

  • Red Hat

  • SUSE

  • Ubuntu

提供 IaaS 的两个流行云平台是亚马逊 AWS 和微软 Azure。这些平台不仅提供 IaaS,还提供 PaaS 和 SaaS 服务。

Microsoft Azure 门户

Microsoft Azure 门户是一个企业云平台,提供多种多样的产品,以下是其中的一些:

  • 虚拟机:提供支持 Linux、Windows Server、SQL Server、Oracle 等的虚拟化

  • 应用服务:为企业级构建网页、移动应用和 API

  • 云服务:用于在云端构建和部署的应用程序和服务

  • SQL 数据库:云端关系型数据库

  • Azure Cosmos DB:全球分布式数据库,覆盖多个区域

  • Azure Active Directory:云端的身份和访问管理

  • 存储:文件、磁盘、表、队列和 Blob 类型

  • 备份:集成云备份服务

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

亚马逊 Web 服务

亚马逊基于云的服务提供多种多样的产品,涵盖以下高阶功能,这些功能集成在其门户中并可访问:

  • 计算服务:

    • Amazon EC2:云端虚拟服务器

    • AWS Elastic Beanstalk:网页应用托管

    • AWS EC2 容器注册表/服务:存储/检索/运行/管理 Docker 镜像

    • AWS Lambda:基于事件的代码执行

    • 自动扩展:自动弹性调整

    • AWS 批处理:可扩展以运行批处理作业

  • 存储服务:

    • Amazon S3:云端可扩展存储

    • Amazon Glacier:云端归档存储

    • Amazon EBS:EC2 的块存储

    • AWS 存储网关:混合存储集成

    • Amazon Elastic File System:为 EC2 提供的托管文件存储

  • 数据库功能:

    • RDS:关系型数据库服务,支持 MSSQL、Oracle、PostgreSQL、SQL Server

    • DynamoDB:托管的 NOSQL 数据库

    • Aurora:高性能关系型数据库

    • ElasticCache:内存缓存系统

    • RedShift: 有效的数据仓库。

  • 迁移功能:

    • 应用发现服务

    • 服务器迁移服务

    • Snowmobile 数据运输

    • 数据库迁移服务

    • AWS 迁移中心

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Salesforce 云端产品

Salesforce 提供的多个服务与其他云供应商的产品相当。

销售渠道:

  • Sales cloud:基于云的 CRM 解决方案。

  • SalesforceIQ:通过电子邮件智能支持的 CRM 解决方案。

  • Salesforce 报价到收款:从准确的报价、提案到合同的周期,自动化的计费、订阅和收入确认,涵盖整个周期。

  • Service cloud:基于云的 CRM(客户关系管理)系统。

  • 营销云:基于云的邮件、移动、社交、广告、网页等营销活动。

  • 社区云:为社区群体提供合作、参与和互动的平台,支持共同开发。

  • 爱因斯坦分析:云端分析,支持深入分析选项。

  • 应用云:用于应用开发的云平台。

  • 物联网云:基于云的物联网机会。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网络即服务(NaaS)

与其他服务如 IaaS 和 PaaS 一样,NaaS 也作为增值服务提供,并基于按需付费模式将网络作为公用事业。NaaS 使用虚拟化网络基础设施提供网络服务;它使得可以直接且安全地访问网络基础设施。客户可以部署自定义路由协议;然而,NaaS 提供商负责维护网络资源,以确保工作负载得到支持。

NaaS 提供多项好处,包括可以作为 AWS 和 Azure 等门户的一部分。客户的网络是独立且逻辑隔离的,流量也是如此。网络带宽容量可调,客户只需为使用量付费。内置冗余和弹性保障备份。NaaS 便于新增服务元素,提供高敏感数据保护的专业解决方案。

身份即服务(IDaaS)

身份即服务 (IDaaS) 是一项重要的服务和关键功能,它是 IaaS、PaaS 和 SaaS 等其他服务的支柱。IDaaS 提供一整套身份和访问管理功能,帮助客户通过在客户端或云端的系统设置来使用服务。

IDaaS 功能包括以下广泛领域:

  • 身份治理与管理:这是一种确保组织数字信息资产安全并适应治理政策的能力。

  • 身份访问管理:为用户提供身份验证、单点登录 (SSO) 和按角色强制执行的授权等访问功能。

  • 智能指标:记录事件、审计和合规性,以及访问详情,如访问了什么内容、由谁访问、以及访问时间?

IDaaS 解决方案灵活地存储组织的身份目录,既可以存放在本地,也可以存放在云端。组织通常需要本地的 Active Directory 或 LDAP,以便更高效地控制和保护安全,这是非常重要的。这些解决方案支持故障转移和自动负载均衡,确保服务持续运行。基于云的 IDaaS 也非常流行,包括 Google 目录等。LDAP 或 Active Directory 会根据业务需求通过防火墙进行集成。管理身份需要在安全性和生产力之间找到平衡,最佳方案应满足相关标准。审计合规性是强制执行政策、跟踪云活动、检测异常的关键功能,通过控制访问权限来防止通过应用程序或环境未经授权的数据丢失。

IDaaS 至关重要,它必须具备强制执行细粒度策略的能力,提供安全访问并控制云应用程序,以防止数据丢失或盗窃。企业需要获取并部署被批准和未批准的云应用程序,以应对组织的关键需求。因此,数据访问的严格政策管理是不可或缺且强制执行的。

IDaaS 提供身份(信息)作为数字实体的管理。该身份可用于电子交易中。

一个独特的标识属性被分配用来唯一标识一个数字资产或一个对象作为数字实体。所有对象可能具有相同的属性,但它们的身份不能相同,因此必须识别与之相关联的一组属性,使其能够唯一识别。这些身份服务在网站、交易、交易参与者、客户等服务的验证中需求量很大。

我们已经看到了 IDaaS 的三个大致领域。以下展示了这些服务的更细分:

  • 联邦服务

  • 单点登录服务

  • 注册

  • 认证服务

  • 风险和事件监控

  • 身份与个人资料管理

  • 目录服务

接下来我们将探讨身份解决方案。

单点登录

SSO 是业界和企业最流行的技术,用于减轻需要为不同服务器使用多个用户名和密码组合凭证的问题。单点登录软件使用户只需凭证登录一次,便可访问所有系统。

SSO 环境中有一个单一的认证服务器,如下图所示,管理对多个系统的访问:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SSO 操作方式如下:

  • 使用用户名和密码凭证登录到认证服务器

  • 用户浏览器从认证服务器获取票据

  • 票据由用户浏览器发送到内网服务器

  • 票据由内网服务器发送到认证服务器

  • 用户安全凭证由认证系统发送到内网服务器

维护非常简便,只需通过认证服务器即可进行访问的增加或删除,这反映了用户对所有支持系统的访问:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

联邦身份管理(FIDM)

如其名称所示,安全凭证在不同的安全域之间进行联合,支持相关技术和协议。安全声明标记语言SAML)是封装用户安全凭证的主要方式,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

OpenID

OpenID 是一项服务,使用户可以使用一个账户登录多个网站。支持 OpenID 的公司包括 Google、Yahoo、Flickr、MySpace、WordPress 等。

相关的某些好处包括:

  • 增加网站转化率

  • 更广泛的用户累积资料访问

  • 降低用户维护问题,避免多重凭证

  • 内容集成到社交网络平台的便利性

云安全

安全性是提到云计算时的一个主要关注点。根据云的类型(公共云、私有云、社区云或混合云),有多种处理方式。安全管理从有效规划开始,需要分析不同模型(IaaS、PaaS、SaaS)下的多种属性,评估其对风险的敏感度。每种模型中,客户与云提供商在不同服务层次上的安全责任需要彻底理解。

在此背景下收集相关信息的一些指引如下:

  • 应用程序或资源如何在云上部署

  • 数据加密形式以供云端存储

  • 应使用代理和经纪服务

  • 限制对共享数据的直接访问的需求

  • 云提供商的系统和工具用于数据进出云端

每种云部署模型,根据服务模型和云类型,都会带来不同的风险。云服务提供商与消费者之间的责任根据提供的服务和商业需求来定义:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:云安全联盟(CSA)(https://cloudsecurityalliance.org/csaguide.pdf)

如前图所示,IaaS 是基础层级的服务提供模式,其次是 PaaS,最后是 SaaS。安全性特性和关注点从一层传递到另一层,依次由 IaaS(基础设施)到 PaaS,再到 SaaS。因此,在集成系统中,IaaS 拥有最低的集成功能和安全性,而 SaaS 拥有最高的服务水平。责任在供应商与客户之间共享如下:

  • 根据服务边界

  • 如商业条款中约定

  • 根据采用的云模型(公共云、私有云、混合云等)

无论选择哪种模型和服务,云数据安全至关重要。数据安全执行包括以下选项:

  • 访问控制

  • 审计

  • 身份验证

  • 授权

存储在云中的数据可以从任何地点访问;因此,需要实施适当的数据保护机制,将数据与客户端访问隔离。有效的云存储隔离方法之一是经纪云存储访问

在此方法中,创建两个服务:

  • 一个完全访问存储但无法访问客户端的经纪人

  • 一个没有存储访问权限的代理,但可以访问客户端和经纪人

当客户尝试访问经纪云存储系统中的数据时,它会遵循以下工作流程:

  1. 客户数据请求会触发代理的外部服务接口。

  2. 代理将请求转发给经纪人。

  3. 经纪人向云存储系统发出数据请求。

  4. 云存储系统将数据返回给经纪人。

  5. 经纪人将数据返回给代理。

  6. 代理将数据发送给客户端。

以下图示说明:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:云安全联盟(CSA)(cloudsecurityalliance.org/csaguide.pdf)

加密可以防止未经授权的访问。它防止数据在传输过程中(移动或传输时)以及静止时(存储在云中)被泄露。然而,加密不能避免如磁盘故障等数据丢失问题。

数据加密

云服务是常常存储敏感信息的集中式仓库,因此其安全性应当比单个用户的笔记本或移动设备更为严格。网络安全行业一直在创新并投资于技术和流程,以保护云服务器,比如防火墙、威胁检测与分析、以及加密机制。数据加密有不同的模式,如下所示。

传输中的加密

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用诸如安全套接字层SSL)或传输层安全性TLS)等技术,传输中的加密用于保护从手机或计算机到服务器的消息传输。这将确保消息在互联网中的传输安全,但解密后的消息对设备和服务器都可用。这使得服务器易受攻击,因为数据是以未加密的格式存在,且消息是以解密格式显示:

静态加密

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态加密意味着数据在不使用时被加密,例如存储在云服务器上的存储介质中。然而,由于服务器拥有解密后的信息,它仍然是脆弱的,并不是完全安全的。

端到端加密

这将通过确保数据安全而不仅仅是设备,提供完整的解决方案:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在端到端加密过程中,消息从发送方的设备开始加密,直到到达接收方设备并解密。因此,通过端到端加密,服务器无法访问解密后的数据,也不会泄露任何用户信息。在这种情况下,安全性体现在数据本身,而不仅仅是设备上。

通过多种功能实施额外的数据安全措施,例如以下内容:

  • 作为微控制器的安全处理器

  • 安全加密虚拟化

  • 安全内存加密

  • 固件和数据的安全离线存储

  • 用于安全密钥生成和密钥管理的加密功能

  • 硬件验证启动(TPM)

通过将 AES-128 引擎直接连接到内存管理单元(MMU)来实现 DRAM 级别的加密,以防止物理内存攻击。

操作系统或虚拟机监控器可以通过页表选择需要加密的页面。

然而,DMA 引擎加密页面被外部设备(如网络存储和显卡)访问。

每个虚拟机(VM)或容器都有自己的加密密钥,能够独立工作,防止交叉污染。密钥对虚拟机本身是透明的,由受保护的虚拟机监控器管理。

数据污染通过报告和机器检查恢复模式来处理。

备份与恢复

云计算备份与恢复的最佳实践如下:

  • 为了实现零数据丢失和便捷的灾难恢复,维护了四份数据副本。

  • 两份数据副本将保存在主数据中心,通过同步复制以确保高可用性。

  • 第三份数据副本将保存在另一个数据中心作为备份。

  • 第四份数据副本将通过异步复制保存在不同的数据中心和地震区的备份中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结

在下一章,我们将逐步学习大数据应用的核心架构原理,使用 Spark 平台构建系统。我们还将研究许多数据科学算法来解决商业挑战。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值