解读基础设施即代码

现代软件开发对基础设施的管理提出了更苛刻的要求。产品要适应瞬息万变的市场,要求基础设施要有更快的响应速度。而持续交付和DevOps的推行要求产品团队对部署和运维要有更高的自主性。技术的快速进步和演化,也使得基础设施的配置不得不频繁变化。在这种快速变化的过程中,要求基础设施既要灵活,也要安全、可靠。

而传统的基础设施运维管理具有以下几个问题。

  • 被动响应。 产品团队获取服务器资源采用的是申请制,中间存在若干审批过程,以及需要等待运维团队实施,响应不及时。
  • 自动化缺乏串联。虽然有一定的自动化,但不能做到无人值守,需要执行一些临时命令介入。由于环境释放和重建的成本高,因而倾向于不释放,导致资源利用率低。
  • 和产品团队脱节。很难根据需求随时动态增加环境。需要额外的文档来描述环境,可能更新不及时。

产品团队是实施持续交付的过程中,必须考虑将基础设施的维护纳入进来,作为支持产品运行的一部分。以下是产品团队的持续交付流水线全景图。

从上图可以看出,产品团队除了管理项目本身代码外,还要管理环境定义脚本。环境定义脚本可以由基础设施自动化工具执行,动态创建和销毁和更新产品运行所需的环境(包括服务器、负载均衡器、防火墙配置、第三方依赖等)。

如果实现了这一点,那么就实现了基础设施即代码的雏形。Kief在《Infarftruce As Code》一书中对基础设施即代码定义如下:

基础设施即代码是一种使用新的技术来构建和管理动态基础设施的方式。它把基础设施、工具和服务以及对基础设施的管理本身作为一个软件系统,采纳软件工程实践以结构化的安全的方式来管理对系统的变更。

基础设施即代码有四项关键原则。

  • 再生性。

环境中的任何元素可以轻松复制。

  • 一致性。 无论何时,创建的环境各个元素的配置是完全相同的。
  • 快速反馈。 能够频繁、容易地进行变更,并快速知道变更是否正确。
  • 可见性。 所有对环境的变更应该容易理解,可审计,受版本控制。

基础设施即代码的目标是:

  • 标准化。 以代码来定义环境,实现开发环境、测试环境、生产环境的标准化。
  • 自动化。 以自动化工具来驱动代码准备环境。包括创建环境、更新环境以及销毁环境。
  • 可视化。 以监控来可视化环境信息。环境当前状态可视、环境变更历史可视、可追溯。

基础设施即代码实践会产生高成熟度的持续交付和DevOps。

在实施基础设施即代码时,要遵守以下实践。

  • 使用DSL描述环境。

Ansible、Chef、SaltStack、Terraform等基础设施自动化工具都有各自的描述性语言实现对基础设施的定义。使用DSL更容易通过描述性的语言定义基础设施,也有助于代码重用。团队成员能建立起共同理解,从而维护脚本。

以下是Ansible的一个playbook示例。

1
2
3
4
5
6
7
8
9
10
11
---
- hosts: local
  tasks:
   - name: Install Nginx
     apt: pkg=nginx state=installed update_cache=true
     notify:
      - Start Nginx

  handlers:
   - name: Start Nginx
     service: name=nginx state=started
  • 自测试系统。

在编写环境代码的配置时,也要编写对环境的测试。确保所有服务器都正确进行了配置,遵守了所有的安全规则,网络连通性等进行了验证。我们一般提倡将测试代码和配置代码放在一起维护。这样配置代码更新的化,能保证测试代码也被及时更新。

一些典型的基础设施自动化测试工具有ServerSpec、Testinfra等。以下是一个ServerSpec的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

require 'spec_helper'

describe package('httpd'), :if => os[:family] == 'redhat' do
  it { should be_installed }
end

