DevOps-实用指南-全-
DevOps 实用指南(全)
原文:
annas-archive.org/md5/6b2697194400cac9f70f257dcd39ad77
译者:飞龙
前言
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
)有助于可视化分布的关键统计数据,如中位数、四分位数、异常值等。 -
相关性:用于比较两个变量(X和Y)趋势移动的依赖性,以确定它们是否倾向于一起移动或相反方向移动,例如,绘制月份内失业率(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 Negotiator(YARN)是一种集群管理技术。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 MapReduce(EMR)是一项服务,允许用户在 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 Services(AWS)一起打包的 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 拥有最高的服务水平。责任在供应商与客户之间共享如下:
-
根据服务边界
-
如商业条款中约定
-
根据采用的云模型(公共云、私有云、混合云等)
无论选择哪种模型和服务,云数据安全至关重要。数据安全执行包括以下选项:
-
访问控制
-
审计
-
身份验证
-
授权
存储在云中的数据可以从任何地点访问;因此,需要实施适当的数据保护机制,将数据与客户端访问隔离。有效的云存储隔离方法之一是经纪云存储访问。
在此方法中,创建两个服务:
-
一个完全访问存储但无法访问客户端的经纪人
-
一个没有存储访问权限的代理,但可以访问客户端和经纪人
当客户尝试访问经纪云存储系统中的数据时,它会遵循以下工作流程:
-
客户数据请求会触发代理的外部服务接口。
-
代理将请求转发给经纪人。
-
经纪人向云存储系统发出数据请求。
-
云存储系统将数据返回给经纪人。
-
经纪人将数据返回给代理。
-
代理将数据发送给客户端。
以下图示说明:
来源:云安全联盟(CSA)(cloudsecurityalliance.org/csaguide.pdf
)
加密可以防止未经授权的访问。它防止数据在传输过程中(移动或传输时)以及静止时(存储在云中)被泄露。然而,加密不能避免如磁盘故障等数据丢失问题。
数据加密
云服务是常常存储敏感信息的集中式仓库,因此其安全性应当比单个用户的笔记本或移动设备更为严格。网络安全行业一直在创新并投资于技术和流程,以保护云服务器,比如防火墙、威胁检测与分析、以及加密机制。数据加密有不同的模式,如下所示。
传输中的加密
使用诸如安全套接字层(SSL)或传输层安全性(TLS)等技术,传输中的加密用于保护从手机或计算机到服务器的消息传输。这将确保消息在互联网中的传输安全,但解密后的消息对设备和服务器都可用。这使得服务器易受攻击,因为数据是以未加密的格式存在,且消息是以解密格式显示:
静态加密
静态加密意味着数据在不使用时被加密,例如存储在云服务器上的存储介质中。然而,由于服务器拥有解密后的信息,它仍然是脆弱的,并不是完全安全的。
端到端加密
这将通过确保数据安全而不仅仅是设备,提供完整的解决方案:
在端到端加密过程中,消息从发送方的设备开始加密,直到到达接收方设备并解密。因此,通过端到端加密,服务器无法访问解密后的数据,也不会泄露任何用户信息。在这种情况下,安全性体现在数据本身,而不仅仅是设备上。
通过多种功能实施额外的数据安全措施,例如以下内容:
-
作为微控制器的安全处理器
-
安全加密虚拟化
-
安全内存加密
-
固件和数据的安全离线存储
-
用于安全密钥生成和密钥管理的加密功能
-
硬件验证启动(TPM)
通过将 AES-128 引擎直接连接到内存管理单元(MMU)来实现 DRAM 级别的加密,以防止物理内存攻击。
操作系统或虚拟机监控器可以通过页表选择需要加密的页面。
然而,DMA 引擎加密页面被外部设备(如网络存储和显卡)访问。
每个虚拟机(VM)或容器都有自己的加密密钥,能够独立工作,防止交叉污染。密钥对虚拟机本身是透明的,由受保护的虚拟机监控器管理。
数据污染通过报告和机器检查恢复模式来处理。
备份与恢复
云计算备份与恢复的最佳实践如下:
-
为了实现零数据丢失和便捷的灾难恢复,维护了四份数据副本。
-
两份数据副本将保存在主数据中心,通过同步复制以确保高可用性。
-
第三份数据副本将保存在另一个数据中心作为备份。
-
第四份数据副本将通过异步复制保存在不同的数据中心和地震区的备份中。
总结
在下一章,我们将逐步学习大数据应用的核心架构原理,使用 Spark 平台构建系统。我们还将研究许多数据科学算法来解决商业挑战。
第六章:构建大数据应用程序
在本章中,我们将学习构建大数据应用程序,分析传统端到端数据工作流生命周期,并按类似的线路逐步构建大数据应用程序。我们将涵盖大数据流程--发现、摄入、可视化和治理。重点将放在 Spark 平台和数据科学预测模型上。随后章节将探讨 DevOps 应用于大数据各个阶段。
-
传统数据平台
-
大数据平台核心原则
-
大数据生命周期:
-
数据发现
-
数据质量
-
数据摄入
-
数据分析
-
Spark 平台
-
数据可视化
-
数据治理
-
-
构建企业应用程序
-
数据科学--预测模型
传统企业架构
传统上,企业数据仓库(EDW)系统被视为商业智能环境的核心组件。数据仓库系统是通过集成来自多个不同源系统的数据构建的中央存储库,用于满足企业的数据分析和报告需求。
让我们回顾传统系统端到端数据生命周期组件:
-
数据发现阶段是探索和分析源系统中相关数据和数据结构的阶段。如果分析的数据有效、正确且可用,则将其摄入数据仓库系统。例如,如果我们需要客户 ID 信息,则应连接并从正确的列和表中提取数据。
-
数据质量确保摄入的数据是可接受和可用的。一个简单的例子是名字格式的第一个名和姓氏惯例,应该遵守,并根据需要为一些记录进行纠正。
-
数据转换是根据业务逻辑应用数据操作规则的阶段。例如,每个员工的年薪从多个系统计算并保存在系统中。
-
提取、转换和加载(ETL)是所有前述阶段(数据发现、数据质量和数据转换)的集合参考常用术语。
-
数据暂存是您系统中从源系统收集数据的着陆区域。
-
数据血缘追溯数据摄入到系统中的来源和可信度,以确保只有真实、可信和授权的数据被引入系统。
-
元数据是关于数据的数据。例如,销售收据是记录的起源,包含交易详情,从中提取我们计算所需数据的位置。从销售收据中提取商店 ID、销售金额、商品 ID、交易日期等详细信息。
-
数据仓库是存储层,将转换后的数据加载为汇总副本。它具有时间变体、一致性和读取密集性。
-
数据集市是专门用于某一类别的数据服务仓库,如客户数据、产品数据、员工数据等。
-
数据分析是指为满足所有业务需求而进行的分析。其构建的查询解决业务需求,例如上个月新增了多少客户,或者本周哪些产品的销售超过了目标。
-
语义层——其业务接口使用商业智能工具在数据库上构建查询,隐藏复杂的数据表格,使业务用户无需接触。
-
报告——报告是供业务使用的,例如展示上个月在某州销售的所有产品。
-
仪表盘提供重要关键绩效指标的快速整合视图。一个类比是汽车仪表盘,显示速度、电池、电量剩余等信息。
-
数据可视化——仅仅根据 Excel 报告找到关键的业务表现趋势可能是一项艰巨的任务。将其以可视化形式呈现非常具有吸引力,例如将其表示为图表、直方图和饼图。
构建大数据企业应用的原则
大数据平台和应用程序管理、集成、分析和保护对多种数据类型的分析,不仅涵盖企业内部数据,还包括外部数据。它们实时集成多个数据源,考虑到数据的体积、速度和种类。该平台可以构建为企业知识库的存储库,存储组织的集体数据资产。
一些构建这些平台的显著特点已经讨论过,正如我们所见,DevOps 非常适合,并且是增强每个阶段价值的工具,比如用于构建算法、数据模型的版本控制系统,使用虚拟机构建可扩展的可复现平台,正如前一章所见:
-
灵活的数据建模:大数据系统集成了来自多个数据源的多种不同形式的数据。与其采用预定义的固定行列结构,数据架构应动态定义,并且数据建模需反映如何同化信息。为了反映现实世界中的实体,它也可以灵活地指定为具有关系的对象图。
-
知识管理:带有版本控制的知识库,包含组织积累的洞察力,可以作为企业资产加以利用。
-
隐私和安全控制:该平台设计用于数据血缘、多级安全和审计合规。平台中集成的每个对象都可以追溯到其原始数据源,并且设置了访问限制,包括授权和认证。
-
数据处理算法:这些是大量的数据集,需要使用内置的机器学习算法进行编译和分析,以增强人工用户通过识别数据模式理解大规模数据的能力。
-
可扩展平台:这些平台通过可扩展的架构与联合数据存储相结合,处理 PB 级别的数据,以存储大量非结构化数据,如文档、电子邮件、音频、视频、图像等。这些平台被设计为开放平台,可以在堆栈的每一层进行扩展。需要考虑高效的数据发现、数据血缘关系和弹性搜索工具的提供。
-
协作:该平台使多个用户能够在组织内外无缝、安全地协作,实时分析相同的数据,从低级数据集成、导入管道定制到构建自定义用户界面。已集成的数据可以通过 API 作为对象访问,或导出供其他框架和工具使用。
-
在模型上构建模型:简单的模型可以作为更复杂模型的构建模块,构建精细的分析并将其流线化为模块化过程。可以使用内置的丰富可重用统计和数学操作库来构建模型。
-
数据可视化:这是一个互动用户界面,提供一个无缝的整体视图,展示所有集成数据的丰富可视化形式,如表格、散点图和图表。这些可视化图表实时与源数据保持同步,使得用户始终能够在任何给定时刻查看最准确和最新的信息。
大数据系统生命周期
大数据系统是根据数据生命周期模型构建的,通常可以分为以下几个阶段:
-
数据发现
-
数据质量
-
将数据导入系统
-
将数据持久化存储
-
对数据进行分析
-
数据治理
-
可视化结果
我们将在接下来详细学习它们。
数据导入系统
数据发现,像传统过程一样,从多个源系统中摄取原始数据;然而,在将其转化为商业洞察时,数据的体积、种类和速度将会有所不同。通过利用大数据的力量,数据发现过程使得数据清洗和数据丰富成为可能,促进将数据集组合以重建新的视角和互动的可视化分析。一个互动的数据目录有助于引导搜索功能,帮助我们彻底分析和理解数据质量。成熟而强大的数据发现过程确保可能的数据关联,它让用户定义基于属性的规则、数据源之间的关系,协调数据源并基于数据集市创建丰富的数据。
为了拓展传统商业智能系统的边界,充分利用大数据的潜力是企业成功的关键。这有助于有效地解锁来自新信息源的洞察力。随着新型数字信息源的不断涌现,组织有潜力访问到丰富的知识,并能得当挖掘这些知识。
使用大数据工具和技术进行数据发现,有助于深入探索组织内外的数据,从而清晰地看到商业表现。企业可以探索新的维度,改变商业分析系统的构建和使用方式,使其更高效。通过结合各种数据源,数据发现允许快速、直观地探索和分析信息;它为业务提供了更深层次的洞察力,并带来了更高效率的机会。它建立了重新定义商业与 IT 之间角色的新关系,同时增设了新的角色、新的领导力,并对数据治理的方式进行了修订。
许多组织已经更新了商业智能决策系统,以基于现有数据和系统来提升商业表现,帮助理解和监控数据。如今,绝大多数数据增长来源于传统商业智能环境无法触及的系统,例如网站、社交媒体、内容管理系统、电子邮件、文档、传感器数据、外部数据库等。因此,需要采用新时代的数据发现工具,同时也要考虑到这些多样化和变化的数据正在呈指数级增长。在发现阶段需要处理的数据类型多种多样,从结构化的数据库表格,到包含数字和自由格式文本的半结构化形式,再到完全非结构化的文档。
数据量和种类的多样性,以及其不确定的价值,是最大的挑战之一。互联网文化的普及和消费者与企业商业软件的互动,特别是通过移动和网页应用程序,催生了迅速探索相关信息的迫切需求,以发现新的业务洞察力并做出决策。
数据化是将所有类型来源、所有类型格式的数据量化的过程。数据化使得信息能够被收集、整理和分析,从而使信息的潜在用途仅受技能熟练的商业用户的创造力限制。数据的真正价值就像浮在海洋中的冰山。最初,只有一小部分是可见的,而大部分则隐藏在水面下。那些理解这一点的创新公司能够提取隐藏的价值,获得潜在的巨大收益。
企业级数据发现系统能够快速、直观地探索和分析来自多种结构化和非结构化来源的数据。它们使组织能够利用现有投资,将商业分析能力扩展到新的、多样化的来源组合,包括社交媒体、网站、内容系统、电子邮件和数据库文本,为数据和业务流程提供新的可见性,节省时间和成本,并帮助做出更好的商业决策。此方法的一些优势包括:
-
通过为用户提供更深入的见解和可见性,帮助他们找到自己想要分析的数据,从而深入了解业务。
-
通过访问更新的信息,可以实现近实时的数据和内容传递,帮助人们根据最当前的信息做出决策。
-
增加资产的重用。你可以重用信息资产,并消除重新创建这些资产的成本。
-
为 BI 专业人员提供开发和交付适合商业专业人员使用的分析型消费级应用的便利,进而提高采用率、降低培训成本并加快价值实现的速度。
数据发现阶段
数据发现过程涉及原型设计、可视化、桥接、复制和转化等阶段。将这些概念在数据发现的背景下并行应用,可以从大数据中获得价值:
- 原型设计:通常,在任何商业环境中,项目总是面临压力,并受限于时间和预算等资源。在复杂项目中,原型设计是当面临紧迫、苛刻、看似困难且时间有限的挑战时,推动进展的有效方式。原型设计是在没有找到答案之前采取行动,在没有经过验证的公式或已知解决问题的方法的情况下冒险。原型设计让我们能够测试假设并探索替代方法,通过构建小模块来获取整体视图。DevOps 加快了原型设计过程,使其成为一个持续的开发循环。
数据发现让人们能够在数据中自由探索,尝试新的数据源组合、筛选和精炼分析,发现先前隐藏的模式,或者如果第一次尝试没有得到有价值的见解,可以跳转到另一个实验线程。一个关键的挑战是如何实时同步源系统的数据模式变更与暂存和开发系统;可以采用 DevOps 方法和流程来解决这一问题。
通过数据发现的实验包括三个主要任务——提出新问题、观察新模式和添加新数据。这些步骤构成了一个连续的过程,是迭代的,并且会根据用户在任何给定时刻所看到或假设的内容流动到任何方向。与数据发现阶段集成的 DevOps,使得这一过程从源系统识别到数据摄取,再到暂存系统的过程自动化。
-
可视化:数据可视化帮助数据分析师快速反馈他们的假设,因为图形化更便于在定量信息中发现模式。实时查看经验性业务分析的结果,使数据分析师能够确定哪些细化或进一步的搜索可能导致对绩效差距或市场机会的更深理解。通过快速可视化分析结果来增强有效的数据发现,帮助经验丰富的数据分析师以及非技术性的业务用户。数据可视化技术,如拖放式仪表板、快速生成的图表、易用的向导以及类似消费者风格的导航,加速了对数据模式及其行为特征的理解。
-
桥接:通过数据发现过程,业务与 IT 之间可以建立更加高效的合作关系。在传统环境中,业务和 IT 分别扮演提供者和用户的角色,进行数据发现阶段的独立活动。这使得他们可以作为一个团队合作,汇聚力量共同探索和学习。IT 分析师帮助业务合作伙伴,向他们展示如何添加数据源、完善搜索,并探索新的问题,逐步了解软件的功能。他们还可以直接与业务方合作,如何实时构建发现应用程序,并如何在分析可能性时变得自给自足。传统的提取需求、编写复杂规范,以及经过漫长的开发和部署过程,通常在时间和精力上都非常繁琐。IT 通过绕过大部分 SDLC 流程并赋能业务用户自助服务数据,从而大大提高了效率。
-
系统化:随着数据探索与深度洞察技能的不断提升,在某些情况下,某一条调查路径可能会重复几次。这也可能带来超越单次情景的宝贵见解,更有效地抓住业务问题的一部分,并不断重复和追踪结果。一旦通过用于描述关键业务流程的度量标准和维度将业务查询和响应建立起来,就可以考虑将分析和度量整合到组织的企业 BI 系统中。商业智能平台通过让用户对标准数据集执行标准化查询来回答已知问题,从而表现出色。
数据发现与商业智能系统互为补充,数据发现擅长解决未知问题,而 BI 则专注于系统化分析,如下图所示:
DevOps 将标准化数据模型、仪表板和可视化报告的维护过程,并将其自动化测试和部署,从开发系统到 QA 和生产环境,形成持续集成和部署模型。
- 转型:数据发现过程能够帮助探索无限多的新途径,解决业务问题并发现之前隐藏在数据中的新机会。通过实验过程揭示这些新维度,能够发现有价值的新洞察,为转型铺平道路。然而,对于标准已知领域,企业仍将继续使用现有的 BI 系统,并利用数据发现探索为新问题和问题提供洞察的方法。因此,数据发现通过易于探索多样数据的方式,展现了其价值,帮助揭示推动收入和生产力显著增长的洞察,同时改善了业务与 IT 的对齐和关系。它推动了商业分析世界的转型。
大数据发现领域有多种工具,如 Apache PIG、Oracle Big Data Discovery、Zoomdata、Exasol、Revolution、GridGain 等。
传统的商业智能(BI)工具,如 Tableau、QlikView、Microstrategy、Informatica 等,也在为大数据提供广泛的数据发现功能。
数据质量
其中一个最大的挑战是确保数据质量和准确性,这说起来容易做起来难。DevOps 将增强数据质量过程,确保从脚本到整个验证过程的自动化循环。我们来看看一些挑战:
-
数据多样性:来自移动设备、Web 技术、传感器数据、社交媒体等各种数据源的数据,带来了多种复杂的数据类型和数据结构,增加了数据集成的难度。这些数据源生成了例如文档、视频、音频等形式的非结构化数据,以及软件包、模块、电子表格、财务报告等形式的半结构化数据和结构化数据。所获得的有价值洞察依赖于收集、存储和验证的数据。由于这些数据来自如此多的不同来源,且依赖于集成过程的有效性,因此至关重要。在处理生命科学等数据密集型且敏感的行业时,这一过程必须是万无一失的。
-
数据复杂性:数据变得复杂,涉及多个属性,例如来自不同来源的原始数据,这些来源包括消费者、销售人员、运营部门以及组织内的其他来源。数据的时效性至关重要;你需要实时收集所需数据,或实时处理数据需求,否则数据可能会变得陈旧、过时和无效。基于这些数据的处理分析将产生无用或误导性的信息和结论,从而误导决策系统。
-
确保数据安全:有许多技术有助于通过移动、网络和 ERP 等应用程序跨多个渠道进行通信,这增加了维持数据安全的复杂性。云、大数据和移动等新兴技术正迅速扩展其应用范围并变得越来越流行。然而,数据安全的需求和挑战比以往更加复杂。
确保数据质量的一般指南如下:
-
数据可用性:大数据系统所需的数据应根据预期用途适当提供。数据应是及时的,可以通过实时流式传输或批处理模式获取。数据应通过可用的 API 接口进行访问,并且数据应被授权用于使用。
-
数据适当性:数据应具有可信度,否则目标将无法实现。数据溯源过程追溯数据的来源。数据定义应适当,并且在数据的新鲜度和定期更新方面应是可以接受的。数据文档和元数据应在可接受的值范围内经过审计以确保其正确性。
-
数据准确性:数据应可靠;数据值应真实反映源信息的状态,数据不应含糊不清,应是事实的单一版本。数据应在预定时间内保持一致并可验证。数据应完整并且可审计。
-
数据完整性:数据格式应清晰,并符合一致性的结构和内容标准。数据的完整性应保持完好。数据应相关并符合所需的用途,且在各方面完整,适合用于其预定目的。
-
呈现质量:数据的内容和格式应清晰易懂。数据描述、分类和编码内容应易于理解,并符合既定目标和规范。
有许多开源大数据工具提供多种数据质量特性,例如 Talend、AB Initio、Data Manager、Datamartist 和 iManage Data。
在数据摄取过程中,原始数据来自多个数据源并被加入系统。根据源系统的数据格式和质量,以及目标数据处理状态的需求,这一过程可能会非常复杂。数据摄取到大数据系统的方式多种多样,具体取决于摄取的数据类型。为了准备原始数据供系统使用,通常在摄取过程中需要进行某些程度的分析、排序和标记。从传统的遗留数据仓库过程扩展出来的,包含提取、转换和加载(ETL 过程)。一些相同的概念也适用于进入大数据系统的数据。
数据摄取过程涉及对输入数据进行格式化、分类和标记的处理。数据结构应遵循预定义标准,通过剔除不需要的数据来确保符合要求。因此,从多个源系统捕获的大量数据将用于进一步处理。它以原始格式存储在数据湖中。
批处理
批处理作业,顾名思义,是那些数据集作业,这些作业对时间不敏感,并且在大型数据集中以批量方式处理。批处理作业的处理可以以多种模式进行,下面将描述这些模式。
从 RDBMS 到 NoSQL
存储在关系型数据库(RDBMS)中的大部分遗留数据可以使用 Sqoop 导入到 HDFS 上的 NoSQL 数据库中,DevOps 可以为 Sqoop 脚本的基准提供支持,自动化数据导入和导出的过程,存储和计算系统的可扩展性,数据完整性的测试自动化,以及自动部署。数据迁移过程如下所述:
-
Sqoop 是一个命令行界面应用程序,用于在关系型数据库和 Hadoop 之间传输数据。它支持增量加载单个表或自由格式的 SQL 查询,以及可以多次运行的保存作业,以导入自上次导入以来对数据库所做的更新。导入还可以用于填充 Hive 或 HBase 中的表。
-
Oozie 可以用于调度和创建数据导入/导出的流程。
-
在 Sqoop/Oozie 中可以配置全量和增量导入。
-
我们可以直接导入并创建 Hive 表,但如果构建分层架构,建议将数据导入到暂存区。
-
例如--
sqoop import -connect jdbc:mysql://:/ -username -password --table --target-dir
。
Flume
对于其他批处理数据源,我们可以部署 Flume。它会监控新的源文件并将数据推送到 HDFS。
-
Flume 在将大量日志数据传输到分布式系统、收集并根据业务需求汇总数据方面非常有效和可靠。
-
架构简单且灵活,能够满足传入流数据流的需求。
-
Flume 具有强大的容错性和可定制性,拥有高级功能,如故障转移和恢复机制等。
-
一个简单且可扩展的数据模型支持在线分析应用程序
流处理
流处理,顾名思义,是对实时数据的计算,这些数据通常具有时效性,且通常带有高速度的度量。分析通常在流数据被摄取时进行,以便进行质量检查等。
实时
如果数据以流的形式存在,例如应用日志、程序输出(如网页抓取器)、传感器、地理位置或社交媒体,这些可以通过 Kafka 实时收集。
-
Kafka 是一个开源消息代理项目,旨在提供一个统一的、高吞吐量、低延迟的平台,用于处理实时数据流。它本质上是一个大规模可扩展的发布/订阅消息队列,构建为分布式事务日志,使其在企业基础设施中处理流数据时具有极高的价值。
-
Kafka 可以轻松扩展,以支持更多的数据源和不断增长的数据量。
-
Kafka 还支持与 Spark 的直接连接。
-
每个输入数据源对应一个主题,每个消费者组对应一个主题。
-
每个主题的分区数量将取决于数据的大小。
除了 Sqoop 和 Kafka,还有一些其他专门的数据摄取工具,用于导入和聚合服务器及应用日志,这些工具包括 Apache Flume 和 Apache Chukwa。Gobblin也提供了一个数据摄取框架,用于聚合和规范化数据。
Lambda 架构
当批处理和流数据同时导入系统时,Lambda 架构非常有效,如下图所示:
数据存储层
持久化大数据有多种存储选项,例如数据湖和数据仓库;云技术对数据存储的支持大大增强了大数据存储系统的需求,这些系统能够通过简单的存储设备和虚拟机扩展至 TB 和 PB 级别。本书详细讨论了 DevOps 作为管理可扩展数据存储的有效解决方案,使用基础设施即代码。
-
数据湖:数据湖与水湖同义,水湖储存水并供许多人使用。数据湖是原始数据的存储库。收集到的数据可能是非结构化的,并且经常变化,因此,最初这些数据会被集中存储在大存储库中,以便用户根据其预定需求进行使用。
-
数据仓库:数据仓库是一个有序的数据存储库,用于存储大量数据以供分析和报告使用。数据仓库中的数据通常是经过清洗的、组织良好的,并且与其他数据源进行了集成。它在传统系统中通常更为显著。
摄取过程确保进入的数据根据业务需求被处理,并可靠地持久化到存储磁盘。摄取过程可能很复杂,取决于来自源系统的数据的量和多样性。分布式存储系统的可用性通过 Apache Hadoop 的 HDFS 文件系统实现。通过 HDFS,大量原始数据可以同时写入多个节点,并具备冗余性。
Ceph 和 GlusterFS 是提供所有这些功能的其他文件系统。
分布式数据库,如 NoSQL,适合导入数据以便进行更结构化的访问。它们具备容错功能,并能够摄取异构数据格式。根据组织的业务需求,可以从多种可用选择中选择适当的数据库。
数据存储 - 为了更好的组织和效率的最佳实践
着陆
着陆区是初始数据从不同源系统以原始状态进入存储系统的地方。
-
着陆区是存储进入数据的地方
-
所有的输入验证应该在此进行
-
文件夹结构可以是
<source>/<type of data>/<yyyymmddhhisss>
-
应该同时应用归档机制(按天/周/月)
-
访问应仅限于处理用户,而非最终用户
原始
一旦数据进入着陆区,就会进行适当性、格式和质量的完整性检查;在符合要求的情况下,它会以原始数据的形式存储。
-
这是存储原始数据的地方,数据保持其原始格式
-
来自着陆层的经过验证的输入数据存储在这里
-
目录结构由摄取框架管理
-
只有选定的超级用户和系统用户能够访问这些数据
-
应应用 Snappy/LZO 压缩
-
应该应用数据分类器(热数据、冷数据),并设置归档策略
-
文件夹结构可以是
<base dir>/<system type>/<dataset Source Name>/<Source Type>
工作
工作区存储已识别的清洁数据,用于业务目的
-
这是临时工作区,清理应该在相关任务完成后进行,除非任务需要数据用于调试
-
Spark 流式处理的检查点位置也会位于这里
黄金
黄金数据是经过转换、分区,并分类为主数据的有价值数据。
-
这是存储转换后数据的位置
-
在这一层,分区是非常重要的,应该根据最常访问的列来进行分区
-
应对非常热、热、冷和非常冷的数据进行分类
-
非常冷的数据应该归档到 Blob 存储(或任何其他便宜的存储)
-
文件夹结构可以是
<base dir>/<system type>/<dataset Source Name>/<Source Type>/<Job ID>
隔离
这是保存不需要的、过时的数据的地方,这些数据当前没有活跃的即时用途。
-
来自不同步骤的所有被拒绝的文件将存储在这里,如摄取、转换以及验证异常记录
-
应对非常热、热、冷和非常冷的数据进行分类
- 非常冷的数据应该归档到 blob 存储(或任何其他廉价存储)
业务
业务数据是客户特定详情的主数据,如地址、产品偏好等。
-
这一层将包含应用程序/客户端特定的数据
-
所有数据必须以 parquet 格式存储,因为此阶段的所有数据将是结构化的
输出
输出数据是将要与外部实体共享的数据,例如供应商、卖方或第三方 API。
-
这是可以与外部应用程序共享数据的位置
-
文件在复制后需要被归档
-
客户端可以拥有临时或永久访问权限
一个良好的易用备份和灾难恢复解决方案提供了 Hadoop 集群之间的集成数据同步。它通过复制存储在 HDFS 平台中的数据并跨数据中心进行同步,从而实现数据保护。
计算和分析数据
从前面的过程生成的数据可以被分析,以发掘实际的信息价值。计算层执行各种功能,其中数据通常通过组合工具进行迭代处理。为了满足不同的业务需求,提取的各种洞察力通过量身定制的做法得以实现,而这些做法因组织而异。
批处理是对大数据集进行计算的一种方法,其中数据以批处理模式进行摄取,可以是每日或每小时。Apache Hadoop 的 MapReduce 是最突出和强大的批处理引擎,它被称为分布式 MapReduce 算法;它采用以下策略,在处理需要大量计算的非常大数据集时最为有效:
-
拆分:在这个过程中,工作被划分为更小的部分
-
映射:这是将每个数据块调度到单独机器上的过程
-
洗牌:基于中间结果重新洗牌数据
-
减少:处理每组输出数据
-
组装:最终结果被组合在一起
MapReduce 框架形成了计算节点,而 HDFS 文件系统则形成了数据节点。通常,在 Hadoop 生态系统架构中,数据节点和计算节点执行相似的角色。MapReduce 组件的委托任务由两个守护进程执行,Job Tracker 和 Task Tracker,它们的活动如下图所示:
接下来讨论的是批处理、实时处理和流处理中的数据处理。DevOps 是大数据系统中不可或缺的一部分,涉及从源系统发现到基础设施的可扩展性,以支持存储需求的高容量数据处理。
-
批处理:在处理大量数据时非常高效。数据被导入系统、处理,然后以批次形式生成结果。系统的计算能力是根据处理的数据大小设计的。系统配置为无需人工干预即可自动运行。该系统可以快速扩展,以适应大量数据文件的计算分析。根据处理的数据量和定义的系统计算能力,输出时间线可能会有显著变化。
-
实时/流处理:虽然批处理适用于某些类型的数据和计算,但其他工作负载则需要更低延迟的响应。有一些实时系统需要在处理信息时做出实时响应,并在持续吸收新信息的同时,使分析或可视化结果迅速呈现给业务方。这些系统称为流处理系统,它们基于连续的数据流进行工作,这些数据流由独立的数据项组成。实时处理系统或流处理系统,利用内存引擎的实时处理能力;计算分析是在集群的内存中执行的,从而避免像传统的基于磁盘的持久系统那样必须写回磁盘。实时处理最适用于分析较小的数据块,这些数据正在快速变化或被添加到系统中。
有许多平台和工具可以实现实时处理,如 Apache Storm、Apache Flink 和 Apache Spark。每个平台都设计为实现实时或接近实时处理的不同方式。除了这些列出的计算框架外,还有许多其他手段可以在大数据生态系统中分析数据或执行计算。这些工具常常与前述框架集成,并提供额外的接口与底层层次进行交互。我们在前一章已经讨论了它们在不同场景中的适用性以及每个问题的最佳应用,但我们将在此再次回顾一些工具:
-
Apache Hive 提供了 Hadoop 的数据仓库接口
-
Apache Pig 提供了一个高级查询接口
-
Apache Drill、Apache Impala、Apache Spark SQL、Presto 等,提供类似 SQL 的数据交互
-
R 和 Python 是常见的简单分析编程语言选择
-
Apache SystemML、Apache Mahout 和 Apache Spark 的 MLlib 提供机器学习库的预测模型构建功能
Apache Spark 分析平台
Apache Spark 是一个下一代内存中开源平台,集成了批处理、流处理和交互式分析。Spark 提供了易于使用的功能,能够快速编写应用程序,并具有内置的操作符和 API,此外还提供更快的性能和实现。
Spark 提供了一个更快、更通用的数据处理平台,内存中运行的程序比 Hadoop 快最多 100 倍,磁盘上运行的程序比 Hadoop 快最多 10 倍,具备极速的集群计算能力。Spark 框架建立在 Hadoop 集群之上,用于处理来自结构化系统(如 Hive)的数据,并从 Flume 和 Kafka 流式传输数据。它具有许多先进功能,并支持多种编程语言,包括 Java、Python 和 Scala。它拥有广泛的分析功能、开箱即用的算法、机器学习、交互式查询和复杂功能分析。
Spark 的流行度源于其许多优点,包括:
-
Spark 是 Hadoop 生态系统的一个子集。它与生态系统中的可靠且安全的存储平台 HDFS 良好集成,且与其他数据源兼容,如 Amazon S3、Hive、HBase 和 Cassandra。它可以在 Hadoop YARN 或 Apache Mesos 管理的集群上运行,也可以作为独立模式运行。
-
Spark 是一项用于大规模数据处理的快速技术。该框架提供基于 Java、Scala 和 Python 的高级 API,并为流处理和机器学习提供丰富的数据存储。虽然主要 API 是为 Scala、Java 和 Python 设计的,但也支持 R 等语言。
-
Spark 确保数据的并行处理,并与 Hadoop/HDFS 进行良好的集成以进行数据存储,同时支持多种文件系统和数据库。
-
Spark 的机器学习能力被证明是流处理的优秀解决方案。通过 Spark REPL,编写代码更容易、更快捷,内置了高级(80 个)操作符。Spark 的读取评估打印循环(REPL)是交互式的(开箱即用)Shell,是 Scala 交互式 REPL 的修改版。使用 REPL 时,无需编译和执行代码。用户的表达式会被评估,并且 REPL 将显示该表达式的结果。读取将表达式作为输入,解析并以内部数据结构存储在内存中。评估遍历数据结构,评估调用的函数。打印显示结果,并具有打印功能。循环迭代返回读取状态,在退出时终止循环。REPL 加快了周转时间,并支持临时数据查询分析。
-
Spark 更加灵活,特别适合大数据分析。其基于自身流处理 API 的持续微批处理和集成的先进分析功能对开发者友好。
-
与 MapReduce 相比,Spark 的效率更高。对于相同的处理过程,它比 MapReduce 快 100 倍。
-
Hadoop 的流行批处理作业引擎 MapReduce,由于其批处理模式响应的高延迟,面临着巨大的挑战,且由于其架构设计和代码的固有低效性,维护起来非常困难。Spark 的主要组件是 Spark Core Engine,它还配有一套强大的、更高级的库,这些库可以无缝地在同一应用程序中使用:
-
Spark SQL 是一个强大的查询语言,内置 DataFrames。
-
Spark Streaming 引擎用于数据流处理
-
Spark MLlib 用于机器学习以及机器学习管道模型
-
GraphX 与 GraphFrames 将实体之间的关系存储为图形表示。
-
Spark 核心引擎
Spark 核心引擎是 Spark 进行大规模并行和分布式数据处理的基础引擎。它执行以下功能:
-
容错和基于恢复的内存管理
-
集群作业调度、分发和监控
-
存储设备系统接口
Spark 是基于不可变的、容错的、分布式的对象集合构建的,称为弹性分布式数据集(RDD),可以并行操作。对象通过加载外部数据集或从内部驱动程序分发来创建。通过 RDD 执行的操作是转换。
转换操作包括 map、filter、join 和 union,执行在 RDD 上并产生新的结果。
动作操作包括 reduce、count、first,它们在对 RDD 进行计算后返回一个值。
Spark 引擎设计高效。转换操作实际上是在调用动作时计算,并将结果返回给驱动程序。转换是惰性操作,不会立即计算结果;然而,它们会记住要执行的任务和数据集(例如文件),以执行操作。转换后的 RDD 可以为下一个转换重新计算。其优点是避免了不必要的变更和计算。所有这些都通过内存引擎实现,数据会在 RDD 对象上持久化并缓存。Spark 会将元素保存在集群缓存内存中,以便下次查询时能够更快地访问。
Spark SQL
Spark 组件 Spark SQL 支持通过 SQL 或 Hive 查询语言查询数据。Spark SQL 与 Spark 堆栈集成,提供对各种数据源的支持。它允许你将 SQL 查询与代码转换结合,使其成为一个非常强大的工具。
Spark Streaming
Spark Streaming 是一个强大的基于内存技术的功能。Spark Streaming API 与 Spark 核心引擎兼容。它支持批处理和流式数据处理,能够实时处理来自 Web 服务器日志文件、基于 Twitter 的社交媒体数据等系统的数据。Spark 还与其他工具(如 Kafka)接口,用于各种消息队列。
Spark Streaming 从上游系统接收输入数据,如 Apache Flume、Kafka 等,并将数据划分为批次,通过 Spark 引擎处理这些批次数据,并生成最终的结果流批次,将其存储在 HDFS/S3 等位置。
MLlib 是一组库函数,提供各种机器学习算法,如分类、回归、聚类和协同过滤。Apache Mahout(一个用于 Hadoop 的机器学习库)已经集成到 Spark MLlib 中。一些算法,如线性回归或 K-means 聚类,也支持流数据,并设计为在集群上扩展。
GraphX 提供了 ETL 功能、探索性分析和迭代图计算。它提供了一个用于操作图形和执行图并行操作的库,支持常见图算法,如PageRank。
Spark 非常适合简化复杂且计算密集型的任务,用于高容量实时数据处理,无论是流数据还是归档数据,结构化和非结构化数据都能轻松处理,同时无缝集成相关复杂功能,如机器学习和图算法。
一些挑战包括操作复杂性和开发管理应用所需的高技能水平。Spark 与 Hadoop 配合良好,能充分利用 Hadoop 的 HDFS。两个系统的性能调优至关重要,否则,Spark 的细微差别可能会导致内存溢出错误和内存滞后问题,特别是在作业未经过良好调优时。
大数据系统中的可视化
我们都熟知“垃圾进,垃圾出”这句话。识别和了解数据随着时间的变化、趋势、波动和变化通常比单纯的数据分析更为重要,而数据可视化则是不可避免的步骤。由于大数据系统处理的信息复杂性,数据可视化成为发现趋势并从大量数据点中提取有意义洞察的最重要和最有用的方法之一。
我们将在这里讨论一些实时处理工具:
-
Prometheus:用于实时处理应用和服务器指标,数据流作为时序数据库,进行可视化。系统的健康状况通过频繁的数据变化来衡量,指标的大幅波动通常表示重要的关键绩效指标(KPI)。
-
Elastic Stack:它在大数据系统可视化中非常流行,用于以视觉方式展示计算结果或原始指标。它也被称为 ELK Stack,由 Logstash(用于数据收集)、Elasticsearch(用于数据索引)和 Kibana(用于可视化)组成。
-
SILK:它是一个类似的堆栈,通过使用 Apache Solr 进行索引和一个名为 Banana 的 Kibana 分支来实现可视化。
-
Jupyter Notebook 和 Apache Zeppelin 提供了交互式数据探索和可视化的界面,数据呈现格式便于共享、展示或协作。这项技术通常用于交互式数据科学工作,并被称为数据 笔记本。
数据治理
数据治理是对企业数据进行分类,并为适当的角色和人员提供正确的访问权限和特权的过程。它指的是管理组织中数据资产的可用性、可用性、完整性和安全性的整体过程。成熟的数据治理模型是一套明确定义的策略,包含一个治理小组以及一个协调有序的计划来执行这些程序。
采用开源软件开发方法来进行平台/产品开发将带来许多优势,例如:
-
在组织内部跨不同技术团队的无缝协作
-
在组织内 leverage 和重用现有的软件和知识资产
-
它确保解决地区、客户和国家特定需求
这种软件开发方法有助于建立治理机制,以确保避免重复工作并按照统一的标准框架实现透明化。
数据治理应定义必要的最小规则,而不是成为负担。它还应在以下方面进行平衡:
-
规则与公众(人人可用)
-
人员与流程
-
授权与指引
开源治理基于三个支柱:
-
透明度
-
设置治理参数
-
更快地交付每个团队和每个成员的成果
实践透明度、鼓励积极参与并认可所有成员贡献的开源社区,更有可能繁荣、迭代并增强前景。开源社区开发模型中的治理原则可以通过描述以下图示中的七个支柱来更好地展示:
根据 DevOps 核心概念的人员与协作
技术由人驱动,因此技术的成功依赖于几个属性——它应该易于被人们采纳,应该具有灵活性,易于学习,并且便于协作。我们将在这里讨论这些:
-
确立过程示例代码、提交和审查过程的所有权
-
一个通用的仪表盘,用于查看任何组件的状态、已做更改、审查状态、测试、受影响的组件等
-
采用论坛讨论而非电子邮件、Yammer 小组等,来解决问题和解答疑问
-
定期(每周、每两周)全员部署会议,讨论组件变化和路线图
环境管理
信息技术中环境管理是一个复杂且至关重要的职能。
-
维护开发的并行环境,例如当前程序和其他生产修复
-
定义组件与数据库交互的访问限制
-
定义每个组件/程序的资源分配(磁盘空间、线程/映射器等)
文档
对正在进行的工作进行文档记录,对于项目的生命周期、功能升级以及作为操作手册的支持和维护都非常重要
-
核心组件、业务/装配线使用、治理等的全面文档。这对于跨团队合作、新成员的加入等非常重要
-
用于帮助每个团队成员的文档可以定期修订,添加更细化的细节:
-
主架构参考文档——按照 TOGAF 建议的格式创建,以便使用统一的语言交流
-
开发者指南
-
治理指南
-
部署指南
-
架构委员会
架构委员会负责企业的长期规划,并确保架构符合业务目标,例如面向服务的架构、使用符合安全指南的组件、开放源代码工具使用比例作为路线图等。
-
架构评审委员会 (ARB) 是定义和参与门控(或里程碑)规划的权威机构
-
定义每个程序高层设计的门控里程碑
-
预算每个程序的重构工作量,并在门控会议中批准
-
集中化设计审批决策
-
用于门控和评审的审查清单
开发和构建最佳实践
开发最佳实践包括采用编码标准、适当的文档、同行评审、代码质量等,以确保代码和性能的高质量。构建是一个复杂的任务,涉及许多接口。遵循适当的指南将使其根据组织需求更为健壮和高效。
-
自动化构建与自动化测试流程
-
基于示例的源代码同行评审
-
通用 IDE、代码审查工具(PMD、check style 等)、构建工具(Hudson 和 Maven)
-
标准化的构建推广程序和时间表
-
每周通过持续集成和测试发布环境稳定性
-
定义测试环境和回归套件以执行受影响的模块
版本控制
版本控制将确保代码变更得到良好的跟踪,便于可追溯性和问责
所有组织团队使用企业标准工具进行版本控制是理想状态。版本控制治理具有以下特点:
-
每次检查提交时,自动向受控的主管邮件列表发送电子邮件
-
定义每个程序组件的贡献者,并限制对组件的访问
-
定期审计检查提交,并获得组件所有者的批准
发布管理
一个成熟的发布管理过程是组织向客户及时交付高质量可靠产品的重要资产
-
集中化发布管理
-
跨程序和功能定义的共同优先级
-
使用微服务/增量部署——支持独立部署的架构
使用 Spark 构建企业应用程序
对于企业应用程序的成功来说,仔细定义数据访问、处理和治理框架是非常重要的。
客户端服务展示层
这个图形用户界面将由一组 API 支持,帮助新用户入驻。支持的功能如下:
-
管理客户端数据源、文件格式、交付频率、验证规则、联接条件(如果有多个数据集)等
-
验证和转换数据集
-
管理数据集访问权限
-
Eureka 的附加数据传输要求
数据目录服务
这个图形用户界面将由一组 API 支持,提供与数据相关的服务。支持的功能如下:
-
类似于 Google 搜索的方式,在数据湖中搜索任何数据集/数据
-
浏览(带分页的预览)搜索结果
-
显示所选数据集的血统和数据概况
工作流目录
这个图形用户界面将允许你为应用程序定义工作流并安排执行。主要功能包括:
-
为应用程序创建工作流并安排执行
-
显示工作流的执行状态、所用时间,以及涉及的的数据集和血统
-
在失败或从任何给定点恢复时,能够重新启动处理过程
-
配置状态更新、通知和警报
使用和跟踪
这个图形用户界面将用于 Sentry 和 Navigator,跟踪整个集群中数据集的使用情况。其主要功能包括
-
数据集的有效使用跟踪:数据集被访问了多少次,以及由谁访问
-
无效使用跟踪:谁尝试访问他们没有权限的数据集
-
处理跟踪,了解哪些用户在运行什么处理过程以及消耗了哪些资源
-
需要根据运营团队的要求定义仪表板
安全目录
这个图形用户界面将由 REST API 支持,用于配置用户组的访问控制。包括的功能如下:
-
管理用户和用户组
-
管理用户对集群中各种数据集和能够在数据湖中运行的应用程序的访问
处理框架
这里是所有数据转换和处理的发生地。处理可以是批量的,也可以是实时的,支持各种框架,如 Spark 和 MapReduce,以及查询引擎,如 Hive 和 Impala。
数据摄取服务
数据可以通过多种来源进行摄取,从批处理到实时流,使用如 Sqoop、Flume、Kafka 和 SFTP 等工具。
-
数据摄取将由元数据驱动
-
为了摄取新的数据源,只要使用支持的摄取方法(如 Kafka、Flume、Sqoop 等),就不需要新代码
-
我们应该能够注册数据集,并在数据摄取后立即将它们开始进行目录化
获取的数据可以以多种形式使用:存储、持久化到设备、发布到外部供应商。它可以通过 API 被其他第三方程序访问。
-
存储层:为了保持数据完整性和隔离性,我们可以将数据分布在多个 HDFS 层中,以便每个层定义从获取原始数据到生成洞察之间的某个阶段。
-
发布:该服务将用于将数据发布到外部用户和订阅者,以及应用程序,作为数据湖的外部推送。
-
批量 API:该服务将用于通过异步 API 从系统中下载数据。用户将发出数据检索请求,并在数据集准备好时收到通知。数据的交付可以通过多种方式提供:
-
下载链接。
-
推送到 SFTP 位置。
-
内部用户的 HDFS 位置(同一集群或另一个集群)。
-
需要定义 API 合同。
-
-
数据访问 API:该 API 类似于批量 API,但仅支持频繁同步的小型数据集,例如信用评分。
-
笔记本:这些可以包括诸如 Apache Zeppelin 或 Hue 数据科学工作台等界面,为用户提供图形界面,以便访问集群中的数据集并使用 Impala、Spark、R 等进行查询。
数据科学
数据科学作为一个领域有许多维度和应用。正如我们都熟悉通过制定可重用和已建立的公式来理解科学,我们理解特征、行为模式和有意义的洞察。同样,通过工程和统计方法从相关数据中,我们也能理解行为模式和有意义的洞察。因此,它也被视为数据加科学,数据科学的科学。
数据科学在各行各业已经使用了几十年。许多算法已经开发并在各行业中使用,包括:
-
K 均值聚类
-
关联规则挖掘
-
线性回归
-
逻辑回归
-
天真贝叶斯分类器
-
决策树
-
时间序列分析
-
文本分析
-
大数据处理
-
可视化工作流
-
Apriori
-
神经网络
前述算法的组合用于解决流行的商业问题,例如以下问题,并且新的商业机会不断涌现:
交叉销售 | 查找客户特征之间的关系将营销活动与潜在客户匹配 |
---|---|
产品产量分析 | 分类产品缺陷 |
直接营销 | 分类客户将营销活动与潜在客户匹配 |
流失分析 | 预测流失趋势争取挽回客户 |
交叉销售 | 查找交易中产品的关系 |
分割分析 | 分类客户将营销活动与潜在客户匹配 |
库存分析 | 查找交易中产品的关系做出补货决策 |
产品组合分析 | 分类客户将营销活动与潜在客户匹配估算产品组合的收入 |
欺诈检测 | 分类客户检测异常活动 |
信用评级 | 分类客户信用评级客户 |
例如,在数据分类中,我们可以实施以下三种模型,以获得一个精炼且准确的模型:
- 随机森林:随机森林或随机决策森林是一种集成学习方法,用于分类、回归和其他任务。它们通过在训练时构建多个决策树,并输出类别的众数(分类)或个别树的平均预测值(回归)。随机决策森林可以纠正决策树过拟合训练集的问题。
请查看以下链接:en.wikipedia.org/wiki/Naive_Bayes_classifier
。
-
朴素贝叶斯:朴素贝叶斯分类器是一类简单的概率分类器,基于在特征之间做出强独立假设的贝叶斯定理。朴素贝叶斯分类器具有很高的可扩展性,要求学习问题中的变量(特征/预测变量)数目与参数数量之间呈线性关系。
-
支持向量机:支持向量机是有监督的学习模型,配有相关的学习算法,用于分类和回归分析。给定一组标记为属于两个类别之一的训练样本,SVM 训练算法构建一个模型,将新样本分配到其中一个类别,从而成为一种非概率的二分类线性分类器。
以下是构建预测模型以解决业务问题的步骤:
-
定义具体的业务目标是最重要的标准。不同利益相关方对数据科学问题协议的业务价值和目的达成一致是最关键的步骤。
-
来自关键利益相关方的资助和支持对于项目的成功至关重要。
-
数据工程师和数据科学家之间的协作至关重要;否则,孤立作业将无法实现项目的成功。
-
数据湖是一个汇集来自不同源系统的有用数据的存储库,这些数据是为了解决业务问题所需的适当、有效、有意义、有用且历史的数据。建立数据湖时,应考虑初始数据的容量规划以及未来增长的考虑。
-
根据质量标准清理数据,以确保仅使用有效和适当的数据,避免脏数据或过时数据进入系统。
-
特征工程是数据科学项目的核心工程,旨在从原始数据中提取有意义的见解(特征)。
-
特征选择是消除不相关、冗余或高度相关的特征。
-
通过遵循适当的验证方法(例如 K 折交叉验证或 70:30 模型)来测试预测模型。
-
确定模型结果。与任何项目一样,结果准确性的重复验证模型的有效性。
-
通过使用新数据进行持续迭代改进,并进行微调来优化模型。
市场上有许多受欢迎的统计建模工具,例如:
-
SPSS 建模工具
-
KNIME
-
Microsoft Revolution Analytics
-
RapidMiner
-
SAP 预测分析
-
SAS Enterprise Miner
-
Oracle 高级分析(Oracle 数据挖掘,Oracle R 高级分析)
一些流行的开源工具提供与商业统计软件包相当的全部功能:
-
R
-
Python
-
Scala
-
MatLab
-
Julia
近期低成本技术(如 Hadoop 生态系统、云计算、大数据和开源工具)的普及,已促使从小型企业到大型巨头的各行各业大规模采用。
数据科学方法
数据科学解决方案的方法包括以下几个阶段:
数据集中的知识挖掘(发现)是一个交互式和迭代的过程,涉及多个步骤,用于识别数据中的有效、有用和可理解的模式。
-
数据处理:数据清洗将原始数据预处理成易于使用的格式;相关任务包括:
-
抽样,即从大量数据中选择具有代表性的子集
-
去除噪声
-
对不完整行进行缺失数据处理
-
数据标准化
-
特征提取:提取在特定上下文中有用的数据
-
-
数据转换:通过缺失数据处理方法确保数据的可用性,例如:
-
仅使用包含相关数据的行
-
值替代:
-
使用特定属性的均值
-
使用相似案例的历史值进行回归替代
-
使用匹配插补、相似属性关联的案例
-
最大似然法、EM 算法等
-
-
-
数据挖掘:通过方法如:
-
关联规则
-
序列和路径分析
-
聚类分析:
- 根据一些共同属性将数据集划分为聚类或子集
-
分类方法:
-
将样本划分为类别
-
使用经过训练的集合作为之前标注过的数据
-
-
回归模型
-
基于过去数据的推断预测新值
-
基于少量其他测量属性计算因变量的新值
-
-
可视化模式
-
分类类似于聚类,但需要提前定义类别:
-
基于输入标签的分类器返回的分类结果
-
概率分类是指分类器返回可能的值,将它们分配到一个类别中。
-
采用特定标准,如数据超过 90%,以避免成本高昂的错误
-
根据概率限制(如超过 40%)将对象分配到类别中
-
-
回归与预测
-
数据表统计相关性:
-
基于先验假设的功能形式中的数据分布
-
基于机器学习的算法
-
-
曲线拟合:
-
探索数据背后定义良好且已知的函数
-
理论和专业知识为基础
-
-
-
机器学习:
-
监督学习:
-
输入和期望结果都作为训练数据的一部分
-
模型训练过程的输入基于已知的正确目标和结果
-
适当的训练、验证和测试集构建至关重要
-
快速且准确的结果
-
泛化能力,新的数据应能在没有目标先验知识的情况下得出正确结果
-
泛化意味着能够为训练过程中未出现的输入产生有效的输出
-
-
无监督学习:
-
在训练过程中不会提供正确的结果给模型
-
输入数据根据其统计特性仅按类别进行聚类
-
聚类和标签的重要性
-
即使是少量的代表性对象,也可以应用于所需的类别和标签
-
-
-
曲线拟合
-
通过使用适当的子集和早期停止实现
-
基于数据学习,而不仅仅是底层函数
-
用于训练的数据在面对新数据时应表现良好
-
-
-
-
数据集:
-
训练集:用于学习,其中目标值是已知的。
-
验证集:用于调优分类器架构,以估计误差。
-
测试集:仅评估分类器的性能;在训练过程中从未使用。测试集的误差应提供无偏的泛化误差估计。
-
-
-
-
-
数据选择:垃圾进,垃圾出,底层模型表示应包括训练、验证和测试数据。
-
不平衡数据集:
-
网络最小化总体误差,因此数据集中各类型数据的比例至关重要
-
损失矩阵包含
-
不同情况的均衡表示是解读网络决策的最佳方法
-
-
-
学习过程:
-
反向传播:
-
输出值与目标值进行比较,以计算预定义的误差函数
-
误差反馈到网络中
-
使用这些输入,算法调整每个连接的权重,以减少误差函数的值。
-
网络将在经过足够次数的训练周期后收敛
-
-
-
-
-
结果:
- 混淆矩阵:X 轴上的预测结果与 Y 轴上的目标值进行比较。行表示真实类别,列表示预测类别。
-
-
-
完整性和污染
-
分类器的性能根据以下标准进行评估,例如在两个类别之间:
-
完整性:正确分类的 A 类对象的百分比
-
污染:A 类对象被错误分类为 B 类对象的百分比
-
分类率:正确分类的对象的整体百分比
-
-
-
监督学习模型
-
神经网络
-
多层感知器
-
决策树
神经网络
它是一个结构化的流程,由神经元的输入层和输出层组成,中间有一个或多个隐藏层。
神经元通过选择激活函数与相邻层之间建立了良好的连接,尽管它们位于不同的拓扑结构中,权重是根据各种类型和架构的连接的函数值分配的。
人工神经网络:受生物神经系统过程的启发。人工神经网络是一种信息处理机制。
大量高度互联的简单处理神经元元素协同工作,解决特定问题。
一个简单的人工神经元:
节点或单元是一个基本的计算元素,接收来自其他单元或外部源的输入。
为了模拟突触学习,每个输入都与相关的权重 w 一起考虑。
该单元的输入加权和通过一个函数进行计算:
神经网络的不同类型有:
-
前馈:自适应线性神经元 (ADALINE),RBF,单层感知器
-
自组织:SOM(科霍宁映射)
-
递归:简单递归网络,霍普菲尔德网络
-
随机:玻尔兹曼机,RBM
-
模块化:关联神经网络 (ASNN),机器委员会
-
其他:神经模糊,级联,PPS,GTM,脉冲(SNN),即时训练
多层感知器
这是最流行的监督模型,通常由多个计算单元层组成,单元层之间通过前馈方式互联。每一层的神经元通过直接连接与后续层的神经元相连。
决策树
这是一种分类方法,基于一组简单的规则;它们是非参数的,不需要对每个类中变量的分布做任何假设。
例如,决策树如下所示:
无监督模型
-
聚类
-
距离
-
归一化
-
K 均值
-
自组织映射
聚类
聚类是层次化的,它使用先前分配的聚类来查找连续的聚类,采用自下而上(凝聚性)或自上而下(分裂性)以及分区类型的聚类,如下图右侧和左侧所示。
距离
用于确定两个聚类之间的相似性和聚类的形状。
归一化
-
VAR:对于每个属性的变换数据集,均值被减少到零;这是通过从每个属性的值中减去该属性的均值,并将结果除以该属性的标准差来实现的。
-
范围(最小-最大归一化):它从每个属性的值中减去该属性的最小值,然后将差值除以属性的范围。其优点是准确地保持数据中的所有关系,不引入任何偏差。
-
Softmax:它是一种减少数据中极端值或离群值影响的方法,而无需将它们从数据集中删除。当你有离群值数据且希望将其包含在数据集中,同时仍然保留在均值标准差内的数据的显著性时,这种方法非常有用。
K-means
K-means 是流行的模型,因为它快速且简单;然而,每次运行的结果可能不同。
-
根据特征将数据划分为 K 个簇。
-
每个簇由其质心表示,质心是簇中点的中心。
-
每个点被分配到最近的簇。
-
目标是最小化簇内方差或数据与对应簇质心之间距离的平方和。
-
计算均值点——质心。
通过将每个点与最近的质心关联来构建新的划分。计算每个数据集的均值点或质心。
近年来,低成本技术的涌现,如 Hadoop 生态系统、云计算、大数据和开源工具,已导致从小型企业到大型巨头的广泛采用。数据科学的渗透也遍及各行各业,生态系统得到了普及。
总结
在本章中,我们介绍了构建大数据应用程序的关键概念,涵盖了数据发现、质量和摄取的工具。我们讨论了 Spark Stream 内存引擎及其多功能性;还讨论了适用于各种行业解决方案的数据科学模型。
第七章:DevOps - 持续集成与交付
在本章中,我们将学习实施 DevOps 核心流程,如源代码仓库、代码审查、工件仓库、持续测试、持续开发、持续集成。如前面关于大数据和云的章节所讨论的,这些过程在每个阶段都非常有价值。我们将重点关注一些流行的工具,如 Git、Jenkins、Maven、Gerrit、Nexus、Selenium 等。
-
持续集成(CI)
-
持续交付(CD)
-
Jenkins 工具设置
-
配置管理 - Jenkins
-
源代码管理 - Git
-
构建管理 - Maven
-
源代码审查 - Gerrit
-
仓库管理 - Nexus
-
测试自动化 - Selenium
-
持续部署 - 管道
-
Jenkins 客户端设置
-
Jenkins 安全
-
Jenkins 指标
持续集成和持续交付是确保高质量和及时软件交付的流行且有价值的流程。持续集成是一个集成的软件开发过程,其中多个开发人员遵循敏捷方法,并将其调整为以下最佳实践:
-
确保所有开发代码都受版本控制系统的管理
-
包含适当的代码审查流程
-
代码更改快速集成、测试和构建
-
构建过程集成以运行单元测试并自动化
-
立即处理构建错误,快速调整
-
构建结果和仓库管理的跟踪与指标
-
透明度和用户友好的构建过程
持续交付是扩展持续集成的过程。
-
软件的最新版本随时可用
-
从技术和质量的角度来看,经过测试周期的更改已准备好部署
-
自动化发货和部署过程
持续集成过程如下图所示:
持续集成过程的详细步骤如下:
-
开发者环境:开发者在本地工作区使用集成开发环境运行时和安装在 PC 上的构建工具,或基于云的(Web IDE)创建代码更改。他们进行单元级测试、数据验证、代码性能检查等。开发者进行的代码更改被推送到源代码管理系统。
-
典型的持续集成和持续部署周期包括设置 CI/CD 基础设施和流程,如下所示:
-
源代码版本和仓库管理系统
-
启动编排管道的过程调度器
-
管理代码构建和计划测试的构建过程
-
执行构建的构建节点
-
在已识别的测试节点上进行自动化测试的测试过程
-
构建结果工件仓库
-
用于存储构建结果的工件仓库
-
测试节点上的场景和验收测试
-
使用部署工具将应用程序安装到运行时系统
-
部署在运行时系统上的应用程序的验收测试
-
质量经理将批准验收测试,以同意部署测试系统。
交付经理将批准应用程序部署到生产环境。
CI/CD 的最佳实践
-
使用版本控制:在协作开发环境中进行同时开发将面临多个挑战:
- 源代码管理系统在将代码置于版本控制系统下之后,定义了代码的单一真实来源。通过有效地采用合并流程进行主线开发,并在系统中使用回路修复等方式,源代码将是可重现的。Git 是一个流行的源代码管理系统,而 GitHub 作为一种软件即服务(SaaS)模式是其云版本:
-
自动化构建:标准化的自动化构建流程将稳定构建过程,产生可靠的结果。成熟的构建流程必须包含构建描述以及执行构建所需的所有依赖项,并使用标准化的构建工具安装。Jenkins 是最通用的构建调度工具;它提供便捷的用户界面,并且有许多插件集成了大多数流行的持续集成工具。
-
构建中的测试:需要执行一些测试,以验证代码的有效性和适应性,超越代码的语法正确性,如下所示:
-
单元测试直接作用于构建结果
-
在开发者提交代码前对源代码进行静态检查。可以使用 Git 提交前触发器或 CI 系统来设置门控或非门控检查
-
新构建应用程序的场景测试,确保其能够安装并启动
-
代码的功能性能:
-
单元测试框架在像 JUnit 这样的源代码技术中非常流行。Selenium 框架提供图形用户界面和浏览器行为。
作为构建的一部分,尽早在开发者的工作站上执行这些测试,可以节省时间和精力,避免在开发过程后期发现的错误。
-
尽早且频繁地提交代码:在多个项目的分布式开发环境中,每个团队或开发者都打算将自己的代码与主线集成。同时,特性分支也会发生变化并集成到主线中。最佳实践是尽早且快速地集成代码。新更改与主线合并之间的时间延迟越大,产品不稳定的风险、所需时间以及随着主线从基线发展而产生的复杂性也会增加。因此,每个在特性分支上工作的开发者应该每天至少提交一次代码。对于主分支上不活跃的项目,在实施之前必须评估不断变基所需的高昂努力。
-
每次更改都需要构建:开发者的更改需要并入主线,但它们有可能会破坏主线的稳定性,影响依赖主线的开发者的工作。
持续集成通过持续构建任何提交的代码变更来解决这个问题。任何构建失败都需要立即处理,因为构建失败会阻塞主分支的整个演进,而且根据提交的频率和此类问题的存在,修复这些问题可能会非常昂贵。通过强制执行分支级别的构建,可以最大限度地减少这些问题。
在 Gerrit 中推送进行审查或在 GitHub 中发起拉取请求是有效的机制,用于提出变更并检查变更质量,通过在推送到主分支之前识别问题,避免返工。
-
快速解决构建错误:在每个变更的分支级别进行构建的最佳实践将使相应的开发人员立即解决其代码构建问题,而不是将其传播到主分支。这形成了一个持续的变更-提交-构建-修复循环,发生在每个相应的分支级别。
-
快速构建:自动化过程快速返回构建结果和测试应该成为开发者工作流的重要输入;短暂的等待时间有助于提升持续集成过程的整体效率。
这是在将新变更安全地集成到主分支的同时,进行构建、验证和场景测试的平衡行为。有时,可能会出现相互冲突的目标,因此需要在不同级别的接受标准之间取得折衷,考虑到主分支的质量最为重要。标准包括语法正确性、单元测试和针对所做变更的快速场景测试。
- 生产前运行:在生产流水线的不同阶段,多个设置和环境会导致错误。这适用于开发者环境、分支级别的构建配置和中央主构建环境。因此,进行场景测试的机器应与主生产系统相似,并具有相当的配置。
手动遵循相同配置是一项艰巨的任务;这正是 DevOps 增值和核心价值主张的体现,并将基础设施设置和配置视为类似于编写代码的过程。所有机器的软件和配置都被定义为源文件,这些文件使得你能够重建相同的系统;我们将在第八章中详细讨论此内容,DevOps 持续部署。
-
构建过程是透明的:构建状态和最后变更的记录必须对所有人可用,以便确认构建的质量。Gerrit 是一个变更审查工具,可以有效地用来记录和跟踪代码变更、构建状态和相关评论。Jenkins 流程插件为构建团队和开发人员提供了一个完整的端到端概览,涵盖源代码管理工具、构建调度器、测试环境、工件库等相关内容。
-
自动化部署:以自动化方式将应用程序安装到运行时系统中,称为部署,并有多种方式可以完成此操作。
-
自动化场景测试应成为变更接受过程的一部分。这些测试可以通过构建触发,以确保产品质量。
-
设置多个运行时系统,如 JEE 服务器,以避免单实例瓶颈,序列化测试请求并能够运行并行的测试查询。使用单一系统也会带来重建环境的开销,每次测试用例都需要更改环境,导致性能退化。
-
使用 Docker 或容器技术按需安装并启动运行时系统,在预定义的状态下运行,之后可以删除(我们将在第九章,容器、物联网和微服务中深入讨论容器技术)。
-
自动化测试用例,由于新评论的验证频率和时间在大多数情况下不可预测,因此安排每天在指定时间执行作业是一种可探索的选项,构建将部署到测试系统,并在成功部署后发送通知。
-
部署到生产环境是一个手动且经过深思熟虑的决策,确保符合所有质量标准,并确保该更改适合部署到生产环境。如果也能自信地自动化执行,这也是自动化持续部署的最高成就。
-
持续交付意味着对任何集成的更改都要进行充分验证,以便准备好部署到生产环境。这并不要求每次更改都必须自动部署到生产环境。
Jenkins 设置
我们将从 Jenkins 开始,因为它是持续集成过程的核心组件。Jenkins 流程工作流如下所示:
参见 Jenkins 首页:jenkins.io/index.html
,如下所示:
安装 Jenkins 的先决条件
Jenkins 安装和配置要求应根据以下参数,参考 Jenkins 首页的建议进行规划:
-
操作系统——Ubuntu/Debian、Red Hat/Fedora/CentOS、openSUSE、FreeBSD、OpenBSD、Gentoo、Windows、macOS X 的 Linux 版本
-
JDK 版本
-
内存
-
硬盘空间
-
Java 容器——Jenkins 的 WAR 文件可以在任何支持 Servlet 的引擎上运行,如 Tomcat 或 Glassfish 应用服务器。
Jenkins 可以根据其用途以不同模式安装:
-
独立运行:Jenkins 可以在其自己的进程中独立运行,使用内置的 Web 服务器(Jetty)进行实验和小型项目。
-
基于 Servlet:它也可以作为一个 Servlet 框架运行,适用于开发项目。
-
用于预发布或生产环境的多节点设置:分布式客户端-服务器设置;建议使用 Jenkins 高级安装程序。
独立安装
建议的独立安装就像名字所暗示的那样,是在单台机器上独立完成的(与用于不同任务的多个系统相对):
-
独立安装需要在系统上安装 JDK。
-
下载
Jenkins.war
文件 -
打开命令提示符,并在
Jenkins.war
文件的位置运行以下命令:
C:>Java -jar Jenkins.war
在初始化过程中,将运行几个任务,并在安装过程中出现以下屏幕:
- 初始屏幕页面将询问插件选项:
- 插件将根据前述选项中选择的配置安装:
- 成功安装后,以下管理员凭据创建页面将弹出:
- 访问 Jenkins:成功安装后,可以通过本地计算机的 web 浏览器访问 Jenkins,如下所示:
http://localhost:8080
- Jenkins 仪表板将在此链接处打开:
- 仪表板中的“管理 Jenkins”选项将提供各种配置各种参数的选项:
- 仪表板中的“管理插件”选项是一个重要选项,提供了与源代码系统、认证系统、各种开发平台等集成的广泛选择。
在 Servlet 引擎上安装 Jenkins 需要安装 Tomcat 或 Glassfish。
-
将
Jenkins.war
文件复制到tomcat
文件夹中的 web 应用程序文件夹。 -
从 Tomcat
bin
目录启动 Tomcat 服务器。 -
http://localhost:8080/Jenkins
--在 Tomcat 服务器上访问 Jenkins。
在 Ubuntu 上安装 Linux 系统
-
登录服务器并更新:
sudo apt-get -y update
。 -
安装 Java:
sudo apt-get install -y default-jdk
。 -
使用
wget
命令从Jenkins-ci.org
站点下载 Ubuntu 版本:wget http://pkg.jenkins-ci.org/debian-rc/binary/jenkins_2.0_all.deb
。 -
包安装--
sudodpkg - i Jenkins.zip
。 -
通过
sudo apt - get -f install
解决依赖关系。 -
在端口
http://localhost:8080/Jenkins
上访问 Jenkins。 -
继续按照前面图示中列出的步骤进行。
-
要在启动时初始化 Jenkins,请在
/etc/rc.local
文件中添加命令/etc/init.d/jenkins start
。
Git(SCM)与 Jenkins 的集成
Git 是最流行的源代码管理系统,提供了广泛的好处,例如:
-
版本控制允许您为不同目的维护代码的多个版本
-
需要一个代码存储库来将所有项目相关的代码放在一个地方
-
用户之间的协作和调试目的的干预
可从 git-scm.com/downloads
下载 Git:
提供 Linux、Windows 等多个平台版本,支持桌面和网页版本。
存在多种类型的仓库:
-
在 GitHub 上创建的公共仓库可以让所有人读取访问权限,但写入或提交访问权限仅授予指定的个人或团队。
-
私有仓库允许合作者参与,并且是 GitHub 的付费订阅服务。
-
本地仓库是无需互联网连接的桌面版本。
-
远程仓库是一个基于 Web 的仓库,提供扩展功能,如问题管理和拉取请求。
GitHub 提供选项以同步来自单台计算机或多台计算机的代码更改。
拉取更改将同步来自桌面的代码更改与在线仓库,而克隆选项将创建仓库的全新副本到计算机中。
执行这些任务使我们能够在基于云的 SaaS 系统上维护源代码。
-
在 GitHub 上创建一个登录帐户。
-
创建一个项目仓库,用于组织与你的项目相关的代码。
将 GitHub 与 Jenkins 集成
要将 GitHub 仓库与 Jenkins 集成,请按照以下步骤操作:
-
在管理插件中,搜索 Git 插件并安装它,位于筛选器部分。
-
如果是默认安装,我们可以在已安装标签下找到它,如下所示:
- 在 Jenkins 重启后,创建新项目时将显示如下界面:
- 选择一个工作名称,下一屏幕将显示 Git 选项,如下所示,在源代码管理标签下。你可以以类似的方式添加其他 SCM 工具,如 CVS、Subversion 等:
- 在前面仓库 URL 占位符中输入本地计算机的 Git 仓库地址或一个网页链接,以便将 Git 配置与 Jenkins 集成。
Maven(构建)工具与 Jenkins 集成
- 从
maven.apache.org/download.cgi
下载 Maven;这是二进制文件的最新版本:
-
将下载的 Maven 文件提取到一个文件夹中。
-
打开管理 Jenkins:
- 选择 Maven 插件,如下所示,并安装它们,不选择重启选项。
- 监控插件进度,如下所示:
- 在配置工具下,添加 Maven,并提供仓库位置:
- 使用 Maven 项目选项创建一个新的项目任务:
- 构建环境中的 Maven 选项如下所示:
- 项目创建如下:
使用 Jenkins 构建任务
- 一个简单的应用程序构建并运行该程序:
- 以下列出了源代码仓库的选项:
- 我们可以指定需要构建的文件位置,这些文件可以来自源 Git 代码仓库,也可以来自 GitHub 上的 URL:
- 可以使用多种选项、命令模式和 Maven 等执行构建:
- 命令行程序可以按如下方式执行:
- 保存后,可以看到构建选项,历史记录也可用:
- 可以看到构建进度,并且可以访问仓库,如下所示:
源代码审查 - Gerrit
代码审查是软件开发框架中的一个重要功能。像 Gerrit 这样好的协作工具,非常适合且需要在代码审查过程中使用。Gerrit 启动基于拉取的工作流来发起变更请求,其中即使是源代码的评论也会被包括在内,以便通过工作流过程将变更合并到代码仓库中。Gerrit 维护着一个本地仓库,包含镜像的 Git 项目仓库和参考仓库。Gerrit 从主分支创建另一个维护分支,以跟踪对代码的审查;它为提交消息创建一个变更 ID 标识符,用于跟踪代码审查中的每一个变更。
Gerrit 允许进行代码变更比较,审阅者可以给出五个评分中的一个:
-
+2: 看起来不错,已批准
-
+1: 看起来不错,但需要额外批准
-
0: 无评论
-
-1: 建议不提交
-
-2: 阻止提交
Gerrit 安装
-
从
www.gerritcodereview.com/
下载 Gerrit。 -
根据平台选项按照安装说明操作,并通过以下方式访问 Gerrit,在
8080
端口上创建用户和项目:
- 在 Jenkins 中通过“管理插件”配置 Gerrit:
在第三章中列出的版本控制工具,DevOps 框架,例如基于 Web 的代码审查界面 Gerrit,允许在线审查变更,从任何 git 客户端推送变更,然后将其自动合并到主分支;它也可以配置为远程 git 仓库。
Gerrit 的配置包括用户创建,安全外壳(SSH)设置,用于与 Gerrit 服务器交换数据。配置文件/etc/gerrit.config
有许多参数,需要根据配置要求进行设置。
仓库管理
维护多个构建版本工件是仓库管理的关键特性,而 Nexus 是一个流行的仓库管理器。它可以从www.sonatype.org/nexus/downloads/
下载。
安装后,可以通过http://<nexus host>:8081/nexus
访问:
Nexus 可以通过插件进行 Jenkins 集成配置:
使用 Jenkins 进行测试
Jenkins 提供了许多开箱即用的功能和插件来进行测试。网站wiki.jenkins.io/display/JENKINS/xUnit+Plugin
提供了这些插件:
可用的测试插件列表如下所示:
-
JUnit 本身
-
AUnit
-
MSTest(从 MSTest 插件导入)
-
NUnit(从 NUnit 插件导入)
-
UnitTest++
-
Boost 测试库
-
PHPUnit
-
Free Pascal 单元
-
CppUnit
-
MbUnit
-
Google 测试
-
EmbUnit
-
gtester/glib
-
QTestLib
设置单元测试
- 选择我们已经设置好的项目:
- 选择构建选项:
- 选择一个高级选项:
- 输入
build.xml
的位置:
- 选择后构建选项,并选择 -
发布 JUnit 测试结果报告
:
- 在测试
reports.xml
中,输入我们项目中创建报告的文件夹,以便 Jenkins 自动识别运行 JUnit 测试用例后生成的 XML 文件:
我们可以选择构建并深入查看测试结果。
自动化测试套件
持续集成是验证构建的过程,用于客观评估其准备好进入下一个阶段的程度;这通过自动化测试实现。因此,构建工件设置为自动测试;Selenium 是最流行的框架。
可以从以下网站下载:
- 在 Jenkins 下,选择插件管理器中的 Selenium 插件并安装,安装后重启以启动:
- 配置 selenium 服务器 JAR 文件:
- 配置我们创建的项目,使其适用于此自动化框架:
- 在构建过程中,添加选项
SeleniumHQhtmlSuite Run
:
- Selenium IDE 将生成 TestSuite,启用 Selenium 测试时,通过启动 selenium 驱动程序并使用 SuiteFile:
持续交付 - 构建流水线
持续交付是从软件开发到部署构建一个健壮流水线的过程。
- 按照以下步骤从“管理插件”安装构建管道插件:
- 要设置构建管道,点击仪表盘中“All”标签旁边的“+”符号:
- 选择构建管道视图并为管道选择一个名称:
- 选择选项和创建的项目:
- 交付管道视图根据项目每个阶段的状态创建。
Jenkins 特性
-
客户端-服务器
-
安全性
-
报告
较大的项目需要配置多个机器,而不是在一台机器上进行集中构建。此外,还有对多个不同环境的测试构建要求。使用从属机器可以有效地将负载从主服务器转移。
它们需要通过 TCP/IP 套接字从主机到从属的双向通信链接,只需要从属代理而不是完整的 Jenkins 包或已编译的二进制文件。
- 要在 Jenkins 中设置从属节点/节点,配置并选择“管理节点”选项,创建一个新节点:
- 选择名称和“傻瓜从属”选项。
- 从属节点的详细信息需要提供,然后选择让 Jenkins 将 Windows 从属视为 Windows 服务。需要提供机器的名称节点和登录凭据等详细信息。
- 从属机器将如以下方式可用;可以配置新作业在此从属机器上运行。
Jenkins 中的安全性
具有相关权限的用户可以通过安全配置进行设置:
- 在“管理 Jenkins”下,选择“配置全局安全性”,并选择启用安全选项:
- 一旦保存选项,将提示您输入管理员用户。
-
在 Jenkins 管理设置下,选择“管理用户选项”以创建用户,并设置执行作业所需的基于矩阵的安全性授权:
-
可以安装报告选项、度量选项和报告插件。
-
有许多可用的度量指标,如构建历史度量插件:
-
平均故障时间 (MTTF)
-
平均恢复时间 (MTTR)
-
构建时间的标准差
-
-
可以在“管理插件”中安装,通过选择“构建历史度量插件”,上述度量指标将在作业页面上显示。
-
要查看图形化表示,请在“管理插件”下使用 Hudson global-build-stats 和 Global Build Stats 插件。设置选项、初始化统计信息、创建新图表选项,所有现有的构建记录将显示出来。
摘要
在这一章中,我们学习了实现持续集成和持续部署的流程和工具。
使用仓库管理、代码审查和测试自动化来实现开发、持续集成和持续部署。
在下一章中,我们将讨论将基础设施配置管理作为代码来进行持续部署的话题,使用的工具包括 Chef、Puppet 和 Ansible。同时,我们将讨论使用工具 Splunk 和 Nagios 进行持续监控的过程。
第八章:DevOps 持续部署
DevOps 持续部署使得变更可以快速地从开发迁移到生产环境。基础设施和自动化在实现持续部署中起着关键作用。在本章中,我们将学习配置自动化和基础设施自动化(基础设施即代码)的实现,使用的工具包括 Chef 和 Ansible。我们还将讨论使用工具 Splunk 和 Nagios 进行持续监控的过程:
-
持续部署
-
Chef
-
组件
-
术语
-
架构
-
-
Ansible
-
组件
-
术语
-
架构
-
-
持续监控
-
Splunk
-
Nagios
正如我们在前几章中讨论的,下面的图示展示了持续集成、持续部署和持续交付的对齐过程。
持续集成(CI)是将开发、单元测试和构建过程进行持续化处理,而不是分阶段(逐步)的过程。在 CI 过程中,每个开发者将他们的代码更改合并到中央版本控制系统,每次提交都会触发自动化构建。因此,最新的版本始终可用在代码库中,构建出来的可执行文件也来自最新的代码。
持续交付(CD)是持续集成过程的下一步,旨在通过短周期的测试和更频繁的软件发布,使软件工程能更快速和频繁地交付。自动化测试过程确保软件可以随时可靠地发布。
持续部署是通过减少开发新代码和代码在生产环境中可用之间的时间间隔(也就是“前置时间”)的过程。为了实现这一目标,持续部署依赖于自动化的基础设施,自动化执行各种步骤,确保每次成功的代码集成符合发布标准,最终导致部署,并且实时应用程序会更新为新代码。
传统上,新机器是由管理员和系统工程师根据文档和定制脚本等构建的。通过手动程序(如自定义脚本、黄金镜像配置等)管理基础设施既耗时又容易出错。寻求更快速和成熟部署的组织采用基础设施配置自动化,这意味着像管理软件代码一样管理基础设施,以实现可重复的结果,因此它也被称为基础设施即代码。
就像 SDLC 过程一样,基础设施也可以使用类似的工具和流程进行管理,如版本控制、持续集成、代码审查和自动化测试,扩展为使基础设施的配置变更更加强大和自动化。基础设施代码和配置更改会在从开发到 QA 测试系统,再到生产的所有环境中一致地进行测试、共享和推广,更加容易、快速、安全和可靠,并附有详细的变更审计日志。通过基础设施代码作为服务,新机器的配置可以像代码一样编写,并同时设置多个机器。通过利用云的弹性,这种可扩展模型更加高效。采用 DevOps 到基础设施即代码的转换等,不仅仅是简单的基础设施自动化,还能带来以下多种好处:
-
确保无误的自动化脚本是可重复的
-
可在多个服务器上重新部署
-
在出现问题时具有回滚能力
-
可以有效执行基础设施代码的测试标准,如单元测试、功能测试和集成测试
-
由于机器的文档化状态以代码形式维护并保持最新,因此避免了书面文档
-
使开发和运维团队在基础设施配置和供应上进行协作,将基础设施代码作为变更管理的一部分
我们将从流行工具功能和前述图中列出的功能角度讨论持续部署。
Chef
Chef 是一个突出的配置管理和基础设施自动化平台;它提供了一整套企业级功能,如工作流、可视化和合规性。它支持从开发到生产的基础设施和应用程序的持续部署。基础设施配置自动化作为代码由 Chef 编写、测试、部署和管理,适用于云环境、本地环境或混合环境,并提供全面的 24/7 支持服务。例如,客户端系统、安全补丁可以通过主服务器写入配置作为一组指令,并在多个节点上同时执行。
如下图所示,Chef 平台支持多个环境,如亚马逊 Web 服务(AWS)、Azure、VMware、OpenStack、谷歌云等。Windows、Linux、VMware 等平台也可用。所有流行的持续集成工具,如 Bitbucket、Jenkins、GitHub、CircleCI 等,都支持工作流集成。运行时环境可在 Kubernetes、Docker 和 Swarm 上运行。
Chef 平台组件
Chef landscape 包括 Chef 的各个元素,如节点、服务器和工作站,以及它们之间的关系,如下图所示。我们将讨论每个组件、术语及其在生态系统中的角色,以使 Chef 客户端能够执行分配的任务。Chef 术语类似于食品准备。食谱是制作菜肴的配方,而配方则是原料。
Chef 的组成部分包括:
-
Chef 服务器
-
Chef 客户端
-
Chef 工作站
-
Chef 仓库
Chef 服务器
Chef 服务器是用于维护网络中配置数据的中心,存储食谱、将策略应用于节点,并由 Chef 客户端管理每个注册节点的详细元数据。Chef 服务器通过安装在相应节点上的 Chef 客户端提供配置细节,如配方、模板和文件分发。因此,Chef 客户端在其节点上实现配置,减轻了 Chef 服务器的处理任务负担。该模型具有可扩展性,可以在整个组织内一致地应用配置。
Chef 服务器的特性
具有管理控制台和搜索功能的 Web 启用用户界面。
-
Chef 服务器上的管理控制台是一个基于 Web 的界面,用于管理多个功能,如:
-
网络中的节点
-
食谱和配方
-
分配的角色
-
数据包——JSON 数据存储,可能包含加密数据
-
环境详情
-
索引数据的搜索功能
-
管理用户账户和 Chef 服务器访问数据
-
-
搜索功能方便查询任何在 Chef 服务器上索引的数据类型,如节点、角色、平台、环境、数据包等。Apache Solr 搜索引擎是基础搜索引擎,并扩展了所有功能,如精确匹配、通配符、范围搜索和模糊搜索等。可以在食谱、命令行、管理控制台搜索功能等中运行完整的索引搜索,具有不同选项。
-
数据包位于 Chef 服务器上的安全子区域中;它们存储敏感数据,如密码、用户账户数据和其他机密类型的数据。只有通过 Chef 服务器验证的具有有效 SSL 证书的节点才能访问它们。数据包通过 Chef 服务器以其存储在 JSON 格式中的全局变量进行访问。可以通过食谱进行搜索和访问并加载。
-
策略定义了如何在业务和操作需求、流程及生产工作流中实施角色、环境和食谱版本:
-
角色是基于在组织中执行的特定功能、模式和流程来分配任务的一种方式,例如权限用户或业务用户等。每个节点、Web 或数据库服务器都有独特的属性,并根据角色分配运行列表。当节点要执行任务时,它会将其属性列表与执行该功能所需的属性进行比较。Chef 客户端确保属性和运行列表与服务器上的保持一致。
-
环境反映了组织的实际需求,例如开发、测试或生产系统,每个环境都维护有对应版本的 cookbook。
-
Cookbook 维护着特定组织的配置政策。不同版本的 cookbook 会进行版本控制,并维护关联的环境、元数据以及满足不同需求的运行列表;它们被上传到 Chef 服务器,并由 Chef 客户端在配置节点时应用。Cookbook 定义了一个场景,并包含支持该场景所需的一切,例如:
-
指定使用哪些资源及其顺序的食谱(Recipes)
-
属性值
-
文件分发
-
模板
-
Chef 扩展,例如自定义资源和库
-
-
运行列表(Run-list)包含所有 Chef 配置节点到目标状态所需的信息。它是一个有序的角色和食谱列表,按照执行顺序排列,用于将节点配置到预期的状态。每个节点的运行列表都是定制的,并作为节点对象的一部分存储在 Chef 服务器上。它可以通过 knife 命令或通过工作站上的 Chef 管理控制台进行维护,并上传到 Chef 服务器。
-
节点上的 Chef 客户端
Chef 客户端可以安装在不同类型的节点上——物理节点、虚拟节点、云节点、网络设备等,这些节点都已注册到 Chef 服务器。
-
节点类型:
-
物理节点是一个活动设备(系统或虚拟机),它连接到一个网络,安装了 Chef 客户端,用于与 Chef 服务器通信。
-
云节点是托管在外部云环境中的节点,如 AWS、Microsoft Azure OpenStack、Google Compute Engine 或 Rackspace。Knife 配合插件支持外部云服务,并创建实例来部署、配置和维护这些实例。
-
虚拟节点是一个像软件实现一样运行的系统,不需要直接访问物理机器。
-
网络节点,如交换机,可以通过 Chef 进行配置,并自动化物理和逻辑以太网链路属性及 VLAN 配置。网络设备的示例包括 Juniper Networks、Arista、Cisco 和 F5。
-
容器是运行各自配置的虚拟系统,多个容器共享同一操作系统。容器在管理分布式和可扩展的应用程序与服务时非常有效。
-
-
Chef 客户端:
-
Chef 客户端执行实际的配置。它定期联系 Chef 服务器,获取最新的 cookbook,并根据 cookbook 指令更新节点的当前状态(如果需要)。这一迭代过程由业务策略强制执行,以确保网络符合预期的目标状态。
-
Chef 客户端是安装并运行在每个注册到 Chef 服务器上的节点上的本地代理,用于确保节点处于预期状态。Chef 客户端承担大部分计算工作。它通常是虚拟机、容器实例或物理服务器。
-
Chef 客户端与 Chef 服务器之间的认证通过 RSA 公钥/密钥对进行,针对每个交易请求进行身份验证。Chef 服务器上存储的数据在注册节点身份验证后共享,避免任何未经授权的数据访问。
-
安装 Chef 客户端后,节点成为基础设施上的计算资源,由 Chef 管理,用于执行如下任务:
-
将节点注册到 Chef 服务器
-
认证服务
-
创建节点对象
-
与 Chef 服务器同步 cookbook
-
所需的 cookbook(包括食谱、属性和所有其他依赖项)被编译并加载
-
根据需求配置节点
-
异常处理和通知
-
-
Ohai
Ohai 是 Chef 客户端运行的一个工具,用于收集系统配置和度量数据,具有许多内置插件,可以确定系统状态以供 cookbook 使用。Ohai 收集的度量数据包括:
-
操作系统
-
内核
-
主机名
-
完全限定域名
-
虚拟化
-
云服务提供商元数据
-
网络
-
内存
-
磁盘
-
CPU
Ohai 收集的属性会被 Chef 客户端自动使用,以确保这些属性与服务器上的定义保持一致。
工作站
工作站使用户能够编写、测试和维护 cookbook,并与 Chef 服务器和节点进行交互。Chef 开发工具包也会安装并配置在工作站上。Chef 开发工具包是一个软件包,包含一组规定的工具,包括 Chef、命令行工具、Test Kitchen、ChefSpec、Berkshelf 等。用户通过工作站进行:
-
开发 cookbook 和测试食谱
-
在不同环境中测试 Chef 代码
-
版本源控制与 Chef 仓库同步
-
定义和配置角色、环境和组织政策
-
强制数据包用于存储关键信息
-
在节点上执行引导操作
Cookbook 是存放文件、模板、食谱、属性、库、定制资源、测试和元数据的存储库。Chef 客户端通过 cookbook 和食谱配置组织中的每个节点,配置的基本单位是 cookbook,它为食谱提供结构。基础设施状态被定义为文件、模板或包,按照所需场景在策略分发中进行配置。
Chef cookbook 使用 Ruby 编程语言,这是一种完整的编程语言,具有语法定义。食谱是配置特定项(如软件包、文件、服务、模板和用户)的简单模式,其中包含定义属性和值的块,这些属性和值与其对应项相匹配。食谱是 cookbook 中的基本配置元素。Chef 食谱是一个文件,它将相关资源组合在一起,例如配置 Web 服务器、数据库服务器或负载均衡器所需的所有内容。食谱存储在 cookbook 中,并且可以依赖于其他食谱。
Chef 仓库
Chef 仓库,顾名思义,是用于编写、测试和维护 cookbooks 的存储库制品。Chef 仓库像源代码一样进行管理,并与版本控制系统(如 GitHub、Bitbucket 等)同步。Chef 仓库的目录结构可以包含每个 cookbook 的 Chef 仓库,或者将所有 cookbooks 存放在一个 Chef 仓库中。
knife
是一个命令接口,用于从工作站与 Chef 服务器通信并上传 cookbooks。为了指定配置细节,使用 knife.rb
文件,knife
帮助管理:
-
节点引导
-
配方和 cookbooks
-
环境、角色和数据包
-
各种云环境资源
-
Chef 客户端安装到节点
-
Chef 服务器索引数据搜索功能
与 Chef 配合使用的工具和实用程序包称为 Chef 开发工具包(Chef DK)。它包括与 Chef 交互的命令行工具,例如 knife
Chef 服务器和 Chef 客户端,以及本地 Chef 代码库(chef-repo
)。Chef DK 的组件如下:
-
Chef 客户端
-
Chef 和
knife
命令行工具 -
Test Kitchen、Cookstyle 和 Foodcritic 作为测试工具
-
使用 InSpec 作为可执行代码的合规性和安全性要求
-
为上传到 Chef 服务器而编写的 cookbooks
-
数据包项的加密和解密使用 Chef-Vault,并使用已注册节点的公钥
-
Cookbooks 依赖管理工具
-
工作流工具 Chef
-
单元测试框架 Chef Specto 在本地测试资源
-
用于编写干净的 cookbooks 风格检查的 Rubocop 基于工具 Cookstyle
-
Chef Automate 服务器上的持续交付工作流,还提供命令行工具来设置和执行
-
用于配方代码静态分析的工具是 Foodcritic
-
它用于跨平台测试 cookbooks,集成测试框架工具是 Test Kitchen
-
为了快速进行 cookbook 测试和容器开发,
kitchen-dokken
是一个带有驱动程序、传输工具和提供者的test-kitchen
插件,用于在 Docker 和 Chef 中使用 -
用于 Vagrant 的 Kitchen 驱动程序是
`kitchen-vagrant`
-
人们在同一个
chef-repo
和 Chef 服务器中协作,knife
工作流插件是knife-spork
-
Chef 的首选语言是 Ruby
配方是资源的集合,通过资源名称、属性值对和操作等模式定义。它是读取并以可预测的方式执行的基本配置元素,并用 Ruby 编程语言编写。
一些属性如下:
-
包括配置系统所需的所有内容
-
存储在 cookbook 中
-
要使用 Chef 客户端,必须将其添加到运行列表中
-
它按照运行列表中列出的相同顺序执行
-
Chef 客户端仅在指示时运行配方
-
可以包含在另一个配方中
-
可能会读取数据包的内容(加密的数据包)
-
可能会输入搜索查询的结果
-
可能依赖于其他配方
-
通过标记节点来促进任意分组的创建
-
如果配方是常量,则重复执行时不会发生任何变化。
配方 DSL 是一种 Ruby DSL,用于声明资源,主要来自配方内。它还有助于确保配方按预期方式与节点(和节点属性)交互。大多数配方 DSL 方法会找到特定的参数,指导 Chef 客户端根据节点参数采取相应的操作。
资源是一种配置策略声明,说明:
-
描述所需配置项的期望状态
-
声明所需的步骤,以使项达到期望状态
-
资源类型被指定,例如包、模板或服务
-
列出额外的资源属性
-
被分组为配方,描述工作配置
Chef 具有内置资源,覆盖常见平台上的常见操作,并且可以构建以处理任何定制的情况。
通过不同版本的烹饪书,管理多个生产、预发布、开发/测试环境。
烹饪书模板资源用于添加到配方中,以动态生成静态文本文件。
为了管理配置文件,使用 嵌入式 Ruby(ERB)模板。
烹饪书/模板目录包含带有 Ruby 表达式和语句的 ERB 模板文件。
烹饪书按照标准一致编写,并进行相应的测试。
通过单元和集成测试,验证烹饪书配方,测试代码质量也叫做 语法测试。
Test Kitchen、ChefSpec、Foodcritic 等是用于测试 Chef 配方的工具。
属性文件的执行顺序与在烹饪书中定义的顺序相同。
Chef 基于 Ruby 构建,它是一个轻量级的领域特定语言(DSL),具有内建的分类法,用于满足组织的定制需求。
为了管理环境、烹饪书、数据包,并为用户和组配置基于角色的访问,属性、运行列表、角色等,Chef 服务器用户界面是 Chef 管理控制台。
Chef 超市是一个社区平台,用于共享和管理。任何 Chef 用户或组织都可以使用烹饪书。
Chef 的扩展功能
它是一个强大的自动化平台,将基础设施转化为在云端、本地或混合环境中运行的代码。通过 Chef Automate,基础设施可以在网络中跨组织规模进行配置、部署和管理。Chef Automate 的核心部分包括 Chef、Habitat 和 InSpec。
以下图片显示了三个开源、强大的引擎:
Chef 是基础设施自动化的核心引擎。Habitat 是一个应用程序自动化工具,模拟容器和微服务的概念。InSpec 通过指定可执行代码来确保合规性和安全性要求。
Habitat
Habitat 提供了一种预定义的应用程序自动化打包格式;Habitat 管理员和应用程序依赖项被打包并作为一个单元进行部署。Habitat 包格式定义了如何结构化,它们是隔离的、不可变执行的,适用于任何类型的运行时环境,如容器、裸金属或 PaaS。Habitat 管理员管理包的同级关系、升级策略和安全政策,这些都可以审计。
InSpec
InSpec 是一个开源工具,用于测试是否符合安全策略。它是一个框架,用于指定合规性、安全性和政策要求,以便自动测试基础设施中的任何节点。合规性可以通过代码表示,并集成到部署管道中:
-
使用 Compliance DSL,InSpec 使你能够快速轻松地编写审计规则。
-
InSpec 检查基础设施节点,以便在本地或远程运行测试。
-
安全性、合规性或政策问题的不合规情况会被记录。
InSpec 审计资源框架与 Chef Compliance 完全兼容。
它可以在多个平台上运行,使用 SSH 等远程命令或使用 Docker API,除了通过 API 确保合规性外,它还可以访问数据库、检查并限制服务或协议的使用,以及虚拟机的配置。例如,可以限制客户端或服务器机器上的 Telnetd 或 FTP 服务。
持续部署全栈管道是 Chef Automate。它包括自动化的合规性和安全性测试。该工作流提供了应用程序和基础设施的可见性,同时在开发和生产过程中的更改会传播整个管道。
Chef 高级架构组件包括 Chef DK、Chef Server 和客户端:
Chef 服务器扮演多个角色,充当配置数据的中心。它存储 cookbook,并根据基础设施应用政策到系统,按照每个系统定义的元数据进行操作。
Cookbook 开发工作流由 Chef 开发工具包规定,如下所示:
-
骨架 cookbook 创建:一个包含 Chef 开发工具包标准文件的 cookbook,Berkshelf 是帮助管理 cookbook 和相关依赖项的包管理器。
-
使用 Test Kitchen 创建虚拟机环境:该环境用于开发包含位置详细信息的 cookbook,以便在开发过程中进行自动化测试和调试。
-
准备和调试 cookbook 的配方:一个迭代过程,用于开发和测试 cookbook、修复 bug 并进行测试,直到它们达到预期目标。Cookbook 可以使用任何文本编辑器编写,例如 Sublime Text、vim、TextMate、EditPad 等。
-
执行验收测试:这些测试是在完整的 Chef 服务器上进行的,使用接近生产环境的环境,而不是开发环境。
-
通过所有验收测试的 cookbooks 以期望的方式部署到生产环境。
Chef Automate 工作流
Chef Automate 管道是基础设施和应用程序的全栈连续交付方法。它为任何应用程序的安全部署提供支持,支持高速度的变更,并与基础设施变更相关联。
Chef Automate 管道质量门控自动将开发者的工作站中的变更从部署推送到生产环境。提议的变更经过团队审批后,接受测试通过并发布到相应的工件中进行生产交付。
此图显示了 Chef 代码的开发、测试和部署工作流:
工件在验收阶段之后通过管道,进入质量保证的联合阶段、彩排(预生产)阶段,并最终交付到生产环境。
Chef Automate 图形用户界面提供了操作和工作流事件的视图。其数据仓库收集来自 Chef、Habitat、Automate 工作流和合规性的输入。仪表盘跟踪每个变更状态通过管道,并且可以使用查询语言自定义仪表盘。
合规性
可以通过创建自定义报告,使用 InSpec 中的合规规则,识别合规问题、安全风险和过时的软件。内置的配置文件包含针对安全框架(如 Centre for Internet Security(CIS)基准)的预定义规则集等。合规报告可以是独立的,也可以是集成的。同时,Chef Automate 服务器提供高可用性和容错能力,提供有关基础设施的实时数据,并确保一致的搜索结果。
Chef Compliance 服务器促进了基础设施合规性的集中管理,执行以下任务:
-
创建和管理规则配置文件
-
根据组织的安全管理生命周期定期测试节点
-
扫描完全远程执行;节点上不会安装任何足迹
-
合规报告确保基础设施满足安全要求
-
节点合规性审计统计信息已提供
Chef 合规报告详细列出了多个参数,如按节点划分的补丁和合规性,以下为示例:
来自 Automate 的 Chef 合规报告视图。
Chef Automate 提供分析合规报告的能力,可以根据节点、节点平台、环境或配置文件来调取数据,并深入挖掘相关信息。
Chef Automate 合规控制状态报告提供了关于主要、次要、关键、补丁级别等的全面仪表盘。
Ansible
Ansible 是一个流行且强大的自动化框架,专为持续交付而设计,其特点和优点在以下主题中列出:
突出功能
Ansible 提供以下功能:
-
现代化
-
自动化现有的部署过程
-
管理遗留系统和流程,像 DevOps 一样更新
-
-
迁移
- 定义应用一次并可在任何地方重新部署
-
DevOps
- 模拟所有内容,持续部署
Ansible 的优点
使用 Ansible 提供了以下列出的多个优势:
-
简单易用
-
不需要特殊的编码技能
-
任务按顺序执行
-
快速提高生产力
-
自动化易于理解
-
-
功能强大
-
应用部署
-
配置管理
-
工作流编排
-
应用生命周期编排
-
-
无代理
-
无代理架构
-
使用 OpenSSH 和 WinRM
-
无需代理进行利用或更新
-
更高效且更安全
-
Ansible 是一个多维度的 IT 自动化引擎,它简化了云资源配置、服务间编排、配置管理、应用部署及其他许多 IT 功能的自动化。
Ansible 通过规定系统间的相互关系来模拟 IT 基础设施,支持多层级的部署,而非单独管理每个系统。
如前所述,Ansible 没有客户端代理,也不需要额外的自定义安全基础设施。通过使用一种称为 YAML 的普通英语语言描述自动化任务,并以 Ansible 剧本的形式,使得部署非常简单。
Ansible 架构如下所示:
Ansible 术语、关键概念、工作流和使用方法
Ansible Tower 是一个基于 Web 的企业自动化框架解决方案,旨在成为控制、保护和管理 Ansible 环境的中心,提供用户界面和 RESTful API。它提供以下丰富的功能:
-
访问控制基于角色,以确保环境的安全,并有效管理——允许共享 SSH 凭据但不传输
-
通过一键部署访问,即使是非特权用户也可以通过即时访问安全地部署整个应用
-
确保完整的审计和合规性,因为所有 Ansible 自动化任务都集中记录
-
拥有各种云源的库存,可以通过图形界面管理或同步
-
它基于强大的 REST API,能够与 LDAP 集成,并记录所有任务
-
可与持续集成工具 Jenkins 轻松集成,提供命令行工具选项
-
支持通过配置回调来进行自动扩展拓扑
-
Ansible Tower 使用 Ansible 剧本进行安装
CMDB
Ansible 配置管理数据库(CMDB)在数据库中维护企业的所有配置信息,并支持多种格式的云创建选项,适用于不同的供应商。
剧本
剧本是用 YAML 编写的配置程序,用于自动化系统。Ansible 能够精细地编排多个基础设施拓扑实例,并对许多机器进行非常详细的控制。Ansible 的编排方法是通过简单的 YAML 语法或功能来管理精细调度的自动化代码。
Ansible 剧本描述了一项策略,以便在远程系统上执行配置和部署,强制执行一般的 IT 流程遵循步骤。
一个简单的类比是,主机库存是原材料,说明书是剧本,Ansible 模块是车间里的工具。
要管理部署到远程机器的配置,可以在基本层面使用剧本(playbook)。在更高级的层面,它们可以控制多层次的滚动更新,涉及到与监控服务器和负载均衡器的交互,并将操作委托给其他主机。
剧本是用一种基本的文本语言开发的,旨在便于人类阅读。剧本和文件的组织可以有多种方式。
一个简单的剧本示例:
- hosts: webservers
serial: 6 # update 6 machines at a time
roles:
- common
- webapp
- hosts: content_servers
roles:
- common
- content
模块
Ansible 模块可以控制系统资源,如服务、软件包或文件,用于处理和执行系统命令。这些资源模块由 Ansible 推送到节点,配置它们为所需的系统状态。这些 Ansible 模块通过 SSH(安全外壳)在目标节点上执行,任务完成后会被移除。模块库默认随多个模块一起提供,这些模块可以通过剧本或直接在远程主机上执行。模块可以驻留在任何机器上,不需要维护服务器、守护进程或数据库的概念。模块和库是可定制的,通常使用任何终端程序和文本编辑器创建,并通过版本控制系统来有效地跟踪内容的变化。
库存
Ansible 库存是一个资源列表:
-
主机和组
-
主机变量
-
组变量
-
组和组变量
-
默认组
-
拆分组和主机以及特定数据
-
库存行为参数列表
-
非 SSH 连接类型
Ansible 通过库存列表,能够同时在多个系统上操作基础设施。动态库存机制允许多个库存文件通过库存插件灵活且可定制。库存列表可以位于默认位置,或者从动态或云源(如 EC2、Rackspace、OpenStack 等)指定库存文件的位置,支持不同格式。
下面是一个纯文本库存文件的示例:
[webservers]
www1.example.com
www2.example.com
[dbservers]
db0.example.com
db1.example.com
插件
Ansible 的核心功能通过一系列便捷的插件得到增强,并且可以用 JSON(Ruby、Python、Bash 等)进行自定义。插件可以连接到任何数据源,扩展 SSH 以外的其他传输连接类型,回调日志,甚至增加新的服务器端行为。
Ansible Tower
提供多个功能,例如:
-
可以连接 LDAP、AD、SAML 和其他目录
-
基于角色的访问控制引擎
-
无暴露存储的凭据
-
对首次使用者友好
-
启用智能搜索的信息查找
-
在运行时配置自动化
-
基于 REST API 的与流程和工具的集成
-
扩展容量的 Tower 集群
Ansible Tower 可以调用多 playbook 工作流,链接任意数量的 playbook,使用不同的清单,以不同用户身份运行,批量运行,或使用不同的凭证。
Ansible Tower 工作流促进了许多复杂操作,可以构建工作流来配置机器、应用系统的基本配置,并由不同团队维护不同的 playbook 来部署应用程序。可以为 CI/CD 构建工作流,构建一个应用程序,将其部署到测试环境,运行测试,并根据测试结果自动提升应用程序。Ansible Tower 直观的工作流编辑器可以轻松地将不同的 playbook 设为备用,在先前的工作流 playbook 成功或失败时进行替代执行。
一个典型的工作流可能如下所示,它可以快速在多个系统上有效使用,而不会将其基础设施下线。为了实现持续部署,自动化 QA 对成熟到此水平至关重要:
-
脚本自动化以部署本地开发虚拟机
-
CI 系统,如 Jenkins,每次代码更改时部署到暂存环境
-
部署作业执行构建时的测试脚本,通过每次部署的 pass/fail 结果
-
在部署作业成功后,同一个 playbook 会对生产环境清单进行运行
Ansible Tower 工作流带来了以下功能:
-
作业调度
-
内置通知,通知团队
-
稳定的 API 可与现有工具和流程连接
-
新的工作流以建模整个过程
Ansible Tower 仪表板(参见图片)提供以下功能:
-
仪表板和实时自动化更新
-
图形化库存管理
-
集成的 RBAC 和凭据管理
Ansible Vault
Ansible Vault 是一个将敏感数据以加密形式存储的功能,例如密码或密钥,而不是将其作为纯文本保存在角色或 playbook 中。这些 Vault 文件可以放在源代码管理中,或者分发到多个位置。数据文件,如 Ansible 任务、处理程序、任意文件,甚至二进制文件也可以使用 Vault 加密。这些文件在目标主机上解密。
Ansible Galaxy
Ansible Galaxy 是一个开源网站,旨在为社区提供信息,并协作构建 IT 自动化解决方案,汇聚管理员和开发者。网站提供了预配置的角色,可以通过 Galaxy 搜索索引下载并快速启动自动化项目。这些角色也可以与 GitHub 账户一起使用。
使用 Ansible 的测试策略
尽管测试是一个非常组织化和站点特定的概念,但 Ansible 集成测试与 Ansible playbook 一起设计为一个有序的、快速失败的系统。它通过基于推送的机制,方便地将测试嵌入到 Ansible playbook 中。
Ansible playbook 是系统的期望状态模型,它将确保声明的事项,如要启动的服务和已安装的软件包,符合声明性声明。Ansible 是一个基于命令的系统,处理未处理的错误时,主机会立即失败并防止该主机进一步配置,并在 Ansible 执行结束时以摘要形式显示它们。Ansible 是一个多层次的编排系统,可以将测试嵌入到 playbook 执行中,作为任务或角色。
在工作流中进行基础设施集成测试的应用程序测试,将有效检查代码质量和性能,确保其在进入生产系统之前得到验证。由于是基于推送的,工作流中的检查和平衡机制,甚至升级,都很容易在本地主机或测试服务器上维护。
监控
企业监控是一个主要活动,它将监控开发里程碑、应用日志、服务器健康状况、操作、基础设施、漏洞、部署和用户活动进行分类。这些通过以下方式完成:
-
收集和关键信息
-
成熟的监控工具
-
避免基于不确定性做出判断和决策
-
参与式监控与评估
-
选择并使用正确的指标
-
在业务背景下解读指标结果
-
实时数据收集
-
管理数据和信息
开发里程碑:监控开发里程碑是衡量 DevOps 采纳策略是否有效的指标,通过深入了解实际过程和团队的表现来进行评估。一些度量标准包括冲刺范围变化、现场修复的 bug 数量、以及承诺与交付功能的比例。这些指标驱动团队效率和按时完成任务的遵守情况,此监控作为敏捷插件集成于问题追踪中。
代码漏洞:监控应用程序代码中的漏洞,列出不安全编码实践引入的顶层代码弱点。这些可以通过定期进行代码审查或更改第三方依赖关系等方式加以解决。
部署:部署监控是配置构建服务器,使其在过程中内建一些监控,通知团队。具有通知功能的持续集成服务器与聊天服务器通信,迅速提醒团队构建和部署失败。
应用日志输出:如果服务分布式部署,应计划将应用日志输出到集中式日志记录,以便充分利用,实时提供错误和异常的价值。能够以可搜索的格式追踪错误代码生成的通知,在生产之前带来收益。
服务器健康:监控可用资源的正常运行时间和性能,包括停机或过度利用的服务器。入侵检测和健康监控系统与同一通知管道集成,将提供额外的价值。
活动监控:用户活动监控既包括功能开发,也包括基础设施扩展。同时监控开发里程碑和数据量。
集中存储应用日志、用户活动监控、项目历史等合并日志数据,为检测和分析提供价值,能够在全球范围内关联不同的日志源,以了解应用和项目的状态。
Splunk
Splunk 是一个流行的应用监控工具,可帮助实时监控由 DevOps 驱动的应用交付,支持持续交付或持续集成,帮助快速从概念转向生产。Splunk 企业版通过提升速度和质量,帮助提高应用交付对业务的影响。
Splunk 通过以下优势提升代码质量:
-
在客户看到问题之前解决代码问题。
-
更快速地检测和修复与生产相关的问题。
-
可以通过客观指标确保代码正常运行并满足质量服务水平协议(SLA)。
Splunk 是一个平台,能够捕捉并记录客户、机器数据、用户、事务、应用、服务器、网络和移动设备的所有活动和行为。
Splunk 平台通过集成从应用开发到测试再到生产监控的实时洞察,增强了其业务影响力。它提供了跨所有交付生命周期阶段的统一视图,而非离散的发布组件。
为业务和 DevOps 领导者提供实时可见的与业务相关的数据,包括应用性能、使用情况、收入系统、购物车履行和注册数据,帮助更好地规划库存、报告并改善客户体验。
支持开发生命周期集成和跨多种支持的阶段及应用的可视化:
支持操作生命周期的集成和跨多种支持的阶段及应用的可视化。使用分析可以更快地交付应用:
-
跨每个 DevOps 交付工具链组件实现端到端的可见性
-
在应用交付生命周期中,相关的洞察可以更快迭代
-
测量和基准化发布贡献,提升 DevOps 团队效率
Splunk 通过为业务领导者提供反馈循环,帮助组织评估代码更改对客户的实际影响。持续的互动有助于建立关于机器行为和深入资产模型的更多智能。
这些好处反映了应用交付对业务的影响:
-
通过将业务指标与代码更改相关联,获得新的业务洞察
-
通过交付表现更好的代码提升用户体验
-
提供更安全、更合规的代码有助于提升声誉
Nagios 基础设施监控工具
有多个 Nagios 开源工具的变体,用于监控特定操作系统上每个细分领域的关键基础设施组件:
-
网络监控软件
-
网络流量监控
-
服务器(Linux、Windows)监控
-
应用监控工具
-
Web 应用监控
-
监控核心引擎和基础 Web 界面
-
Nagios 核心插件包及附加组件
-
Nagios 日志服务器安全威胁与审计系统
Nagios 有助于监控网络中的问题,如过载的数据链路、网络连接、路由器、交换机、由于服务器过载或崩溃造成的问题等。
Nagios 可以通过多种可视化方式和报告提供度量结果,以监控网络中每个节点的可用性、运行时间和响应时间,并支持基于代理和无代理的监控。
使用 Nagios 进行有效的应用监控能够使组织快速发现应用程序、服务或进程的问题,并采取纠正措施,以防止应用用户的停机。
Nagios 应用程序和应用状态监控工具扩展到 Windows 应用程序、Linux 应用程序、Unix 应用程序和 Web 应用程序。它拥有一个活跃的社区协作网络。
路由器监控功能提供了诸如在机器无响应时立即通知、通过检测网络中断和协议故障提前预警、提高服务器、服务和应用程序的可用性等好处。
使用 Nagios 进行 Windows 监控可以提高服务器、服务和应用程序的可用性,快速检测网络中断、服务失败、进程故障、批处理任务和协议故障等问题。系统度量、事件日志、应用程序(如 IIS、Exchange 等)、服务(如 Active Directory、DHCP、服务状态、进程状态、性能计数器等)等广泛的指标将被收集。
Nagios——企业级服务器和网络监控软件
内置的高级功能包括:
-
提供全面仪表板,集成概览源、检查、网络流量数据等
-
通过安全性和可靠性网络分析仪的警报,检测可疑的网络活动。
-
提供网络流量、带宽、整体网络健康状况等的深度洞察与分析选项,并具有先进的可视化功能。
-
监控特定应用的网络使用情况,提供自定义应用监控、自定义查询、视图和报告。
-
通过专门视图展示的历史网络流量数据与网络流量信息的子集。
-
异常活动警报与自动警报系统示例,如带宽使用超过指定阈值。
-
集成的网络分析仪服务器负载与硬盘空间可用性度量
集成的网络分析、监控和带宽仪表盘。
Nagios 仪表盘提供多种监控选项,如源组、服务器 CPU、磁盘使用情况等,可以根据业务需求扩展和自定义更多选择。
总结
在下一章中,我们将讨论可视化的高级话题、多个供应商提供的容器、编排选项、物联网、微服务等。
第九章:容器、物联网与微服务
在本章中,我们将学习容器、虚拟化、Kubernetes、物联网、微服务等概念。
-
虚拟化:
-
半虚拟化
-
基于容器的虚拟化
-
-
容器简介:
-
容器类型
-
Docker
-
Java 容器服务
-
亚马逊容器服务
-
关键容器服务
-
Google 容器服务
-
-
容器编排:
-
Kubernetes
-
Docker Swarm
-
Mesosphere
-
-
物联网
-
微服务
虚拟化
这是一种逻辑上将大型计算机系统划分的方式,使多个应用程序能够同时并行运行。裸机应用无法跟上资源如服务器处理能力和容量改进的进步。这为设计虚拟机(VMs)铺平了道路,通过在物理服务器上运行专门的软件来仿真一种底层硬件系统。
同一物理服务器可以承载多个虚拟机,每个虚拟机都可以运行不同的操作系统。每个虚拟机都运行一个独特的操作系统以及它支持的二进制文件/库和应用程序。虚拟机可能会非常大,达到几个 GB。服务器虚拟化的好处包括将应用程序整合到单一系统中,减少服务器占地空间,加快服务器配置速度,改善灾难恢复和节省成本。
虚拟机管理程序
虚拟机管理程序是创建并运行虚拟机的软件、固件或硬件,也称为虚拟机监控器。它是操作系统和硬件之间的一层,用于虚拟化服务器。
虚拟机管理程序(Hypervisor)创建虚拟环境以承载客户机虚拟机(VM)。它监管客户机系统,并根据需要分配资源。虚拟机管理程序仿真主机操作系统上的操作,并在物理机和虚拟机之间为虚拟机提供虚拟化服务:
随着云计算的迅速发展,虚拟化技术变得越来越流行,使用像 Xen、VMware Player、KVM 等虚拟机管理程序,并在普通处理器中集成硬件支持,如 Intel VT 和 AMD-V。
虚拟化类型
虚拟化类型根据它如何模拟硬件以支持客户操作系统,并仿真客户操作环境进行分类。
主要有三种虚拟化类型:
-
仿真
-
半虚拟化
-
基于容器的虚拟化
仿真
模拟是完全的虚拟化,它通过软件在虚拟机中完全运行操作系统内核。这种类型的虚拟机管理程序被称为类型 2 虚拟机管理程序,它安装在主机操作系统上方,将来宾操作系统内核代码转换为软件指令。没有硬件的参与,翻译完全在软件层进行。通过模拟支持底层环境的任何操作系统,然而,由于额外的系统资源开销,与其他虚拟化类型相比,性能有所下降。
以下示意图展示了一些示例,包括 VMware Player、VirtualBox、QEMU、Bochs、Parallels 等:
半虚拟化
半虚拟化,也称为类型 1 虚拟机管理程序,直接运行在裸金属硬件上,为运行在其上的虚拟机提供虚拟化服务。它支持操作系统、虚拟化硬件和裸金属硬件之间的协作,以实现最佳性能。这些虚拟机管理程序不需要大量资源,通常可以在小型系统上运行。
以下是一些示例,包括 Xen、KVM 等:
基于容器的虚拟化
基于容器的虚拟化也称为操作系统级虚拟化;在单个操作系统内核中,它支持多个隔离环境的执行。这个隔离的虚拟执行环境称为容器管理,其中包含一组进程。它提供了高性能和动态资源管理等特点和优势:
容器
IT 中容器的概念与运输行业中容器的概念相同。容器的基本目的是从源点到目的地运送物品。
类比地,IT 中的容器在基本用途上起着将软件从一台服务器安全迁移到另一台服务器的作用。将应用程序从开发服务器迁移到 QA(测试)服务器,再到生产服务器,通常涉及多个复杂问题,如准备基础设施环境检查清单、验证编译器、库、运行时依赖关系等。容器的概念确保它将所需的生态系统一同携带,以便应用程序能够从一个裸金属系统运行到另一个裸金属系统。从这个意义上来说,容器是自给自足的,具备所有必要的组件,并且为应用程序提供了可以在任何服务器上运行的环境。容器镜像是一个独立的可执行包,它抽象了应用层的代码和依赖项;它们占用较少的空间,并在分配的资源内运行。
容器是一种逻辑打包机制,将应用程序与其实际运行的底层环境进行抽象。基于容器的应用程序由于解耦的特性,可以轻松且一致地在各种目标环境中部署,从私有数据中心到公共云,或个人笔记本电脑。容器化将角色、责任和关注点分离;这使得开发人员可以专注于应用程序逻辑和依赖关系。IT 运维团队可以在不深入了解特定软件版本和配置的情况下,专注于纯粹的部署和管理:
容器的特点使其成为一个非常受欢迎的选择:
-
轻量级:这些容器使用更少的资源并能立即启动;多个容器可以共享操作系统内核,使用更少的资源。它们共享公共文件,镜像是从文件系统层构建的,以最小化磁盘消耗并加快镜像下线速度。
-
互操作性:容器应基于开放标准运行,并能在不同平台之间移植,包括 Linux 发行版(Debian、Ubuntu 和 CentOs)、虚拟机和 Windows。
-
安全性:容器通过将应用程序与底层基础设施隔离和分离,提供了较高的安全性。与应用程序相关的问题应仅限于容器内,既不会影响其他应用程序,也不会影响整个机器。
多租户:容器通过独特的挂载进程共享公共内核(系统资源)。对于每个容器,共享的组件是可写的,而它们则具有只读访问权限。由于这种共享概念,容器带来了以下好处:
-
异常轻量
-
快速启动时间
-
在各种云部署中的可移植性,包括公有云、私有云等
-
通过快速组装(打包)带有依赖关系的应用程序,开发和测试阶段得以加速
-
管理工作量减少,相比于管理多个服务器,管理单个系统的工作量更小,打补丁和升级的工作量也降低
-
客户操作系统和宿主操作系统应兼容,因此两者应匹配,如 Linux,不能在 Windows 上运行,反之亦然:
-
容器安全性:Linux 内核中的命名空间特性促成了容器概念的创建。为全局命名空间创建了独立的实例;其工作原理是,为每个进程,容器添加一个唯一的 ID,并且每个系统调用时,都添加新的访问控制检查。这些作为隔离的容器,其中外部对象既无法访问也无法查看容器内运行的进程。尽管共享底层内核,每个容器都被单独对待;例如,每个容器的根用户仅限于各自容器,增强了安全性。
-
容器管理:公共内核在多个容器之间具有完全的可见性,因此必须限制资源分配给容器。这是通过 Linux 控制组(cgroups)子系统进行资源分配和调度实现的。容器虚拟化是通过将进程分组来管理它们的总体资源消耗,从而限制内存和 CPU 消耗。用于限制 Linux 容器资源分配的管理工具包括 LXC、LXD、Linux-VServer、OpenVZ、Docker、systemd-nspawn、lmctfy、Warden 等。
-
可扩展性:集群管理基础设施支持可扩展性,能够根据资源需求和可用性在集群中安装、操作并调度容器化应用程序。它支持从单个实例扩展到多个实例的能力,并且在管理应用程序、批处理作业或微服务时无需额外的复杂性,抽象了基础设施的复杂性。
-
任务定义:任务通过声明性 JSON 模板定义,称为任务定义。任务所需的多个容器在任务定义中指定,包括 Docker 仓库/镜像、CPU、内存和共享数据卷。容器之间的链接方式可以作为一个单一的任务定义文件的一部分,注册到服务中。应用程序规范的版本控制也是任务定义的一部分。
-
编程控制:容器服务提供 API,用于集成和扩展服务,如集群的创建和删除、Docker 容器的注册和注销,包括启动和终止任务,并提供有关集群状态和其实例的详细信息。
-
调度:应用程序、批处理作业和服务通过调度器进行管理,按照指定的方式运行。调度器根据可用性要求和资源需求(如内存或 CPU)将容器放置到集群中。提供自定义调度器的配置,并集成第三方调度器、容器管理和编排支持与开源项目。
-
容器自动恢复:容器自动恢复不健康的容器,以确保以所需数量的容器支持应用程序。
-
容器部署:通过上传更新版的应用任务定义,调度器会自动停止旧版本的容器,并启动新版本的容器。通过方便的注册和注销容器,可以轻松地将容器更新为新版本。
-
负载均衡:通过弹性负载均衡器(ELB)分配流量到容器中,可以在任务定义中指定将容器添加到 ELB 或从 ELB 中移除容器。在任务定义中,动态端口分配会在容器调度时为其提供未使用的端口;要共享多个服务,基于路径的 ELB 路由也是一种选择。
-
本地开发:Docker Compose 是一个开源工具,用于定义和运行多容器应用程序;这可以扩展到工作机器和生产服务器。
-
监控:集群和容器运行任务,按任务定义、服务或集群分组的 CPU 和内存利用率的平均值和汇总值,提供设置警报的功能,以便在容器需要扩展或缩减时发出警告。
-
日志记录:捕获代理日志、API 调用和 Docker 日志的详细信息,用于问题诊断,包括 API 调用的时间、API 调用源 IP 地址、请求参数、响应元素、安全分析、合规性、审计和资源变更跟踪。
-
仓库支持:容器服务支持第三方、私有 Docker 注册表或 Docker hub 镜像仓库访问,以检索适当的镜像。
-
安全性:内置功能可以获得对角色和访问权限的可见性,在任务级别管理实例角色和任务角色,并通过最小权限策略进行分离。
如我们所见,容器是标准化的软件开发单元,涵盖了作为代码的所有内容,包括运行时、系统工具和系统库,以便软件应用程序运行。镜像是一个只读模板,用于创建容器。应用组件必须被架构化以便在容器中部署和运行。
容器在数字技术中变得越来越流行,并且被许多供应商提供。Docker 是一个流行的容器选择,因此其他供应商自然也会采用和支持它:
-
Docker
-
Java 容器服务
-
亚马逊
-
Pivotal
-
Azure
-
谷歌
-
IBM Bluemix 容器服务
Docker 容器
Docker 容器平台分为社区版(CE)和企业版(EE),并为各种基础设施提供了优化的安装程序:
Docker 容器服务的特点如下:
-
通用打包:将任何编程语言或服务的应用打包成容器进行移植,避免了不兼容或版本冲突的风险。
-
开发者工具包:Docker 商店中提供的现成容器包含构建、测试和运行多容器应用所需的一切,适用于任何编程语言。
-
内建容器编排:通过内建的集群功能,具备复杂的调度能力,监控、构建高可用性和容错服务,运行应用程序。
-
高度安全:开箱即用的安全性,包括相互 TLS、证书轮换、容器隔离和镜像签名,使得容器应用运行时既安全又易于使用。
-
面向应用的网络:容器通过软件定义的网络连接在一起,智能路由并负载均衡流量。容器定义的网络抽象了配置,从底层网络基础设施部署应用程序。
-
可扩展架构:与第三方系统集成,支持开放 API、插件和驱动程序,便于在最小或不需要代码更改的情况下更改存储和网络后端。
Java EE 容器作为 Java EE 的一部分
精简客户端的多层应用程序来处理事务和状态管理、多线程、资源池化及其他复杂的低级细节,这些都涉及许多行复杂的代码和难以维护的 Java EE 架构。Java EE 是基于组件的、平台独立的,确保了 Java EE 应用程序的便捷性,因为业务逻辑被组织成可重用的组件,并为每种组件类型提供容器形式的底层服务。与其投入开发这些服务,不如专注于解决当前的业务问题。
Java 容器是组件与支持该组件的低级平台特定功能之间的接口。对于 Web 服务,企业 Beans、应用客户端组件必须组装成一个 Java EE 模块,并部署到其容器中执行。
对于组装过程,为 Java EE 应用程序的每个组件以及 Java EE 应用程序本身指定容器设置。容器设置可以通过 Java EE 服务器的底层功能进行自定义,如事务管理、Java 命名和目录接口(JNDI)查找、安全性和远程连接。
一些功能包括:
-
Java EE 安全模型——授权用户被配置为访问 Web 组件或企业。
-
Java EE 事务模型将一个事务中的所有方法视为一个单元,通过指定方法之间的关系,将它们归类为单一事务。
-
JNDI 查找服务帮助应用组件访问企业中的统一接口,支持多个命名和目录服务。
-
Java EE 远程连接模型通过调用方法来管理客户端之间的低级通信,模拟虚拟机(VM),在企业 Beans 创建后进行管理。
Java EE 架构具有可配置服务和内部应用组件,可以提供不同的功能,如安全设置、访问数据库数据的权限级别,针对每个生产环境的定制。Java EE 容器提供不可配置的服务,如企业 Bean 和 servlet 生命周期、数据持久化、数据库连接、资源池和对 Java EE 平台 API 的访问。
Java EE 服务器和容器
Java EE 应用程序组件中的容器类型包括:
-
Java EE 服务器:这是 Java EE 的运行时环境,提供 EJB 和 Web 容器。
-
企业 JavaBeans(EJB)容器:它是 Java EE 服务器的一部分,负责执行 Java EE 应用程序中的企业 Bean。
-
Web 容器:它们是 Java EE 服务器的一部分,负责管理 JSP 页面和 servlet 组件的执行,适用于 Java EE 应用程序。Web 组件及其容器运行在 Java EE 服务器上。
-
应用客户端容器:用于托管应用客户端及其容器的执行。
-
小程序容器:负责小程序的执行,并将 Web 浏览器和 Java 插件托管在一起,在客户端运行。
Amazon ECS 容器服务
Amazon ECS 具有以下多种功能:
-
高度可扩展、快速的容器管理服务。
-
管理 Docker 容器可以轻松地在Amazon Elastic Compute Cloud(Amazon EC2)实例集群上运行和停止。
-
基于容器的应用通过简单的 API 调用启动和停止。
-
集中式服务用于监控集群的状态,并提供对许多熟悉的 Amazon EC2 功能的访问。
-
根据资源需求、隔离策略和可用性要求,安排容器在集群中的位置。
-
一致的部署和构建体验,管理规模提取-转换-加载(ETL)和批量工作负载。
-
构建复杂的微服务和基于模型的应用架构。
-
提供更细粒度的控制,并访问更多的使用案例,因此相比 AWS Elastic Beanstalk 更受欢迎。
Amazon ECS 也具有高度可用性,支持在多个可用区运行应用容器的概念。容器镜像存储在容器注册表中,并可以从中拉取(无论是在 AWS 内还是外)。任务定义和服务被定义以指定 Docker 容器镜像在相应集群上运行的对齐方式:
Amazon ECS 多区架构组件将在后文进一步讨论。
容器和镜像
应用组件必须被设计为在容器中运行,才能部署到 ECS。标准化单元是 Docker 容器,用于软件开发,包含运行代码所需的应用程序需求、运行时、系统工具、系统库等。镜像模板用于创建容器,并指定所有作为容器一部分的组件。通常,它是一个只读格式的文件,来自一个普通文本的 Dockerfile,存储在注册表中以供下载并在容器实例上运行:
任务定义
任务定义为应用程序在 ECS 上运行做准备,作为应用程序的蓝图,是一个 JSON 格式的文本文件。它通过各种参数描述应用程序的使用方式,包括要使用的容器、需要打开的相应端口、要定位的仓库以及与容器一起使用的数据卷,这些都是 Web 服务器(如 Nginx)上任务的一部分。
任务和调度
使用任务定义,可以指定任务的数量,以便在集群内的容器实例上进行实例化。任务调度程序负责同时将任务放置和调度到容器实例上:
集群
集群是用于运行任务的实例的逻辑分组。容器镜像从指定的注册表中下载,以便在集群内的容器实例上运行它们。
容器代理
容器代理在集群内的每个实例上运行。它将实例的信息,如当前运行的任务和资源使用情况,传递出去,并根据请求启动和停止任务:
Amazon ECS 的功能可以通过额外的服务进行增强:
-
身份与访问管理:IAM 是一项 Web 服务,用于通过认证控制对资源的访问,安全地控制用户如何使用资源和授权如何访问资源。通过使用 IAM 角色控制容器实例级别的访问权限,并且任务级别的访问权限也得到管理。
-
自动扩展:自动扩展是一项 Web 服务,用于扩展和缩减容器实例,自动启动或终止 EC2 实例。它可以在用户定义的策略、健康状态检查和计划中进行定义。
-
弹性负载均衡:ELB 通过自动将传入的应用程序流量分发到多个 EC2 实例和集群中的服务,实现应用程序的高故障容忍能力。
-
EC2 容器注册表:Docker 注册表服务是安全的、可扩展的且可靠的。通过 IAM 启用基于资源的权限,允许访问 Docker 私有注册表中的仓库和镜像。可以使用 Docker CLI 推送、拉取和管理镜像。
-
AWS Cloud Formation:AWS Cloud Formation 是一种方便的方式,用于创建、管理、配置和更新一组相关的 AWS 资源。Cloud Formation 脚本可以帮助以有序且可预测的方式定义 AWS 中的集群、任务定义和服务。
-
Amazon ECS CLI:Amazon ECS CLI 使用来自本地开发环境的 Docker Compose。它提供了高层次的命令,用于创建、更新和监控集群和任务。
-
AWS SDKs:SDK 支持多种编程语言,并自动处理以下任务:
-
对服务请求进行加密签名
-
重试请求
-
错误响应处理
-
Pivotal 容器服务
Pivotal 技术提供具有以下核心特性的容器服务:
-
容器化工作负载可以可靠地在私有云和公有云之间部署和运行。
-
容器编排内置高可用性、自动健康检查、监控等功能。
-
适用于需要访问基础设施原语的 Spark 和 Elasticsearch 工作负载。
-
适用于需要特定容器实例共址的应用,以及需要多个端口绑定的情况。
-
为 Kubernetes 和开源 Kubernetes 提供高效的操作性能,采用最新稳定的 OSS 版本,没有专有扩展。
-
通过 BOSH 按需配置,BOSH 是一个强大的发布工程工具链,在任何云环境中提供可靠一致的操作体验。
-
多云灵活性,能够在本地通过 vSphere 部署并使用 Kubernetes,或者在公有云中使用。
-
网络管理与安全性,通过编程方式管理基于软件的虚拟网络,提供 vSphere 和 VMC 上的开箱即用的网络虚拟化。
-
完全自动化的运维能够在没有停机的情况下部署、扩展、修补和升级系统,包括 Kubernetes 集群。
-
与 VMware 工具(如 vRealize Operations Manager、vSAN 网络存储和 Wavefront)轻松集成,实现功能齐全的本地部署。
-
Harbor,企业级容器注册服务器,是 PKS 的一部分。Harbor 扩展了开源 Docker 的功能,如漏洞扫描、身份管理以及对多个注册表的支持。
-
与 PCF 服务目录集成,轻松添加 APM 工具、数据库服务和服务代理 API。通过不断扩展的附加服务库扩展 PKS。
-
与 GKE 保持持续兼容,可以轻松将工作负载迁移到(或从)GKE。
-
PKS 构建于 Kubo 之上,这是一个由 Cloud Foundry Foundation 管理的开源项目。
Google 容器服务
Google 容器服务是一个受欢迎的选择,具有如下所列的特性:
-
Google 容器化应用管理提供多项高级功能和灵活性
-
容器引擎为容器化应用提供了一个托管环境,用于在容器集群上部署、管理和扩展。
-
Kubernetes 开源集群管理系统驱动容器集群引擎
-
提供工具和接口执行管理任务,管理、部署应用程序并设置策略
-
监控应用程序容器的状态,检查已部署工作负载的健康情况
-
计算引擎实例的负载均衡
-
集群中的节点池作为附加的灵活性子集
-
集群节点实例的自动扩展
-
集群节点软件版本的自动升级
-
节点的自动修复,以保持节点的健康和可用性
-
Stackdriver 日志记录和监控,让你能更清晰地了解集群的情况
-
集群的主节点和节点架构
-
IP 别名、身份访问管理 (IAM)、基于角色的访问等
-
IP 轮换和 IP 伪装代理
容器编排
容器编排是自动化部署多个容器以优化方式实现应用程序的过程。随着容器和主机数量日益增长,这一点显得尤为重要。编排意味着该过程的自动化,并包括多个特性:
-
主机配置
-
容器实例化集合
-
失败的容器重新调度
-
容器通过接口互相连接
-
将集群外的服务暴露给机器
-
通过增加或移除容器来扩展集群
编排工具
这里列出了一些流行的编排工具:
-
Mesos
-
Kubernetes
-
CorCos Tectonic
-
Docker Swarm
以下图像展示了按使用情况排列的仓库的流行度:
在选择编排工具时,组织需要考虑的三个关键差异化因素是:
-
抽象级别:支持基于容器的容器或服务
-
工具:编排管理及与其他服务的集成
-
架构:它如何支持可扩展性并从故障中恢复?
我们将详细讨论以下流行工具:
-
Kubernetes
-
Docker Swarm
-
Mesosphere
每个编排平台都有相较于其他平台的优势。有多个评估因素需要考虑,比如:
-
企业 DevOps 框架和编排方法论,以及 APIs
-
主机数量超过数千台物理机器
- Mesos 可以用于大型农场
-
容器是基于裸机、私有虚拟机,还是云中的?
- 对于云部署,Kubernetes 很受欢迎
-
对自动化高可用性的需求
-
Kubernetes 失败的 Pods/容器将会被复制控制器自动重新调度
-
在 Mesos 应用程序框架中,代码执行该角色,实现自动化的高可用性
-
-
服务的分组和负载均衡需求
- Kubernetes 提供了这个功能,但 Mesos 应用程序框架代码执行了这个功能
-
组织技能
-
Mesos 允许应用程序以框架的方式通过编程运行,并支持自定义编码
-
Kubernetes 更加声明式
-
-
设置编排框架的基础设施可能会面临挑战
Kubernetes
Kubernetes 是由 Google 创建的,现在与 Cloud Native Computing Foundation(CNCF)共同维护。它的概念是为容器部署跨多个领域的公共云到混合部署建立编排。
Kubernetes 使得应用程序的部署和管理更加简便,自动化了容器化应用程序的部署、扩展和管理。Kubernetes 提供了更高层次的功能,如负载均衡、通过故障转移(重新调度)实现高可用性和弹性扩展,具体如下:
-
对服务进行自动健康检查
-
自我修复,重新启动失败或停滞的容器
-
横向扩展,根据使用情况上下调整服务的规模
-
服务发现和负载均衡
-
版本控制的自动化发布与回滚
-
秘密和配置管理
-
存储编排,仅运行所需的资源
-
批量执行,声明式管理你的集群
构成 Kubernetes 的关键组件有:
-
集群是由多个节点组成的集合,这些节点可以是裸金属服务器或虚拟机,提供运行一个或多个应用程序所需的资源。
-
Pod 是在同一主机组上共存的资源,例如容器和卷。基于 Pod 的容器共享相同的网络命名空间,并使用 localhost 进行通信。Pod 是基本的调度单元,是临时的,不是为持久存在设计的实体。
-
标签是可以将它们作为一组进行管理的标签。像是分配给容器等实体,以便将其暴露为对外服务。
-
服务是基本的负载均衡器,并提供将其暴露给外部世界和其他容器的引用。
-
副本控制器负责管理 Pod 在集群中的调度。
Docker 编排工具
这里描述了 Docker 编排最常见的工具:
-
Docker Swarm:它是最易于使用的编排工具之一,仅需几条命令。它让你像启动第一个容器一样启动你的第一个集群。
-
Docker Engine:它是用于运行 Docker 容器的轻量级运行时和工具引擎。
-
Docker Machine:它负责为主机提供配置,并在其上安装 Docker 引擎软件。
-
Docker Swarm:通过将多个 Docker 主机聚集在一起,生成一个虚拟的 Docker 主机。它使得 Docker API 能够与兼容单一 Docker 主机的工具进行集成。
-
Docker Compose:适用于开发、测试和预生产环境。通过一个定义多容器应用程序及其依赖关系的文件创建部署所需的容器。
-
Apache Mesos:它被大型企业如 Twitter、Airbnb 和 Apple 采纳,因为它设计上能够扩展到数万个物理机器。Mesos 中的框架是运行在一个或多个容器上的应用程序。每个框架都可以接受 Mesos 提供的资源。与 Kubernetes 相比,Mesos 的功能较少,涉及额外的集成工作,更具程序化,定义服务或批处理作业。Mesos 还支持在 Kubernetes 节点集群中进行细粒度的资源分配:
Mesos 已被证明是高效的,其中应用与 Hadoop、Kafka 和 Spark 等其他服务协同工作。Mesos 是以下几个分布式系统的基础:
-
Apache Aurora:一个高度可扩展的调度服务,适用于长时间运行的服务和定时任务,如添加滚动更新、服务注册和资源配额
-
Chronos:一个容错的服务调度器,用于在 Mesos 中编排定时任务,作为 Cron 的替代品
-
Marathon:一个易于使用的服务调度器;通过同时运行两个 Chronos 实例,它增强了 Mesos 和 Chronos 的性能
物联网(IoT)
物联网将传感数据、大数据、网络、机器人技术和人工智能技术集成到一个先进的自动化和分析系统中。当物联网应用于任何行业或系统时,可以带来更高的透明度、控制力和性能,以交付完整的产品或服务。
物联网系统跨越多个行业,使用智能设备并启用强大的技术来增强数据收集、分析,实现更深层次的自动化、运营和通过适合任何环境的应用进行整合。
物联网的好处跨越多个业务领域,甚至生活方式,提供了改善客户参与度、技术优化、减少浪费、增强数据收集等优势。
IoT 感知的挑战如下:
-
安全性:一个由不断连接的设备组成的生态系统,通过网络进行通信,即便有安全措施,仍然是脆弱的
-
隐私:大量个人数据在用户未主动参与的情况下被捕获
-
复杂性:设计、部署和维护集成多种技术的物联网系统是一个复杂的系统
-
灵活性:拥有多个接口和锁定系统的物联网系统是紧密耦合的
-
合规性:当标准软件合规性以遵守规定为挑战时,物联网的复杂性使得监管合规问题更加棘手
物联网的最重要特性包括连接性、传感器、主动参与,以及小型设备与人工智能的结合:
-
连接性:在系统设备之间,尤其是物联网网络在更小且更廉价的规模上,新型的启用技术无需专门依赖主要供应商。
-
传感器:物联网的功能依赖于传感器,这些传感器将物联网从一个标准的被动设备网络转变为一个互动的集成系统,以应对现实世界的需求
-
主动参与:物联网引入了与连接技术的实时互动,形成了内容、产品和服务参与的新范式
-
小型设备:专门设计的小型设备扩展了物联网的功能,提供精确性、可扩展性和多功能性,且成本低廉,适合大众使用
-
人工智能:物联网本质上通过数据收集和分析与人工智能算法的结合,提升生活的各个方面
物联网 - 生态系统
物联网系统通过硬件设备(如远程仪表板、控制设备、传感器、服务器和路由桥设备)捕获数据。通过这些设备管理的关键任务和功能可以扩展到系统激活、安全、通信、动作和检测。
不同功能的多个设备传感器包括:
-
加速度计
-
磁力计
-
陀螺仪
-
声学传感器
-
压力传感器
-
湿度传感器
-
温度传感器
-
接近传感器
-
图像传感器
-
光传感器
-
气体 RFID 传感器
标准设备
标准设备,如桌面、平板电脑和手机,也与物联网集成,提供命令接口和远程管理功能。
桌面和平板电脑能够为系统及其设置提供最高级别的控制。
手机也可以提供远程功能,修改一些设置或配置。
路由器和交换机是标准的网络设备,是连接设备的关键。
数据合成
物联网系统的有效性通过数据收集、设备集成、实时分析、网络连接和通过平台、嵌入式系统、合作伙伴系统和中间件采取行动来实现。这些单个和主应用程序负责与关键业务系统的集成,如订单系统、机器人技术和物联网网络中的调度。
数据收集
数据收集软件收集并最终将所有收集到的数据传输到中央服务器。它收集各种数据,如传感器数据、测量数据,应用数据过滤、数据安全和数据聚合。通过协议,来自多个设备和传感器的数据实时连接到机器对机器网络。它还可以将分发数据反向传输回设备。
设备集成
通过依赖关系和关系集成所有连接的系统设备,构建物联网生态系统。它确保必要的合作来管理各个设备的各种应用、协议和限制,以便设备之间进行通信和稳定的网络连接。
实时分析
分析应用收集来自各种设备的实时数据输入,并将其转化为清晰的模式,供人类分析和可行的行动。信息分析和可视化技术可以扩展到特定行业需求的自动化相关任务。
应用和过程扩展
这些物联网应用集成了预定义的设备,扩展现有系统的覆盖范围,如允许某些移动设备或工程仪器访问软件,从而实现更广泛、更有效的系统,提高生产力并收集和分析更精确的数据。
技术和协议
除了标准的网络协议,物联网技术还包括 RFID、NFC、低能耗无线电协议、低能耗蓝牙、低能耗无线、LTE-A 和 WiFi-Direct,这些都支持物联网系统所需的特定网络功能。我们将回顾这些技术。
射频识别(RFID)和近场通信(NFC)是简单的低能耗连接启动和支付选项,用于身份和访问令牌。
更多关于物联网技术和协议的信息,请访问:www.tutorialspoint.com/internet_of_things/internet_of_things_quick_guide.htm
物联网 - 多领域应用
以下是物联网在多个领域的应用:
-
可穿戴电子设备:物联网智能可穿戴设备的渗透率,如头盔、手表、鞋子和眼镜
-
制造和工程行业:动态响应市场需求、设备故障、配电网络问题、客户需求、不合格产品、降低成本、优化资源利用和减少浪费
-
产品安全:避免故障、不合格产品和其他危险,避免召回,并控制不合格产品或市场上的产品分发
-
医疗应用:通过物联网应用,偏远地区的医疗保健可以得到扩展,提供与发达地区相同水平的医疗援助,支持移动诊所
-
住房、环境、健康与安全应用:也利用物联网来提升其生产力,为改善生活质量带来好处
-
交通运输应用:扩展至公路上的商用车辆、列车、无人机,提供改进的通信、控制和数据分发
-
商业农业:利用先进的生物技术,物联网实现更深入的自动化和分析
物联网开发平台
有许多物联网开发平台,集成了开发工具,支持连接性和分析,以快速开发和部署智能连接设备:
-
PTC 的 ThingWorx
-
Cisco 的虚拟化数据包核心
-
Electric Imp- Salesforce
-
GE 的 Predix
-
Eclipse 物联网
-
Contiki 是开源的
ThingWorx
提供快速开发的接口和嵌入式工具,如 Vuforia、Kepware、Composer、Mashup 构建器、存储、协作和连接性的搜索引擎:
-
Vuforia 用于现实开发
-
Kepware 用于单点数据分发,促进互操作性对齐
-
ThingWorx 代理用于工业连接
-
Composer 是设计测试的建模环境
-
Mashup 构建器是用于构建组件的仪表盘
-
SQUEL 是搜索引擎,扩展意味着搜索、查询和分析;用于数据分析和过滤
-
数据形状描述自定义事件、信息表、流和数据表的数据结构
-
Thing 模板允许新设备在大型物联网系统中继承属性
-
Thing 形状定义模板、属性或执行服务,允许开发人员避免重复定义设备属性
虚拟化数据包核心(VPC)
VPC 技术为 4G、3G、2G、Wi-Fi 和小型蜂窝网络提供核心服务,具有数据包核心服务整合、动态扩展和系统灵活性等关键特性。网络功能以虚拟化服务的形式提供,具有更大的可扩展性和更快的部署速度,同时降低了新服务的成本。它分发和管理数据包核心功能,无论是虚拟的还是物理的,覆盖所有资源:
VPC 应用更突出的是网络功能虚拟化、软件定义网络(SDN)以及通过支持低功耗、高流量的网络和广泛的小型设备的简单部署来实现快速的网络系统部署。VPC 引入了通过标准网络进行的直接通信、增强的自动化监控、通过智能标志的自动数据更新,以及原生 IP 网络和以太网供电(PoE)技术,改善了所有设备的整体安全性和服务质量。
Electric Imp
Salesforce Electric Imp 平台用于快速将设备连接到云,并通过一种名为 Squirrel 语言的高级、面向对象、轻量级脚本语言开发应用程序。应用程序由两个模块组成:
-
设备模块运行在设备上
-
代理模块运行在 Electric Imp 云端
Electric Imp 平台通过模块间的简单调用,确保安全的通信消息传递,并为设备交互、监控和响应提供标准的 Web 应用开发代码,语法简单易学。
Predix
通用电气 (GE) Predix 是一个工业仪器的软件平台。它是基于云的 平台即服务 (PasS),数据收集平台用于支持工业级分析。它以简单的方式连接工厂数据、个人和设备,以优化操作和性能管理。Predix 生态系统由英特尔 Edison 处理器模块、双核板和树莓派板组成。开发人员提供 IP 地址、以太网连接和电源,自动建立连接,注册到中央 Predix 系统,传输来自传感器的数据。
Eclipse IoT
基于开源技术的 Eclipse IoT 是一个由行业和学术界等实体组成的生态系统,创建开源框架和服务,用于 IoT 解决方案,开发 IoT 开发人员使用的工具,开源实现 IoT 标准技术。以下是一些实用工具:
智能家居
Eclipse IoT 的主要服务智能家居是构建智能家居解决方案的框架,集成了多种协议和标准,适用于异构环境。它通过统一的设备和信息访问促进设备之间的交互,包含部署在 OSGi 运行时中的 OSGi 服务的 OSGi 捆绑包。OSGi 捆绑包是包含文件内容、增强类行为的服务以及作为组件的聚合特性等信息的 Java 类组及其他资源的 manifest 文件。
Eclipse SCADA
Eclipse 最先进的开源 SCADA 系统旨在通过共享通信系统将各种工业仪器连接起来,以进行数据后处理。所采用的技术包括 Shell 应用程序、JDBC、Modbus TCP 和 RTU、Simatic S7 PLC、OPC 和 SNMP。该 SCADA 系统具备通信服务、监控系统、档案存储和数据可视化功能,用于开发定制解决方案。
Contiki
开源操作系统 Contiki 提供了用于小型 IoT 设备的功能,用于管理程序、进程、资源、内存和通信。其生态系统包括操作系统、网页浏览器、Web 服务器、计算器、Shell、Telnet 客户端和守护进程、电子邮件客户端、VNC 查看器和 FTP。
它在学术界、组织研究人员和专业人员中非常受欢迎,因其非常轻量化,十分适合内存、功耗、带宽和处理能力有限的设备,运行所需空间仅需几千字节,且占用空间不超过 30 KB。
Contiki 通信
Contiki 支持的标准协议,以及为 IoT 启用的协议包括:
-
uIP (针对 IPv4):此 TCP/IP 支持 8 位和 16 位微控制器。
-
uIPv6 (针对 IPv6):uIP 的扩展是完全符合 IPv6 标准的。
-
Rime:此工具集为低功耗系统提供一组原语,并在 IPv4 或 IPv6 不适用时提供替代协议栈。
-
6LoWPAN:这是低功耗无线个人局域网上的 IPv6。它是一种低数据速率的无线压缩技术,支持具有有限资源的设备。
-
RPL:这种距离矢量 IPv6 协议可以在 LLNs(低功耗和丢包网络)复杂网络中找到最适合的路径,以适应不同能力的设备。
-
CoAP:这种协议适用于需要重度远程监督的简单设备。
动态模块加载
动态模块加载器加载、重定位并链接 ELF 文件,以便在运行时加载和链接,支持环境以支持部署后应用行为的变化。
Cooja 网络模拟器
Cooja Contiki 网络模拟器生成用于工作 Contiki 和通过 Cooja 模拟器控制系统的编译。
IoT 设备、安全性、合规性和维护是采用时必须彻底考虑的重要特性。
微服务
这是一种架构模式,通过将业务能力实现为松耦合的服务来组织结构,使组织能够在持续交付/部署大型复杂应用的过程中发展其技术栈。
微服务核心模式
微服务架构是与单体架构相比的核心区别。
单体架构基于构建服务器端企业应用的独特需求。它必须支持多种客户端,例如桌面和移动浏览器,向第三方公开,并通过 Web 服务或消息代理与其他应用程序集成。业务逻辑通过处理 HTTP 请求和消息与数据库交互,并返回 HTML/JSON/XML 响应:
与这种架构相关的挑战包括:
-
大型单体代码库难以维护,模块化随着时间推移而逐渐崩溃,因为没有明确的模块边界;因此,随着时间的推移,实现更改变得繁琐。
-
过载的 IDE:IDE 的响应速度越慢,代码库越大,生产力就越低。
-
过载的 Web 容器:应用程序越大,容器启动的时间就越长,部署也会降低开发者的生产力。
-
持续部署是困难的:大型单体应用程序频繁部署更新是一个挑战。用户界面需要进行迭代开发并频繁重新部署,重新部署的风险也在增加。
-
扩展应用程序可能很困难:单体架构只能通过运行更多副本来在一个维度上扩展,以应对增加的事务量,动态调整实例数量以应对负载。然而,当数据量增加时,架构无法扩展。每个应用实例副本将访问所有数据,导致缓存效率降低,内存消耗和 I/O 流量增加。在单体架构扩展中,针对不同资源需求(如 CPU 密集型和可能的内存密集型)的每个组件独立扩展将面临挑战。
-
开发扩展的障碍:单体应用程序阻止团队独立工作,因此 UI 团队、财务团队、库存团队等之间必须进行协调开发。一旦应用程序达到一定规模,涉及多个团队的开发将成为扩展的障碍。
-
长期承诺技术栈:单体架构可能会绑定到某个技术栈,当使用更新的技术框架进行升级时会变得繁琐。如果平台框架随后变得过时,那么采用新的平台框架并重写整个应用程序可能会是一个风险较大的提案。
微服务架构
微服务是一组松散耦合的协作服务,是应用程序的构建模块。每个服务实现一组狭义相关的功能,如订单管理和客户管理服务。这些服务通过同步协议(如 HTTP/REST)或异步协议(如 AMQP)进行通信。服务是独立开发和部署的,每个服务都有自己的数据库,与其他服务解耦,确保数据一致性。
微服务架构的推动因素有:
-
快速构建应用程序,易于理解、维护和持续部署。
-
可扩展性和可用性,能够在多台机器上运行,多个应用副本
-
采用新兴技术,如框架、编程语言等
基于这种架构构建的应用程序可能包含多个组件,例如 StoreFrontU 实现用户界面、后端服务检查信用、维护库存和发货订单。这些组件能够接收客户订单、检查库存、信用可用性并发货:
该解决方案具有多个优势:
-
每个微服务相对容易理解,可以更快速地构建和部署;集成开发环境(IDE)更加高效和生产力更高
-
每个服务可以由各自的团队开发,并且可以独立部署其他服务
-
新版本的频繁部署变得更容易
-
改进的故障隔离,任何服务的内存泄漏只会影响该服务,其他服务将继续处理请求,不受影响
-
灵活地采用新的技术栈
基于微服务的解决方案面临的挑战包括:
-
创建分布式系统的复杂性,涉及多个服务事务。
-
IDE 支持和测试困难,包括协调多个服务之间的团队间通信机制。
-
部署/运维复杂性,管理一个由多种不同服务类型组成的系统。
-
增加的内存使用:微服务架构运行其自己的虚拟机以隔离实例。如果有 M 个实例,就会有 M 倍的虚拟机,从而增加了开销。
微服务决策
微服务架构更适合规模较大、复杂的应用,而不是适用于小型或初创应用程序,在这些应用中,单体架构更为合适。微服务架构将应用结构化为一组松散耦合的服务,从而通过实现持续交付/部署来加速软件开发。
微服务决策基于以下原则:
-
基于业务能力的微服务
-
基于子域的微服务
-
面向对象设计(OOD)
-
单一责任原则(SRP)
-
公共封闭原则(CCP)
微服务架构——服务必须经过充分规划,以便由小团队开发并且易于测试。单一责任原则(SRP)是服务设计的基础,用于定义类的责任以及触发更改的原因。它创造了服务的内聚设计,并实现了一小组紧密相关的功能。公共封闭原则(CCP)意味着因相同原因而变化的类应该放在同一个包中。如果两个类在不同方面实现了相同的业务规则,那么任何业务规则的更改只需对代码做出少量修改即可适应。
微服务应该对应于业务能力/业务对象,以产生价值:
-
库存管理
-
订单管理
-
交付管理
对应的微服务架构将把服务与这些能力对齐。遵循这种模式有以下优点:
-
业务能力相对稳定,因此架构也是如此。
-
开发团队基于跨职能、自治和组织方式交付业务价值,而非技术特性。
-
服务松耦合且内聚
识别业务能力,因此识别服务需要对业务有深入了解。通过分析组织的目标、业务流程、结构和专长领域,识别组织的业务能力和服务。
组织结构可以基于领域驱动设计(DDD)的子域或业务能力组。DDD 与应用程序的问题空间相关,作为领域标准;例如,按地区、领域、位置等基础组织的业务组。
一个域由多个子域组成。业务的不同部分对应子域,如:
-
核心子域:关键的业务差异化,是应用程序中最重要的部分
-
支持:不是关键的业务差异化,可以内部实现或外包
-
通用:非业务特定,使用现成软件实现
在线商店应用程序的子域可以如下:
-
产品目录
-
库存管理
-
订单管理
-
交付管理
相应的微服务架构将有与以下子域对应的服务:
微服务部署模式
服务的指导原则如下:
-
可以为服务使用各种语言、框架和框架版本
-
每个服务有多个服务实例,以提高吞吐量和可用性
-
独立部署和可扩展的服务
-
服务实例之间相互隔离
-
更快的构建和部署能力
-
服务消耗的资源(CPU 和内存)应该受到限制
-
每个服务实例应该对监控行为透明
-
服务的可靠且具成本效益的部署
-
应用程序度量和健康检查 API
-
审计日志和合规性
-
分布式追踪和管理
-
异常跟踪和管理
-
日志聚合、日志部署和变化
-
服务组件测试和服务集成契约测试
-
UI 组成(服务器端页面片段,客户端 UI)
-
安全性——基于 JSON Web Token 的访问令牌,安全地识别请求方到各个服务
分布模式
-
每个主机的多个服务实例,如在物理或虚拟主机机器上运行的不同服务的多个实例
-
在共享主机上部署服务实例
-
将每个服务实例部署为一个 JVM 进程,每个服务实例对应一个进程
-
在同一 JVM 中部署多个服务实例
-
避免资源要求或依赖版本冲突
-
每个虚拟机的服务实例
-
服务实例与每个容器关联
-
服务器无关的部署选项如下:
-
AWS Lambda
-
Google Cloud Functions
-
Azure Functions
-
微服务底盘
-
外部化配置,用于凭证管理和外部服务(如数据库和消息代理)的网络位置
-
日志记录:使用如 log4j 或 logback 等日志框架
-
健康检查:通过基于 URL 的监控服务确定应用程序的健康状况
-
度量:应用性能的测量和洞察
-
分布式追踪:通过带有仪器代码的服务追踪服务之间的唯一标识符
例如:
-
Java:
-
Spring Boot 和 Spring Cloud
-
Dropwizard
-
-
Go:
-
小工具
-
微服务
-
Go kit
-
通信模式
微服务中使用的各种通信类型如下:
-
远程过程调用(Remote Procedure Invocation),用于服务间通信,客户端请求通过以下服务进行列出:
-
REST
-
gRPC
-
Apache Thrift
-
-
通过以下通道以异步模式传递来自客户端的消息请求:
-
Apache Kafka
-
RabbitMQ
-
-
特定领域协议:
-
用于电子邮件的协议,如 SMTP 和 IMAP
-
用于媒体流传输的协议,如 RTMP、HLS 和 HDS
-
数据管理选项
用于微服务的数据管理过程的各种模式列举如下:
-
每个服务使用单独数据库确保服务松耦合,每个服务可以选择最适合的数据库类型。
-
共享数据库有助于开发人员使用 ACID 事务来确保数据一致性,开发者对此非常熟悉且直观。
-
事件溯源将业务实体的状态持久化为一系列更改状态的事件。当业务实体的状态发生变化时,一个新事件会附加到事件列表中。
-
事务日志尾随。
-
数据库触发器将事件插入到 EVENTS 表中,供一个单独的进程轮询并发布这些事件。
-
应用事件。
API 接口
微服务中使用的不同 API 如下:
-
桌面和移动浏览器的用户界面基于 HTML5/JavaScript
-
服务器端 web 应用程序生成 HTML
-
原生 Android 和 iPhone 客户端通过 REST API 与服务器交互
-
通过 REST API 在线暴露细节的第三方应用程序
应用程序编程接口(API)网关协议的使用
下图展示了后端为前端 API 的使用:
服务发现
微服务应用程序的设计是,服务的实例数量及其位置会动态变化,在虚拟化容器环境中运行,因此与服务发现相关的典型问题在这里展示:
客户端发现通过特定位置(主机和端口)暴露远程 API,如 HTTP/REST 或 Thrift,每个服务实例都有一个位置:
服务器端发现通过路由器(即负载均衡器)向服务发出请求,路由器运行在一个已知位置(如服务注册中心),该路由器查询并将请求转发到可用的服务实例:
总结
本章涵盖了不同供应商提供的容器和版本相关话题,
虚拟化方法、容器编排、物联网以及微服务应用程序和架构。
第十章:数字化转型中的 DevOps
在本章中,我们将探讨数字化转型之旅,重点是 DevOps 在大数据迁移、云迁移、微服务迁移、数据科学、身份认证安全和物联网(IoT)等系统中的应用。
将涵盖以下主题:
-
数字化转型
-
大数据中的 DevOps
-
云计算中的 DevOps
-
微服务中的 DevOps
-
数据科学中的 DevOps
-
身份认证系统中的 DevOps
-
物联网中的 DevOps
数字化转型
数字化转型之路对每个公司都是独特的,因此定义也会有所不同。从广义上讲,它是指通过采用和集成数字技术,将业务操作进行根本性转变,以便为客户提供价值。
为了实现这一目标,企业需要培养一种文化,持续挑战长期建立的流程现状,并常常进行实验,采用相对较新的、不断发展的实践。
这次数字化旅程的激励因素如下:
根据 Forrester Research 的报告,高管们预测到 2020 年,近一半的收入将由数字化驱动。
根据麻省理工学院数字商业中心的研究,那些拥抱数字化转型的公司比同行业的平均竞争者盈利能力高出 26%,并且市场估值高出 12%。
研究表明,九成 IT 决策者认为遗留系统阻碍了他们利用所需的数字技术来推动增长和提高效率。
他们的客户和内部员工将全力支持他们,因为数字化实践已经深入人们的生活各个方面,比如通过移动设备在线购物和远程调节家中的暖气系统。
数字战略的采纳应视为一种持久的文化和技术变革,而非战术手段。它是对软件平台和架构、开发方法、技术、业务流程、角色和职责的重新评估。这是渐进的、逐步的、反复迭代的,而不是革命性的或破坏性的。它关注的是组织与变革的对接,而不仅仅是首席信息官(CIOs)单方面推动以应对竞争。
成功数字化旅程的步骤如下:
-
为组织制定数字战略
-
人员参与和技术同样重要
-
遗留架构转型
-
现代化遗留流程和态度
-
使用移动设备作为变革的催化剂
-
利用应用程序接口(APIs)的强大功能
-
规划保持安全
数字化转型框架根据组织的具体挑战和需求有很大的不同。商业和技术领导者在进行数字化转型时常引用以下共同主题,帮助他们制定自己的数字化转型战略:
-
客户体验
-
操作敏捷性
-
文化和领导力
-
劳动力赋能
-
数字技术集成
组织数字化转型文化的转变,是由 IT 角色的根本变化所推动的。
Harvey Nash 和咨询公司 KPMG 的最新报告发现,CEO 们关注的是能够赚钱的 IT 项目(63%),而不是节省成本的项目(37%)。
Forrester 的研究表明,CIO 平均将 72%的预算花费在现有 IT 问题上,而只有 28%的预算用于新项目和创新。
在过去四年里,长期以来的 CIO 优先事项在相对重要性上的变化最大。例如,提高运营效率下降了 16%,而提供稳定的 IT 性能下降了 27%。
The Weather Company 的 CIO Bryson Koehler 表示,当你将 IT 从“运行我们买来并已部署的封装解决方案”转变为“构建和创造以前不存在的新能力”时,工作思维方式会发生很大的变化。
Marc Carrel-Billiard,埃森哲数字化转型全球技术研发负责人,在 TechCrunch 的文章中引用的话说,找到帮助人们跨越数字鸿沟、应对快速变化所带来的文化冲击的方式,将和我们用来实现这些目标的技术一样重要。
美国联邦通信委员会 CIO David Bray 博士谈到这种文化转变如何为转型奠定基础:在人类历史中,我们能够用工具做的事情改变了我们作为人类能够做的事,进而改变了我们作为文化能够做的事。Bray 说,我们物种之所以“聪明”,是因为我们知道如何协作使用工具。归根结底,当我们谈论技术变革——无论是万物互联、大数据,还是机器学习——它首先是关于人和组织文化的。然后,才是这些人如何共同完成任务——这才是当你谈论转型组织文化时的核心内容。
Nextgov 报道,大约四分之三的联邦政府每年在信息技术上的 80 亿美元支出,仅仅用于维持传统系统的运行。
根据 Tiger Text 的研究,并结合 HIMSS Analytics 的研究,在医疗行业中,尽管智能手机和其他移动设备在医疗服务提供者中广泛使用,但 90%的医院仍然使用寻呼机,并且为了维持传统寻呼服务,支付费用超出了 45%。
公司不再仅仅为了节省成本和运营而开发软件或管理 IT,而是 IT 已经成为推动商业创新的主要推动力和引擎。为了适应这种转变,公司角色需要与 IT 在日常体验中的影响进行重新对齐。在推动数字化转型战略时,尽管 IT 会发挥重要作用,但与数字化转型的实施和适应相关的大规模变化是每个人的责任。数字化转型主要与人有关,比如淘汰过时的流程和遗留技术,转而采纳敏捷原则,并推动全公司范围的现代化。
大数据与 DevOps
那些倾向于将 DevOps 视为纯粹的过程成熟度、而将大数据视为技术流的组织,往往会将它们割裂开来,从而导致低效。DevOps 的目标是使软件生产和交付更高效,将数据主题纳入持续交付流程的范围,并拥抱 DevOps,将成为组织成功的重要资产。许多 IT 领导者现在面临着更大的压力,需要为大数据和数据科学项目的投资取得成果。大数据项目变得越来越具有挑战性。随着大数据项目中的应用程序的出现,迫使分析科学家重新设计他们的算法。分析模型的重大变化会迅速带来资源和基础设施的调整。如果操作团队未能参与其中,整个过程就会放慢,从而抵消大数据分析所提供的竞争优势,也突显了 DevOps 协作的必要性。
在大数据项目中,需考虑的三个主要组件是:
-
确保事物是可靠的
-
确保事物具有可扩展性
-
确保它们的性能
大数据项目最具挑战性的方面是性能,需要处理成百上千台计算机,处理庞大的数据集,处理快速变化的数据,同时还要处理多个任务和人员。这些变量的组合使得性能对于大数据系统至关重要。
通过整合大数据和 DevOps,组织可以实现以下好处。
有效地规划软件更新
软件与数据密切互动,因此在更新和重新设计应用程序时,必须了解数据源的类型。与数据专家和程序员合作并编写新代码,有助于从数据的角度有效地规划更新。
降低错误率
数据处理问题占据了软件开发和测试错误的主要份额,复杂的应用程序和其处理的数据种类繁多,增加了出错的机会。DevOps 原则中的向左测试强调在开发周期的早期阶段进行代码变更测试,这也称为开发周期的左部分。这一过程通过 DevOps 实践得以实现,推动了持续集成过程中的进一步自动化。数据团队与 DevOps 团队之间的紧密合作对于避免应用程序中的数据相关错误,尤其是在持续交付和部署过程中至关重要。
开发环境与生产环境的一致性
大数据和 DevOps 团队共同合作并参与软件交付过程,可以帮助理解在快速构建应用程序以模拟现实世界行为的开发和测试环境中,所涉及的数据挑战。现实世界中的数据类型和多样性可能存在巨大的差异;DevOps 推荐非数据专家也要参与这一过程。
来自生产环境的快速反馈
持续交付过程包括在软件发布后从生产环境中收集度量数据,以分析优缺点并规划进一步的更新。让数据团队参与监控和维护生产中的软件,分析与生产相关的数据,如应用健康统计(CPU 时间、内存使用等),可以帮助组织更好地理解用于持续交付的 DevOps 链。
大数据项目的敏捷性
一个敏捷的环境有助于适应性流式传输,而进化开发有助于软件流之间的流动。企业将他们的大数据和数据科学项目迁移到公共云服务,以便能够更加灵活地在几分钟内启动虚拟的 Hadoop 或 Spark 集群。正如我们在前面章节中所看到的,DevOps 的采用为项目和企业带来了敏捷性。
大数据即服务
DevOps 对大数据的好处可以通过使用 Docker 容器来扩展,提供大数据即服务。数据科学家通过自服务,可以迅速启动集群并使用大数据工具,如 Hadoop、Spark 等。
为 DevOps 采用的大数据处理流程包括:
-
ETL
-
分析
-
可视化
-
安全性/Kerberos
-
数据科学
-
监控
大数据涉及将大量数据从源系统迁移到目标系统;这一过程需要适当的设计、数据提取、数据加载、数据验证和数据清洗来完成。接下来讨论的方法论以及 DevOps 流程,有助于即使是面对大量数据,也能在短时间内完成预期的迁移。
大数据的格式和种类可以是结构化、半结构化和非结构化数据,这些数据来自社交媒体、机器数据、服务器日志等,涵盖了包括医学、生物学、物理学、医疗监控、天体测量学、交通运输和制造业等多个领域。
大数据实现有多种选项和处理方法,如下所述,用于评估并采纳 DevOps,既适用于应用程序,也适用于基础设施。
ETL 数据模型
提取、转换 和 加载 (ETL) 是将数据从源系统提取、通过业务逻辑进行转换,并加载到系统中供业务使用的过程。数据模型和架构是根据输入和输出数据的业务规则构建的。
还有一种叫做 提取、加载 和 转换 (ELT) 的模型,其中数据以原始形式加载到暂存层,随后应用转换、业务逻辑和规则,以便后续的业务使用。
方法论 1
该方法论包含以下八个步骤:业务影响分析、发现、映射与设计、迁移计划的创建、资源配置、迁移前测试、迁移与切换、以及迁移验证:
-
业务影响分析 是识别迁移过程中业务和操作需求
-
发现 阶段是关于收集数据源、迁移硬件和软件环境的详细信息
-
映射与设计 阶段确定数据将如何以及在哪里迁移
-
迁移计划的创建 是规定客户期望和项目交付物的蓝图
-
资源配置 为数据托管准备目标存储环境
-
迁移前 测试 测试并验证迁移组件
-
迁移与切换 是指数据从源到目标的迁移
-
迁移验证 确认在迁移后环境中满足所有预期要求
方法论 2
该方法论确保在数据迁移到目标系统之前,数据得到适当的评估、审查和恢复。
-
评估 阶段分析源类型、介质状态和工作量估算
-
审查 阶段评估客户需求和标准,以及目标系统
-
恢复 阶段识别并恢复单个文件,并在数据提取过程前恢复数据
-
迁移 阶段对恢复的数据进行索引和去重,并将数据迁移到目标系统,交付给客户
方法论 3
该方法论专门用于处理诸如数据库迁移准备阶段、迁移阶段、ETL 阶段和应用程序阶段等方法。
-
迁移准备阶段 创建业务案例、评估风险、创建参与模型、评估数据库环境、基础设施规划,并包括硬件和软件。
-
迁移阶段根据业务目标分析当前数据库和目标数据库的设计。它构建数据库对象,如表、视图和触发器。它进行数据迁移;优先迁移路线图验证数据库模式,并验证数据是否正确迁移。
-
提取、转换和加载阶段设计和开发 ETL 包,以处理并行数据加载,验证技术准确性、功能性和安全性,并测试数据加载性能。
-
应用阶段进行应用程序集成测试和用户验收测试,以便在生产环境中实施。
方法论 4
这是由 Gershon Pick 提出的,包含四个步骤:
-
需求/架构阶段定义高级需求,如数据、性能需求,以及详细的项目计划。
-
详细规范阶段定义转换、验证和结构变更。
-
构建/测试阶段构建迁移解决方案并进行测试。
-
执行阶段确保目标系统验证结果以便在生产中实施。
方法论 5
这是由戴尔公司提出的,包含五个步骤:规划、生产前测试、迁移、验证和切换。
-
规划阶段定义迁移目标和要求,创建迁移计划,定义硬件/软件和工具。
-
生产前测试阶段测试迁移环境,收集并验证数据。验证硬件/软件及迁移工具,并更新最终迁移计划。
-
迁移阶段安装迁移软件,并根据计划执行迁移。
-
验证阶段验证迁移是否完成,收集迁移统计数据,并准备迁移报告。
-
切换将应用程序迁移到目标环境,并创建最终报告。
方法论 6
该方法论有八个步骤,解释了迁移过程中常见和必要的步骤。
-
业务影响分析:数据是增强业务流程的基础和重要方面。此步骤分析客户对业务的需求。
-
信息收集阶段收集有关源系统和目标系统的详细信息。软件和硬件信息的收集可以是手动的,也可以是自动化的过程。
-
映射与设计阶段映射源系统和目标系统,维持两种设计布局。一个是源和目标布局相同,另一个是源和目标模式不同的中继布局。
-
迁移计划阶段考虑业务和操作约束条件,迁移数据及其属性,并为此过程提供工具。
-
供应阶段复制源文件结构、数据卷和属性,为环境接收实际数据流做准备。
-
测试迁移阶段确保所有假设是有效的,工具也适合,以最小化时间和资金浪费的风险。
-
迁移阶段确定数据从源头到目的地的移动方式,包括两种可能性:将数据移出路径或进入路径。
-
验证阶段检查数据访问、文件权限和目录结构,以验证应用程序的正常运行。
正如我们所讨论的,整个大数据迁移过程的每个阶段,从 ETL、分析到可视化,都可以作为一个过程方法论来分析,并在每个阶段应用 DevOps 成熟度和工具,以提升性能和生产力。
云迁移 - DevOps
如果云迁移操作不当,成本可能会非常高。与本地环境相比,应用程序在云端的表现不同,特别是对于复杂的应用程序来说,成熟的测试策略能带来不同的结果。在迁移过程的每个阶段引入 DevOps 方法论,肯定能为多方面价值的提升做出贡献。这里详细介绍了云迁移的每个阶段,并根据组织的需求,采用 DevOps 策略来处理应用程序、基础设施和工具。
在将应用程序迁移到云时,需要考虑以下几个方面:
-
应用可行性:这是应用程序的架构兼容性,是否适合云托管。
-
外部/内部依赖:需要理解应用程序如何在云端访问内部和外部依赖。
-
应用类别:从业务角度来看,高需求的应用程序被归类为业务关键型和业务部门应用,要求具备高可用性。
-
应用集成:这验证了应用程序与其他本地应用程序和共享服务的性能。
-
可扩展性/弹性:应用程序设计支持云端的可扩展性。
-
合规性遵守:这保障了企业级合规性、法规和治理,适用于迁移或存储在企业场外的数据。
-
投资回报率:这有助于将应用程序托管在云端,使企业更加节省成本。
-
安全性:迁移到云后,可以提供与之前相同级别的安全性:
-
数据安全
-
身份验证
-
授权
-
-
数据库兼容性:现有数据库受支持,且与云兼容。以下是迁移应用程序到云时保持应用数据的几种方式:
-
本地部署数据库
-
在虚拟机上创建数据库
-
Windows 数据库(PaaS)
-
迁移策略/方法
迁移决策需要考虑多个因素:
-
UI 分析:UI 界面将进行分析,以便在 PaaS 模型中迁移到云。基于 Web 的本地应用程序和服务可以重新工程化以适应云服务,而本地非 Web 应用程序则需要重建以根据需要迁移到云。此外,与云兼容的第三方框架/类库可能需要一些修改或重新编写。使用 IaaS 模型时,整个服务器镜像将被迁移,云之间的代码更改最小。
-
身份验证和授权:应用程序中的身份验证机制将进行兼容性分析,如使用基于表单的身份验证和访问控制服务,或 ACS 与企业本地 Active Directory 集成。
-
与其他模块/应用程序的交互:
-
Web 服务:这些服务可以作为 Web 角色或工作角色托管,保留为本地服务,并通过 API 暴露
-
原生代码:可以创建并部署托管包装包
-
第三方依赖:这些依赖项已验证可以直接从 Web 服务中消费
-
-
诊断支持:此项实现自定义日志记录并将日志信息保存到存储表中:
-
将事件日志推送到诊断存储
-
将失败的请求日志推送到诊断存储
-
将性能计数器数据推送到诊断存储
-
-
其他事项
-
消息队列:用于消息发布和订阅模型的订阅
-
配置变更:应用程序不应硬编码物理磁盘或网络访问值
-
检查任何第三方库或内容引用
-
替换静态值和应用程序状态以处理可扩展性应用程序
-
应用程序日志:这是自定义日志的捕获和存储管理
-
-
数据迁移策略:应用程序迁移策略应与数据迁移策略同步进行,因为大多数应用程序都是以数据为中心的。应用程序可以将数据存储在磁盘、数据库或网络存储中;然而,从本地迁移到云时,要求用户在数据上看不到任何不一致。
云提供了将数据以与本地应用程序中存储方式相同的方式持久化的灵活性。云托管的应用程序数据可以通过多种方式保存:
-
-
从本地数据库迁移到云数据库
-
静态内容迁移到云存储
-
消息队列迁移到云队列存储/服务总线队列
-
-
迁移执行:
-
从本地迁移到云的 Web 应用程序是按组件分步规划的,独立进行
-
接下来的章节将解释 PaaS 和 IaaS 选项的迁移过程
-
-
缩写描述
-
访问控制服务(ACS)
-
Active Directory 联合身份验证服务(ADFS)
-
基础设施即服务(IaaS)
-
平台即服务(PaaS)
-
迁移到微服务 - DevOps
DevOps 原则和方法非常适合微服务,而微服务的迁移涉及架构、API 和代码开发。这些都会在代码版本控制系统、持续集成、构建、测试系统中进行,直到持续部署。
从单体架构重构到微服务可以通过多种方式进行。这里列出了三种主要策略。
策略 1 - 独立微服务
向单体应用中实现新功能应当作为新的代码添加,而不是将其直接添加到单体应用中,以避免应用变得更为臃肿。下图展示了应用此方法后的系统架构:
在新架构中,新服务和遗留单体应用共存。这里有两个通信组件。请求路由器处理传入的(HTTP)请求,类似于 API 网关;路由器将请求发送到新的功能服务,将遗留请求路由到单体应用。
glue 代码是将服务与单体应用集成的第二个组件。服务需要访问数据以读取和写入单体应用所拥有和处理的数据,glue 代码可以驻留在单体应用、服务或两者中。
服务访问单体数据有三种策略:
-
调用单体应用的远程 API
-
直接访问单体应用的数据库
-
服务维护自身的数据副本,并定期与单体的数据库同步
glue 代码是用于在两种不同模型之间进行转换的重要功能。glue 代码维护其自身的原始领域模型。glue 代码必须防止其自身的模型被遗留的单体应用的领域模型污染;因此,它也被称为反腐层(anti-corruption layer)。
以轻量级服务的方式实现新功能的方法具有以下优点:
-
新功能/服务可以独立开发、部署和扩展,而不与单体应用绑定。
-
新创建的服务扩展了微服务架构的优势
-
它防止单体应用变得更为臃肿且难以管理
策略 2 - 分离前端和后端
这一策略是将单体应用中的表现层与业务逻辑层和数据访问层分离。
企业应用至少包括以下三个不同的层:
-
表现层:这是一个复杂的用户界面,包含大量代码;它处理基于 HTML 的 Web UI 或(REST)API 等的 HTTP 请求。
-
业务逻辑层:包含应用的核心业务规则组件。
-
数据访问层:访问数据库和消息代理等基础设施组件
在单体模式中,层之间的角色和责任划分是展示逻辑和业务及数据访问逻辑。业务层封装了具有粗粒度 API 的业务逻辑组件。这是一个自然的过程,可以通过将单体分成两部分来扩展为微服务架构。一部分包含展示层,另一部分包含业务和数据访问逻辑层。然后,展示逻辑部分或应用程序会远程调用业务逻辑应用程序或部分,如下图所示,展示了变更前后的架构。
主要的好处是使两个应用程序部分能够独立启用、开发、部署和扩展,例如从展示层分离的用户界面,以便可以进行迭代和快速开发与测试;这种方法的另一个好处是为微服务公开远程 API。
在这种情况下,三个层都是庞大的单体组件。这种策略只是一个部分解决方案,因此将探索下一种策略。
策略 3 - 提取服务
将现有的单体模块转化为独立的微服务是第三种重构策略。在这个过程中,每次提取一个模块并将其转化为服务时,单体逐渐缩小。通过足够的模块转换,单体不再是问题,完全消失,或者变得足够小以成为另一个服务。
优先选择要转换为服务的模块
促使此过程顺利进行的几个因素如下:
-
从一些易于提取的模块开始
-
确定将提供最大收益的模块
-
确定频繁变更的模块
-
按照收益或变更频率对模块进行排序
-
与单体应用中的其他模块相比,具有独特资源需求的模块,例如需要内存速度或计算密集型算法的模块,需要在专用机器上运行,以便快速、轻松地扩展应用程序
-
具有现有粗粒度边界的模块更容易且成本较低地转化为服务;例如,作为一个仅通过异步消息与其他应用程序通信的模块
采用这种方法后,一个复杂的单体应用程序,包含数十个或数百个模块,可以方便地逐个提取为微服务模块,然后该服务可以独立于单体进行开发和部署,从而加速开发进程。
提取模块的过程
提取模块的初始阶段涉及在模块与单体应用程序之间创建粗粒度交互,作为单体架构与服务之间的数据交换双向 API。根据复杂的依赖关系和细粒度交互模式,实现模块与应用程序其他部分的交互将具有挑战性。
基于领域模型模式的业务逻辑,具有大量的领域模型类依赖关系,可以通过代码更改进行调整。将粗粒度模块转换为一个独立的服务,通过进程间通信(IPC)API 进行通信,从而实现单体架构与服务的连接。
在重构之前、期间和之后的架构如下所示:
在最初的架构中,如前面图表的左上角所示,输入过程流是从模块 X到模块 Z。然后,模块 Y使用模块 Z的输入。
阶段 1
-
重构阶段定义了一对粗粒度的 API。
-
初始接口是来自模块 X的输入,调用模块 Z。
-
模块 Z的输出接口被用来调用模块 Y。
阶段 2
-
在这个重构阶段,模块被重新构建为一个独立的服务。
-
进出交互通过结合模块 Z与处理服务发现的微服务框架,使用 IPC 机制代码实现。
-
在提取模块后,服务可以独立于单体架构和其他服务进行开发、部署和扩展。
-
该服务可以通过 API 代码重新编写,作为一种反腐层,负责在两个领域模型之间进行翻译,从而将服务与单体架构集成。
-
每个提取的服务都是朝着微服务方向的一次进步;随着微服务数量的增加,单体架构将逐渐缩小。
应用现代化
微服务的采用是将现有应用程序迁移到现代平台的一种应用现代化形式。这是逐步规划的,并不是从零开始重写代码。正如我们所见,这一策略涉及将展示层组件与业务和数据访问组件分离,将现有模块转换为服务,并作为微服务实施新功能和特性,从而提高应用程序的敏捷性和性能。
架构迁移方法
Forrester Research 和 InfoWorld 提出了一个面向微服务的四层参与/架构平台。这个架构模型采用了计算和移动设备渗透的变化,用于应用程序开发。
最主要的考虑因素是决定微服务架构,并在优化之前设计服务的交互。
微服务的四层方法被拆分为以下不同的层级:
-
客户端层:这是基于移动客户端和物联网的客户体验
-
交付层:通过监控用户选择来优化用户体验,根据设备个性化内容
-
聚合层:这将数据从服务层聚合并进行数据协议转换
-
服务层:这是指使用内部现有的数据服务或外部服务,如 Twilio 和 Box
最大的区别是客户端层的分离;基于与用户的实时交互,底层的层次结构可以不断变化。
采用微服务的策略可以总结为以下三个步骤:
-
组件化:从现有应用中识别组件,并基于试点方案创建微服务实现
-
协作:基于从试点阶段获得的经验教训,与团队中的利益相关者、程序员和开发人员共同评估新的流程和倡议
-
连接:将微服务应用于现实场景
数据耦合
微服务架构是松耦合的,数据通常通过 API 进行通信。一个微服务甚至可以只运行小量代码,但专注于管理单一任务。
松耦合基于以下方面:
-
范围边界已定义并内建智能。
-
智能功能与消息传递功能分离。
-
与类似功能的微服务兼容,并能够容忍各种修改;变更不是强制的,也不需要协调。
-
服务通过 API 解耦,给予它们自由和灵活性。API 是服务的契约,规定了服务提供的内容以及程序依赖于它们的方式。
微服务可扩展性
根据此列出的架构可扩展性模型,这些可以包括:
-
功能分解(Y 轴扩展)
-
数据分区(X 轴扩展)
-
单个服务的横向扩展(X 轴扩展)
架构和实现考虑的最佳实践
迁移到微服务是一种策略,需要逐步规划,具体如下:
-
在单体应用中分离类
-
识别具有 CRUD 风格接口的类以及其他业务方法
-
识别与其他类无依赖关系的孤立类,除了与外部服务(如 Memcache、Cloud Datastore 或 Task Queue)交互所需的代码
-
使用静态代码分析工具识别与其他代码隔离的代码段
-
重构代码以移除不必要的依赖,循环依赖是最难解决的问题
-
作为迁移到微服务的前提,重构生产环境中的遗留代码库:
-
识别微服务的共同领域,如下所示:
-
账户和用户信息
-
授权和会话管理
-
配置或偏好设置
-
通知和通信服务
-
照片和媒体,特别是元数据
-
-
在识别出类集之后,迁移到微服务的下一步
-
通过保留现有代码在遗留应用程序中操作,实现回滚选项
-
创建新的代码库,并将类复制到其中
-
通过视图层创建 HTTP API,以提供正确格式化响应文档的钩子
-
新代码作为独立应用创建(
exampleapp.yaml
) -
新的微服务作为服务或独立项目进行部署
-
对代码进行功能测试
-
从遗留应用程序迁移数据到新的微服务
-
遗留应用程序已修改以使用新的微服务应用程序
-
已修改的遗留应用程序将被部署
-
确保功能性和性能的充分验证
-
如果遗留应用程序中有死代码,则会被移除
-
领域建模
设计一致且松耦合的微服务的核心是领域建模,以确保微服务的隔离和封装及其可重用性。每个应用程序的微服务应适当隔离,以避免运行时副作用,同时也应隔离系统中其他微服务实现过程中发生的变化。恰当的领域建模有助于避免系统中基于技术或组织边界的建模缺陷,从而实现服务的分离,如数据、业务逻辑、展示逻辑等。
一个例子是从单体电子商务系统中提取促销服务,由不同的客户端(如移动 Web、iOS 或 Android 应用)使用。因此,促销的领域模型及其状态实体和逻辑需要被隔离,并且不应与系统中其他领域(如产品、客户或订单)的跨域逻辑或实体混淆。
服务规模
基于单一职责原则的微服务适当服务规模是驱动独立操作的动力,测试主张服务规模尽可能小,类似于基于 Unix 的小型实用工具,适用于易于维护和升级的小型代码库。
根据产品类型以及不同的业务逻辑,封装可能变得过于复杂,因此更好的方法是考虑在产品领域内添加更多的边界,并创建更多的服务。另一个选择是考虑替换微服务为新的实现或技术,并据此规划规模的重新调整。
测试
在将单体系统逐步转变为微服务系统的过程中,测试扮演着重要角色;需要执行与单体系统的服务集成测试,同时跨越预先存在的单体系统的业务操作仍然能够在新的微服务系统上继续执行。系统提供的消费者驱动契约可以转换为新的微服务测试用例,这种情况下,自动化测试确保系统的期望得到满足。
一些自动化测试套件:
-
Pact
,一种基于消费者驱动的契约测试库,用于创建可重用的测试环境,以部署整个系统的测试副本来测试微服务 -
使用自动化工具,如 Docker Compose,可以将整个系统容器化为 Docker 容器,并编排这些容器,以便快速部署系统的测试基础设施,进行本地集成测试。
服务发现
服务发现系统使得各个服务能够在执行业务功能时彼此了解。每个服务都会引用外部注册表,获取其他服务的详细信息。对于少量服务,可以使用环境变量来实现服务发现;对于更复杂的系统,服务发现通常依赖于 Consul 和 Apache Zookeeper。
部署
每个微服务的部署应该通过运行时容器自我启用,或者通过将容器嵌入自身来实现,类似于基于 JVM 的微服务 Tomcat 可以容器化,避免了需要独立的 Web 应用服务器。在任何时刻,存在多个相同类型的微服务(参考规模立方体 X 轴扩展),以便更可靠地处理请求。实现中包括一个软件负载均衡器,作为服务注册表,用于故障切换和请求的透明负载均衡,例如 Netflix Eureka。
构建和发布管道
持续集成和部署管道对于实现基于微服务的系统非常有价值,它为每个微服务提供了按需、构建和发布的专用管道,减少了构建和发布整个应用程序的成本。
滚动升级(或蓝绿部署)应该成为发布实践的一部分,这意味着如果是绿色的,升级就成功了,否则应该实施回滚策略。这也可以通过在生产环境中始终保持同一微服务的并发版本(现有版本和新构建的版本)来实现,快速根据需要进行切换。在这种情况下,可以将用户负载的一部分路由到新的微服务版本以测试其操作,同时逐步淘汰旧版本。这为系统中的微服务故障提供了冗余,防止了系统瘫痪。
特性标志
微服务模式包括特性标志。它是一个添加到系统中的配置参数,用于控制某个功能的开关。这种模式使得系统能够触发与标志选项(例如,开启)关联的微服务的使用。例如,同一个功能可以在新微服务和生产环境中共存,流量可以通过特性标志进行路由;这使得交付团队能够加快构建周期时间。
微服务采用对开发人员生产力的提升
单体架构允许在紧迫的时间表下快速推出新业务功能,而整体系统也相对较小。然而,随着系统变得臃肿,开发和运维都会变得繁琐。
采用微服务优先的方式构建新功能或系统是复杂的,涉及许多活动部分。虽然它需要在架构和自动化方面具备强大的纪律性,但从长远来看,投资是值得的,因为它为团队快速而干净地构建微服务创造了一个良好的环境。一个方法是创建一个标准的模板项目,将关键的微服务设计原则封装在项目结构、测试自动化、与监控和仪表化基础设施的集成、断路器和超时模式、文档钩子、API 框架等方面。这类项目模板有助于团队专注于在微服务基础的分布式环境中构建业务功能,而不是关注脚手架和胶水代码。几个有趣的项目方法包括 Dropwizard、Spring Boot 和 Netflix Karyon,选择取决于架构和开发人员的技能水平。
监控与运维
在单体系统和微服务中共存的特性监控,有助于更好地了解实施新微服务后的性能提升。这需要收集统计数据,对系统和资源的性能进行全面监控,以提高继续迁移的信心。
组织考虑
从单体系统迁移到微服务时,组织变革是最具挑战性的部分,例如建立服务团队来负责微服务的各个方面。为了实现更集中的代码所有权,需要创建由开发人员、测试人员和运维人员组成的多学科团队,这些人关注软件工艺。
数据科学中的 DevOps
数据科学项目主要涉及多个角色流,执行大数据工程师、数据科学家和运维团队不同职能的任务。对于数据工程师来说,主要任务包括 ETL、准备数据集以供分析以及将数据科学家开发的模型编码为脚本。数据科学家则参与开发模型、根据样本测试数据评估不同算法和模型,并用真实数据进行验证。
在这种独立工作场景下,团队的产出可能仅限于概念验证(Poc),而无法扩展到大型项目。然而,即使是较小的任务也需要技能的重叠,并且需要与大数据工程师、数据科学家和运维团队进行多次互动和设计会议。
DevOps 可以通过采用最佳实践来弥合协作工作的差距:
-
工具和平台的演变:工程师和数据科学家应持续评估并为新工具和开源项目的创建做出贡献,并以 Apache Spark/Hadoop 生态系统为基础,确保其稳定性和日常操作中的用户友好性。
-
跨技能教育:数据科学家应当共同考虑现实的、理性且实际的可能性,而不是局限于编写抽象代码,例如查询时长和提取数据是否能足够存储系统使用。
-
流程改进:DevOps 是前进的道路,不仅限于工具的实现,如编写 Ansible 脚本或安装 Jenkins。DevOps 应当帮助发明新的自助工具,提升生产力,减少团队间的交接。
DevOps 持续分析环境
随着持续分析和自助服务的成熟,数据科学家的职责从最初的构思延伸至数据项目的生产阶段。自主性帮助我们将更多时间投入到生成实际见解上。
数据科学家通过以下多个阶段进行操作:
-
从最初的商业构思开始,进行数据探索和准备工作
-
投资于模型开发
-
环境的部署和验证
-
部署到生产环境:使用合适的工具,他们能够自己完成完整的迭代,每天多次,且周转更快
大数据工程师专注于开发和贡献工具,如 Spark、可扩展性和存储优化,支持流架构,并提供数据科学家所需的 API 和 DSL。
产品工程师可以基于数据科学家开发的分析模型的捆绑服务,为业务用户构建智能应用程序。
每个人都在自己的抽象层次上工作,并以这种协作模式为整体成功作出贡献。
DevOps 用于身份验证和安全
Kerberos 数据安全以以下流程列出
-
一种身份验证协议
-
用于身份验证的票据
-
避免在本地存储密码或通过互联网传输密码
-
可信第三方验证
-
对称密钥加密
Kerberos 领域
Kerberos 领域基于策略管理定义;它包含了所有可供访问的内容,如客户端、服务、主机和密钥分发中心(KDC)(身份验证服务器和票据授权服务器(TGS))。身份验证的证明是用户/密码凭证,通过特定服务请求加密的密钥进行加密,单点登录(SSO)通过新登录或系统上的缓存验证创建的票据。
访问请求到服务或主机通过以下交互发生:
-
身份验证服务器
-
票据授权服务器
-
需要访问的服务或主机机器
-
KDC 将所有用户机器和服务的秘密密钥存储在其数据库中
-
秘密密钥是密码和哈希算法的组合
-
在初始设置过程中生成一个密钥,并在服务/主机机器上进行记忆
-
秘密密钥都存储在 KDC 数据库中,基于对称密钥加密
-
Kerberos 也可以使用公钥加密来代替对称密钥加密
用户与认证服务器之间
用户和服务器之间的服务请求认证过程如下:
- 访问 HTTP 服务需要通过终端主机的 TGT 与服务器进行身份验证:
- 认证服务器将在 KDC 数据库中检查有效性,但不检查凭证:
- 一旦有效性确立,用户和票证授权服务器(TGS)之间会创建会话密钥:
- 客户端密钥(密码)进行验证和授权:
- HTTP 服务请求也遵循类似的加密认证过程:
- TGS 将检查 KDC 数据库中的 HTTP 服务可用性:
- 为了呈现网页服务,TGS 使用其秘密密钥解密 TGT:
- TGS 随机生成 HTTP 服务会话密钥,准备 HTTP 服务票证,并使用 HTTP 服务密钥加密:
- TGS 发送加密的 HTTP 服务票证;然而,机器等待 HTTP 服务的密钥:
客户端和 HTTP 服务
HTTP 服务与客户端节点之间的服务请求如下:
- 为了访问 HTTP 服务,客户端机器准备另一个认证消息,并使用 HTTP 服务会话密钥进行加密:
- 然后,HTTP 服务使用其密钥解密票证,获取 HTTP 服务会话密钥并解密共享的认证消息:
- 与 TGS 类似,HTTP 服务器发送使用 HTTP 服务会话密钥加密的认证消息:
- 客户端机器通过解密缓存的 HTTP 服务会话密钥读取认证消息:
- 未来的请求使用缓存的 HTTP 服务票证,只要它没有过期,且符合生命周期属性的定义:
- 安全认证过程涉及多个服务器、策略和凭证管理,启用 DevOps 后,能够有效支持自动化升级、部署等操作。
物联网系统的 DevOps
反馈驱动价值。DevOps 的基本方面是快速获取关于性能和使用情况的洞察,这转化为进一步改进的反馈,设计并自动化交付流水线,以提高软件交付质量,并为我们的客户和业务带来最大价值。更紧密的客户联系以征求反馈并进行使用指标分析,随后通过持续改进,帮助敏捷组织迅速响应新出现的需求。
在物联网中,我们收集有关设备性能和使用情况的反馈,这些可以帮助我们:
-
通过预测维修需求来进行预防性维护,这基于实际使用特征,从而减少定期维护的持续时间并改善整体维护。
-
自动调整设置以改善能源消耗并提升服务质量。
-
从设备中获得的洞察可以改善所有连接设备的行为。
-
基于客户独特需求和行为,产品和服务随着时间的推移不断改进。
-
消费者物联网;可穿戴设备的持续反馈可以帮助提升其性能,比如电池寿命,例如智能手机、手表、冰箱和汽车。
-
工业物联网;消费品和工业物联网通过反馈回路驱动价值。企业因此能够确保提供一个可靠、引人注目且有利可图的产品,这要求操作员和制造商基于指标深入了解设备性能;例如,你的恒温器、喷洒系统等中的嵌入式微处理器。
-
听取来自客户、系统和设备的反馈对业务价值链至关重要。DevOps 的敏捷性帮助智能组织解决物联网软件挑战。
物联网(IoT)不仅仅是硬件和连接性。它需要软件来快速开发和更新,同时确保其性能安全高效。持续交付和持续部署只有通过大规模的自动化才能实现。将敏捷实践融入 DevOps 加速了开发周期,通过增量构建和频繁发布小批量代码,使发布过程更加快速和安全。
安全设计
新的反馈机制在安全方面带来了成本;连接的产品和系统现在暴露出更多来自黑客和恶意软件的风险。安全关键系统需要采用安全设计方法进行开发。例如,在移动设备中,受信任平台模块(TPM)为设备内部提供了一个受限区域,用于处理加密、证书和密钥等事项。这对电池电量产生影响,被视为 DevOps 术语中的非功能性需求。安全不是孤立的,它是开发周期的一部分,就像产品、质量和性能是内置的一样。解决这些重要问题意味着采用现代开发实践的组织能够很好地应对物联网的挑战。
DevOps 的采用不仅仅是科学;它是一门艺术,在 DevOps 应用于大数据、云、微服务、数据科学、身份验证安全和物联网系统的数字化转型旅程中。
总结
在本章中,我们学习了数字化转型旅程与 DevOps 的结合。
复杂企业系统的大数据迁移、云迁移、微服务迁移、数据科学、身份验证系统和物联网的采用。
第十一章:ERP 系统的 DevOps 采纳
以下是 ERP 系统(SAP)在 DevOps 过程各个阶段的高调应用之一:
参考链接: cloudplatform.sap.com/capabilities/devops.html#
正如我们从前述过程可以看到的,在成熟的 DevOps 采纳过程中,甚至替换传统的 SAP 生命周期管理器进行以下活动涉及:
-
基于 Eclipse 集成开发环境(IDE)的本地开发
-
Git/Gerrit 用于代码库管理
-
Nexus 用于工件库管理
-
Jenkins 用于发布构建服务器,以实现持续集成和部署
-
SAP Cloud 平台用于生产部署
通过采用开源工具和 DevOps 过程,用户能够受益于功能的灵活性和定制化,同时组织还节省了 SAP 生命周期管理器的采购和维护成本。
第十二章:DevOps 周期表
DevOps 包含多个交叠的阶段,每个服务领域都有许多工具可供选择,而且很多时候这些工具覆盖了多个阶段。为了简化和方便起见,所有工具及其提供的服务列在了周期表中:
参考:https://xebialabs.com/periodic-table-of-devops-tools/
第十三章:商业智能趋势
商业智能趋势的变化和分析如下所示:
参考:https://bi-survey.com/top-business-intelligence-trends
从上图可以看出,数据准备以及开放数据和外部数据的使用被认为是行业中的优先考虑事项。
下图展示了数据发现、准备、治理和可视化以及 MDM/DQ 是 2018 年趋势的重点领域:
参考:https://bi-survey.com/top-business-intelligence-trends
第十四章:测试类型和级别
端到端测试是应用程序生命周期中的关键环节。理解这一点对于 DevOps 自动化尽可能多的环节至关重要。以下列出了测试变种的完整范围:
-
功能测试:根据业务规则和需求验证应用程序的功能。
-
API 测试:使用 Postman 验证各种服务的 JSON 请求和响应。通过 Postman 创建和自动化测试用例。
-
SLA 测试:验证不同服务/页面的请求和响应时间,并将其与开发团队提供的 SLA 指标进行比较。
-
UI 测试:根据设计团队提供的线框或创意,比较 UI 元素/图形。
-
兼容性测试:
-
操作系统兼容性测试:在不同操作系统平台(如 Windows、Mac 和 Linux)以及不同的移动操作系统(如 iOS、Android、BlackBerry、Windows、Symbian 等)上验证应用程序。
-
浏览器兼容性测试:在不同浏览器平台(如 Firefox、Chrome、IE、Safari(iOS)和 Chrome(Android))上验证应用程序。
-
硬件兼容性测试:在不同硬件需求下验证应用程序。
-
-
数据库测试:验证在 UI 端(前端)执行的操作是否修改/创建或删除了数据。
-
迁移测试:验证用户数据在将网站从 v1.0 版本重写为 v2.0 版本后是否正确迁移。
-
集成测试:在测试并与所有服务集成后验证 API 服务。
-
性能测试:在各种工作负载下验证应用程序性能,并使用 Jmeter 测试内存泄漏。
-
安全测试:使用 VERA Code 验证应用程序的漏洞。
-
用户体验测试:验证应用程序的可访问性和用户友好性。
-
本地化测试:验证应用程序中不同语言(例如中文、日语、西班牙语、法语、意大利语、葡萄牙语等)的内容。
-
冒烟/基本测试:在对新版本进行任何重大测试之前,验证应用程序的基本功能。
-
回归测试:在修复任何缺陷或实现新功能时,验证受影响的区域。
-
临时测试:在不了解应用程序行为的情况下,随机验证应用程序功能。
-
探索性测试:在了解应用程序行为的基础上,随机验证应用程序功能。
第十五章:Java 平台 SE 8
Oracle 有两个产品实现了Java 平台标准版(Java SE)8,分别是Java SE 开发工具包(JDK)8 和Java SE 运行环境(JRE)8。
JDK 8 是 JRE 8 的超集,包含了 JRE 8 中的所有内容,还包含了开发小应用程序和应用程序所需的工具,如编译器和调试器。JRE 8 提供了运行用 Java 编程语言编写的小程序和应用程序所需的库、Java 虚拟机(JVM)及其他组件。请注意,JRE 包括 Java SE 规范不要求的组件,包括标准和非标准的 Java 组件。
以下概念图展示了 Oracle Java SE 产品的组成部分: