原文链接:http://martinfowler.com/bliki/InfrastructureAsCode.html

--------------------------------

架构即代码是一种通过源代码就可以解析计算和网络架构的一种方式,然后就可以认为是任何一种软件系统。这些代码可以在源代码管理中被保存以确保可审性和再塑性,受限于测试实践和持续交付的所有准则。这是十几年前就被用在处理成长中的云计算平台的方法,也将会是日后处理计算架构的主要方式。

我成长于铁器时代,当任何一个新服务器应用发布,也就意味着我们会想办法让他跑在一个物理硬件上,设置那些硬件参数用来支持应用的需要,然后把应用部署到硬件上。

设置好那台硬件一般都会很费钱,也费时,一般约花费几个月。但是现在我们现在处在云时代,一个启动服务器只需要几秒,要的只是联网和信用卡。

这是一个用软件命令就可以直接开服务器(一般是虚拟机,但是可以在电脑裸机上安装),做配置的动态架构,不需用螺丝刀就可以拆卸服务器。

实践:

架构即代码是基于以下实践:

· 使用定义文件:所有配置参数都是在可执行的配置定义文件中设定的,比如外壳脚本 (Shell Script), Ansilbe Playbooks, Chef recipes 或者 Puppet manifests.在任何时间,任何人都不能登录到服务器作出即时调整。因为任何小修改都有风险把服务器变成雪花服务器,所以开发代码时候必须当做开发持久的定义代码来完成。这说明更新如果是用代码来操作会更快。幸运地是,计算机执行代码速度很快,这使他们可以快速配置上百台服务器,比人工手动键入要快很多。

· 自我记录系统和流程:从可靠度而言,比起指挥普通人去执行的文档,代码则可更精确切地贯彻执行。如果需要的话,其他的人类可读文档也可以从这串代码里生成。

· 所有事都可以做版本管理:在资源管理器中保存所有代码。这样的话,每个配置参数和每个变化都可以被记录下来用于审计,而且你可以做再塑性建设以帮助诊断问题。

· 不断测试系统和流程:测试帮助计算机在架构参数中迅速找到错误。对于任何现代软件系统,你可以为架构代码设置部署通道(Deployment pipeline),这样即使架构改变也可以实现持续交付。

· 小的改变比迭代重要:架构更新得越大,越大可能架构包含错误而且很难侦测到那个错误,特别是如果错误还会联动。小的更新使我们更容易找到错误也更容易恢复。要改变架构是,更新地约频繁,难度就越低。

· 保持服务持续可用:越来越多的系统不能承受升级或修复时的停机。像蓝绿部署(Green-Blue Deployment)和平行变化(Parallel Change)的技术就可以帮助我们在不丧失可用性的前提下做点小更新。

好处:

所有这些使我们好好地使用动态架构,可以轻松启动新的服务器或当他们被新的配置更换或负荷减少时,可以安全处置服务器。创建新的服务器像运行脚本,创造所需尽可能多的服务器实例。这是一种很好的契合Phoenix Severs(凤凰服务器)和Immutable Server(二合一服务器)的方法。

用代码设定服务器参数以为在服务器之间有一个很好的一致性。手动配置说明书可能会做出不精准的解释(更不用说错误)会配置一些微妙的不精确的参数,导致一些很难调试的棘手问题。这些难点会因为不合适的监控变得更糟,而使用代码则会使监控变得顺利。

很重要的是,使用配置代码让改变变得安全,减少应用和系统软件更新风险。一些错误可以很快发现并修复,再不行所有改变也可以回复到上次保存的配置。

使用版本控制的代码建立的架构帮你住使其变得合规和便与审计。配置里的每次改变都可以被记录,而且不容易错误地记录在案。

所有这一些的重要性都增加了,因为你需要处理更多服务器,而且当你正要把业务移到微小型服务时,发挥架构及代码的必要能力。

架构即代码技术有效地扩展到了管理服务器的大型集群,不论是在配置服务器还是制定他们如何进行交互。