describe package('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_installed }
end

describe service('httpd'), :if => os[:family] == 'redhat' do
  it { should be_enabled }
  it { should be_running }
end

describe service('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_enabled }
  it { should be_running }
end

describe service('org.apache.httpd'), :if => os[:family] == 'darwin' do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end
  • 一切进行版本化。

一旦采用了环境定义脚本实现对环境的控制后,需要将环境定义脚本纳入到版本管理中。并且之后所有的环境变更都应该先修改环境定义脚本,由环境定义脚本触发对环境的变更。登录到服务器执行一些临时性命令是被坚决禁止的。因为这极有可能会破坏环境的一致性。当重建服务器时,也不能保证能应用所有需要的变更。

下图是基础设施即代码的一个典型使用场景。

除此之外,如果想要在生产环境中创建可伸缩性的服务的话,也需要借助机舱设施即代码这一实践。在高峰时期,系统可以根据定义的环境自动创建并加入新的节点实现动态扩容,并在低峰时将其销毁。当监控发现某节点失败,系统可以根据定义的环境自动创建新的节点来替换失败节点,实现自动灾难恢复。

最后是我们在某团队实施基础设施即代码的案例解析。这张图是某团队的基础设施架构图。

该团队使用AWS作为基础设施平台。我们选用ansible作为基础设施自动化工具,并结合AWS提供的cloudformation服务实现快速创建和销毁资源。所有网元都有清晰的角色划分,配套对应的配置脚本。从网络配置到网元配置以及应用配置都实现了全自动化。所有的配置脚本都和源代码一起托管在GitHub。团队所有成员都可以查看并修改。

时间: 2024-09-24 17:21:19

解读基础设施即代码的相关文章

java-求解读这段代码是什么意思

问题描述 求解读这段代码是什么意思 public static String conSvr() { (URL)null; (InputStream)null; StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder2 = new StringBuilder(); stringBuilder.append("ben123.a3w.cn"); try { StringBuffer stri

基础设施即代码让混合多云管理更为复杂

对于任何一个力,都存在着一个与其大小相等方向相反的反作用力.这个物理学上的牛顿第三定律也同样适用于IaC:虽然这一服务是有优势的,但它也带来了一些问题. 本文是针对混合云和多个云管理使用基础设施即代码系列中的一部分. 基础设施即代码是一个强大的工具,它可以帮助简化混合云和多个云的管理工作,因为它能够实现服务器.容器以及虚拟机的部署与配置操作的自动化.但是,它也可能会导致出现低效过程.部署错误以及常见混乱等问题.那么,用户应当如何解决实施能够确定成功与否的基础设施即代码所带来的挑战呢? 在实施基础

Kief Morris:实现基础设施即代码

将应用程序迁移至云端在不知不觉中已经走向普及化.商品化,不仅仅是大企业可以实现,对于注重应用程序灵活性和资源应用的小企业,这也是一项很好的选择.在QCon New York 2016大会上,ThoughWorks公司云实践领导人Kief Morris给出了题为"实现基础设施即代码"的演说,他分享了如何充分利用基于云端的基础设施的一些关键原则和建议. 为了引出后面的讨论,Morris首先阐述了使用云基础设施的动机和挑战.通常情况下,公司会着重于速度--用最快速度获得一个最小化可行的产品投

有没有高手可以帮忙解读一下以下代码???

问题描述 Gh24MzQwNjY4RTRENDc0Q0Y4ODRGQ0R8MDF8MDJ8MDN8MDR8MTV8MTg=+??@??uqO?+?G8@蹸不知道此代码是用什么编写,能否转换成成正常文本? 解决方案 解决方案二:可能是对数字和文字的加密吧.如果知道他是用什么加密的,我想应该可以解释出来.我用过MD5,但也没有成这个样子啊.解决方案三:加密文件啊解决方案四:附件里显示的是写字版打开显示的文本,文件格式是*.JD解决方案五:哈哈,可能是病毒.楼中可以看看这个链接.希望对你有帮助.解

Facebook早期员工评价扎克伯格的Jarvis AI代码——富可敌国之后尚能饭否? | 深度

雷锋网(公众号:雷锋网)按:本文作者覃超,前Facebook软件工程师,现为FREES资本技术合伙人. 文章来自@覃超 的知乎回答:如何评价扎克伯格自己写的 Jarvis AI? 此问题缘起于扎克伯格2016年12月19日发布的文章Building Jarvis,小扎称自己打造了一个像钢铁侠里 Jarvis 那样的家庭AI助手.雷锋网已在第一时间翻译出这篇笔记:<扎克伯格开发笔记:打造Jarvis的日子,我庆幸自己从未停止过编程>,建议没看过的读者可以先浏览一下. Zuck原贴 Jarvis

云计算基础设施持续集成实践

[演讲PDF]: https://yq.aliyun.com/attachment/download/?id=1837 [演讲视频]: https://yq.aliyun.com/edu/lesson/551 研发和传统基础设施交互方式 通常情况下,在开发过程中需要和基础设施打交道,需要在项目中申请开发.测试以及预发生产环境.在IDC时代,我们需要向IT部门申请这些资源,其批准后,我们才能获得这些资源.如果这些资源恰巧不足,我们只能等待购买新的资源或者更换其他资源. 当拿到这些资源之后,需要对开

打造云上代码交付链,CodePipeline实践分享

在2017在线技术峰会--首届阿里巴巴研发效能嘉年华上,来自阿里云飞天研发部的工程师莫源分享了<打造云上代码交付链,CodePipeline实践分享>.他在云计算和云平台.持续集成流程.DevOps的基础上,详细分享了Alibaba Cloud CodePipeline优于Jenkins的性能和实践. 以下内容根据直播视频整理而成. 直播视频:https://yq.aliyun.com/edu/lesson/549 PDF下载:https://yq.aliyun.com/attachment/

揭秘HPE的最新一代组合式基础设施Synergy

 HPE公司的Synergy将成为下一代服务器的代表,将拥有超越超融合型基础设施系统的容量水平,且能够实现裸机配置.承载虚拟化工作负载以及容器化负载等多种用途--至少HPE自身对此抱有信心.   不过对这套方案进行深入剖析仍然颇具难度.它到底属不属于一套具备独立可扩展计算.存储与网络机制的动态可重新配置超融合型基础设施(简称HCI)设备?答案是肯定的,至少在一定程度上是如此,但HPE方面坚持将其与HCI区分开来.这一点我们稍后将详加阐述. Synergy的基础是一台10U机架级机柜,其有点类似于

优质的基础设施如何帮助数据中心应对业务中断

随着现如今的企业组织纷纷都在积极的将自身打造成为一家具有变革能力的企业组织,故而您企业的IT部门所关注的重点需要从此前的单纯的解决业务中断领域方面进行转型. 然而,为了摆脱采取被动的方法来应对和解决造成业务中断的因素,您企业将需要一套更为综合的.灵活的数据中心基础设施. 通过借鉴参考本文这篇来自Frost & Sullivan的调研报告,相信将有助于广大读者们了解如何构建一款更好的基础设施,来使得您所在的企业组织能够充分利用强大的自动化工具.高性能的管理和报告平台.实现理想的灵活性等. 几年前,