DevOps 最佳实践: 第 5 部分 云中的 DevOps



  • 简介

    云计算承诺并通常交付诸如可扩展虚拟化的企业解决方案、弹性基础架构、健壮服务及成熟平台的能力。基于云的架构看似能提供无限的可能,但它同时也展现了许多挑战与风险。云计算的范畴包括从基于云的开发工具到弹性基础架构,使得开发人员使用全尺寸的测试环境成为可能,而且既廉价又易于构建和基于需要进行分解。第一步是要理解为何云计算最适合用在应用生命周期管理(Application Lifecycle Management,ALM)中。

    云计算与 ALM

    云计算最适合在应用生命周期的上下文中进行理解。技术专业人员经常在开发生命周期的每一个阶段使用基于云的工具,来管理工作流以及 ALM 所需要的所有任务。基于云的 ALM 工具通常包括源代码管理、工作流自动化(包括缺陷及任务追踪)、知识管理,以及基于社区的论坛。基于云的工具可以在整个 ALM 中使用。许多组织通过维护他们自己拥有的私有云来更好地利用云。虚拟化环境使得持续交付和健壮测试环境成为可能。云计算的真正优势是它在低成本交付企业架构和可随着需求的增加而扩展架构这两方面的能力。使用云技术的公司可以更加专注于运维支出(operating expenditures,OPEX)而不是资本支出(capital expenditures,CAPEX)。因此,业务可以保持在初始的低开销,并根据资源和系统使用的情况支付费用。但云也有其自身所特有的一些风险和潜在的陷阱。

    云计算不好的一面

    云计算自身带有一些问题,诸如从技术复杂性到必须依赖于并不会与本组织所关切的优先级和紧迫性相一致的第三方等等。例如,虽然您将您客户信息的隐私和安全性放在第一位,但一些运营商并无法实现足够的安全措施,甚至并未将风险作为一个重要的方面来进行考虑。许多零售商发现,数据丢失会有损组织的信誉并有可能对业务产生负面影响。客户并不关心第三方才是数据决口的最终根源。许多服务提供商声明他们只处理 IT 循规和监管方面的事情,而不对客户方面的事情负责。就相关的法规和审计要求来说,这种声明或许并无依据。云计算就是存在这样的缺点,但好消息是 DevOps 可以帮助有效地降低这一类的风险,甚至为可能发生的问题提供后备计划。首先您需要理解您所使用的云能力。

    哪种云?

    云计算是一个非常宽泛的主题,涵盖属于组织自己所拥有基础架构中的私有云到租用云提供商提供的服务:

    • 软件即服务(Software as a Service,SaaS):把软件作为一种订购或基于所需来提供。服务提供商管理底层基础架构,包括操作系统和应用程序本身。
    • 平台即服务(Platform as a Service,PaaS):平台由服务提供商维护,用户无需关心底层的基础架构,包括操作系统和存储。
    • 基础架构即服务(Infrastructure as a Service,IaaS):基础架构,包括广泛使用的虚拟私有主机(Virtual Private Server,VPS),由服务提供商管理,用户自行维护操作系统、存储,以及在硬件和网络层之上的基础架构。

    由于云已经扩张到数据库、存储和文档服务,现在越来越经常将这些服务称为 XaaS 来表示几乎任何类型的资源都可以被虚拟化。由于所有这些灵活性,云对于每一个问题来说都是一个理想的解决方案。但真相是云计算也可能会极度失调。

    失调的云计算

    当人们开始使用云资源之后,他们都会惊讶于他们所遇到的挑战。虽然 IasS 通常要求您拥有知识丰富的系统管理员,PaaS 及SaaS 模型则将更多的系统管理员负担交给服务提供商。人们会很快发现 PaaS 及 SaaS 云计算并不意味着他们的系统完全不需要管理员。当发生问题时,通过服务提供商的帮助支持中心(help desk)来解决问题将会非常挑战。通常解决办法就是需要您为修复问题所需的额外功能付费。人们通常都会觉得自己被服务提供商束缚,除非他们自己拥有自动化的过程来重新配给他们的服务器,并无缝重建他们的应用基础架构。DevOps 提供原则和规程来定位此类问题,并在问题发生时进行处理。

    对于云来说最核心的 DevOps 最佳实践

    DevOps 原则和实践提供了基础能力,使得组织物尽其用云计算并定位及减轻与云计算相关的固有风险成为可能。组织可以可靠地构建他们的基础架构、配置服务器和能在更好的位置部署应用,来处理云所带来的挑战。DevOps 提供了以下核心能力来帮助管理云计算:

    • 基础架构即代码(Infrastructure as Code)
    • 配给服务器
    • 自动化应用部署
    • 知识分享
    • 管理完整的应用生命周期
    • 持续集成与部署
    • 持续质量保证与测试

    任何软件或系统开发工作都应当从一个关于所构建软件和系统清晰的规格说明开始。如果您能够自动化构建您的基础架构、配给服务器并部署应用,您的组织就能够处理发生的事故或问题,并在需要时无缝变更服务提供商。

    基础架构即代码

    DevOps 着重关注于使用自动化、编程化的规程来构建和维护核心基础架构组件的能力。对于 DevOps 来说,基础架构即代码(Infrastructure as Code)包括了配给服务器、构建中间件,以及安装组成系统架构核心组件的应用程序代码等方面的能力。基础架构即代码还包括了比编写安装过程脚本更多的方面,虽然编写脚本也是必要的需求。通过 DevOps,技术主题专家(Subject Matter Experts,SME)能够与最具备资质创建自动化和完全可追溯的可重复过程的运维专家一起协作。基础架构组件包括复杂的应用程序服务器,例如 IBM® WebSphere® Application Server,及健壮的数据库,例如 IBM® DB2®。如果不借助 DevOps 完全自动化,而且被文档记录、可重复、可验证的安装过程,安装这些核心基础架构组件将会是一个复杂的任务。从质量的视角,确保中间件的能力,例如数据库及应用服务器被正确安装,将帮助确保测试环境能与生产环境相一致。当这些环境相一致时,将会减少在生产环境中发现在测试阶段并没有显现的缺陷的风险。基础架构即代码一个最重要的方面就是编程化配给服务器的能力。

    配给服务器

    为了在云中构建服务器,可以从操作系统一个已知的基线开始。许多云提供商提供一个应用程序编程接口(Application Programming Interface,API)来帮助系统管理员自动化配给服务器的规程。这些规程包括使用诸如包安装器等工具安装关键组件的脚本,这样通常可以支持使用加密哈希值(cryptographic hash)来验证正确的包是否被包括核被安装好。安全标准,例如 Center for Internet Security(CIS)所提供的那些标准,可以被自动化并且帮助确保系统是被尽可能安全地配置的。在服务器、操作系统及中间件都被配给好之后,下一步就是自动化应用程序部署。

    自动化应用程序部署

    应用程序部署通常涉及可观的复杂性,DevOps 提供了对于创建自动化应用程序部署的能力来说最核心的原则和规程。使用 DevOps 关于持续集成和持续部署的实践来创建完全自动化部署流水线,对于贯穿整个应用程序部署生命周期来说非常重要。成功构建完全自动化部署流水线一个最有效率的途径,就是创建一个认可分享知识和专业技能的价值的组织文化。这种想法是核心的 DevOps 原则之一。

    知识分享

    DevOps 着重关注于开发与运维之间的协作。开发人员选择和实现新的技术、新的特性,他们快速定位发生在已有系统中问题。开发人员是比组织内其他人更加了解技术的主题专家。运维团队贡献关于所用技术在运行生产条件下的相关行为的核心专业技能。运维专业人员包括发布及部署团队,他们是创建自动化可重复过程方面的专家。当这两个团队分享信息时,整个组织都可以从这种制度化关于有效运维的核心基础知识中获益。DevOps 团队要比部署和运维团队要大。它需要包括整个组织和服务提供商中的所有利益相关者。这些利益相关者需要认可确保其客户成功的重要性。

    与云提供商一起进行知识分享

    最佳的云提供商会培育他们的用户通过在线虚拟社区分享知识的文化,这些分享包括描述服务器配给和自动化应用程序部署方面的技术说明。在这样的环境中,DevOps 推崇在被通知用户和由云服务提供商安排的主题专家之间分享知识的概念。这种分享可以通过在线社区来完成,并培育关于优秀沟通与协作的 DevOps 原则。当社区成员及服务提供商在一个云计算环境中一起分享知识时,许多风险得以降低。知识需要在贯穿整个应用生命周期中进行分享。

    管理完整的应用生命周期

    这一工作是由受云计算影响的所有利益相关者一起执行的,例如业务分析师、开发人员、测试人员及运维专业人员。关于沟通和协作的 DevOps 原则对于基于云的开发和基于云的运维来说非常关键,但在云中管理应用生命周期也会带来一些独特的挑战和风险。诸如持续集成和交付方面的技术可以帮助建立自动化的应用程序部署流水线。

    持续集成与交付

    持续集成与持续交付是通常与 DevOps 最佳实践联系在一起的最有效的两个技术。基于云的开发可以从经常集成变更和自动化部署中获益良多,而且代码可以使用被良好定义和完全自动化的部署流水线交付到一个经常使用的基础上。

    持续质量保证与测试

    持续质量保证(Quality Assurance,QA)与测试需要包括所有利益相关者在全生命周期中进行努力。云展现了一些针对 QA 以及测试方面的挑战,但它同时也提供了一些优秀的能力。通过 DevOps 关于自动化配给和持续部署方面的最佳实践,开发人员、QA 专业人员和其他利益相关者可以在一个以前并未曾有的低成本,而且与生产环境相似的测试环境中进行测试。在云中,环境验证是最为重要的,尤其当它是由服务提供商所控制时。但即便是私有云,配给虚拟服务器也经常会显现一些特别的挑战。系统专业人员了解一个虚拟机并不能完全准确具备一台物理服务器的行为。这些风险需要被理解和避免。DevOps 关于配给测试环境的能力使用云资源来交付新的能力,如果您已经具备使用自动化规程配给和维护这些环境的 DevOps 最佳实践,可使得生产力和质量两个方面都得到了增强。

    使用 DevOps 来定位云中的挑战

    DevOps 原则和实践增强了所有利益相关者之间的协作,包括开发、运维、质量保证、测试、信息安全,以及服务提供商内部的技术支持结构。在这种情况下,DevOps 协作同样包括来自服务提供商的技术支持工作人员,以及客户同行参与的社区支持群组。例如,一个优秀的云服务提供商会为客户编写可以让其他客户收益的技术说明付酬劳,也会为对协作文化有贡献的过程付酬金。DevOps 还提供强有力的工具和过程,来让组织得以根据需要尽可能经常地配给服务器和部署代码。当服务提供商无法满足其服务水平协议(Service Level Agreements,SLA)并提供预期服务时,您可以无缝转移到其他的云服务提供商。开发工具可以快速获得和根据所需扩展,无论工具是托管在服务提供商的云或企业自己拥有的私有云上。为了实现虚拟化的真正价值,应用 DevOps 原则和实践来帮助领航云计算的挑战。

    云计算的安全

    尽管存在可能的风险,如果使用得当的话云计算同样可以安全和可靠。DevOps 最佳实践,使得理解和监控运行时环境成为可能。您可以侦测非授权的变更,无论变更是因为人为错误或出于恶意目的。更重要的是,如果需要的话您可以通过重新构建您的系统来处理事故。在系统被入侵或当其他 IT 设施在诸如洪水或地震等灾难之后需要恢复时,这一能力非常关键。
    组织需要明白的是,在云服务中航行并不容易。一个关于有效沟通、协作和过程改进的文化非常关键。

    结论

    DevOps 提供了一组强有力的原则和实践,来帮助定位云计算所固有的一些挑战。使用这些最佳实践来实现云计算完全的威力和能力。

    原文链接: http://www.ibm.com/developerworks/cn/rational/d-cloud-devops/index.html


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待