什么是架构即代码( Infrastructure As Code)相关推荐

  1. 基础设施即代码(Infrastructure as Code)

    2000年之后,硬件虚拟化的兴起催生了云基础设施托管的新机遇.云厂商开始提供对动态Infrastructure as a Service(IaaS)平台的访问.随着这些平台的发展并开始提供更复杂的基础 ...

  2. 为了减少接口的响应时间,有哪些优化措施?(可以从架构、代码等各个角度谈)?

    为了减少接口的响应时间,有哪些优化措施?(可以从架构.代码等各个角度谈)? 我们在开发过程中,当然是希望自己项目接口的响应时间越短越好,至少我看着自己开发出来的代码,都是毫秒级的响应,会有一种自豪感: ...

  3. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  4. 代码大全(Code Complete)-- 目录和关键点

    读后感 <代码大全>是一本指导"代码构建"的书,指导我们如何写出优秀的代码,如何成为优秀的程序员. 这样一本900多页的大部头书,当我们基于既往的编程经验,在读每一个部 ...

  5. 获取线程结束代码(Exit Code)

    线程结束代码可以调用GetExitCodeThread()(并给予CreateThread所获得的线程handle作为参数)而得知: BOOL GetExitCodeThread(HANDLE hTh ...

  6. ANSI编码和标准代码页(code page)

    电脑最先是美国人发明出来开始使用的,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母.数字和常用特殊符号已经绰绰有余了(其实ASCII只用了前127个编码)于是他们使用ASCII编码, ...

  7. CKEditor代码高亮显示插件Code Snippet安装及使用方法

    CKEditor网页编辑器 CKEditor 即 FCKEDITOR .FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写.具备功能强大.配置容易.跨浏览器.支持 ...

  8. 15个最佳的代码评审(Code Review)工具

    代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...

  9. 【LiveVideoStack线上分享】FFmpeg深度学习模块架构与代码实践

    FFmpeg可谓是音视频开发中的一把瑞士军刀,其中filter提供了很多音视频特效与图像处理的功能,除了传统的FFmpeg+OpenGL/OpenCV以外,深度学习模块提供了一种新的方式.本周四晚19 ...

最新文章

  1. C#共享内存实例 附源码
  2. OUTER在mysql_MySQL不支持OUTER APPLY
  3. python爬虫新手项目-给新手推荐几个实用又适合上手的Python爬虫项目
  4. 第7集 构造函数中抛出的异常
  5. 蓝桥杯-删除数组零元素(java)
  6. Pandas基本操作指南-2天学会pandas
  7. SessionListener失败,退出
  8. 客服跟踪记录管理php,用例管理平台维护记录,用例管理平台维护_PHP教程
  9. 软件开发人员,自身素质应该注意的问题!
  10. 移动100m宽带慢的要死_【今日小知识】卡吗?慢吗?移动千兆路由器带你飞
  11. Hive面试题汇总大全
  12. 瀚高数据库迁移工具常见问题
  13. java 1到n的质数_1到100的质数(java求100以内的素数)
  14. 从石器时代到硅器时代
  15. 「LOJ#10015」「一本通 1.2 练习 2」扩散(并查集
  16. EasyUI【DataGrid数据查询】
  17. TensorFlow Probability 联合分布变分推断工具,估计权重的贝叶斯可信区间更简单
  18. 如何搭建一个属于自己的直播平台?
  19. 波士顿动力狗 SPOT 权威购买指北
  20. ScreenCapture:通过DirectX 库进行屏幕捕获

热门文章

  1. 自学编程好还是参加培训班好?
  2. Python的lasso回归分析
  3. 【字符串处理函数】sprintf与snprintf
  4. Echarts世界地图的国家名称中文化
  5. 微信小程序如何调用腾讯地图进行定位的简单方法
  6. VPS8701 电源管理(PMIC) VPS8701
  7. GNSS定位精度指标计算
  8. 前端工程师的摸鱼日常(7)
  9. 计算机科学研究算法的局限性,CNCC2018 分论坛(6) | 研究经典计算机算法已经过时了吗?...
  10. Hive的nvl函数