作者:中国移动云能力中心PaaS产品部 于磊春

来源:移动Labs

01

什么是不可变基础设施?如何理解?

熟悉云原生的小伙伴们都知道,云原生目前具有五大代表性的技术,它们分别是:容器、服务网格、微服务、不可变基础设施、声明式API。其中,不可变基础设施相比于其他四种概念难理解一些。

网上对于不可变基础设施的定义有很多,此处给大家展示一个比较有代表性的描述:

Immutable infrastructure refers to servers(or VMs) that are never modified after deployment.

生活中,不可变基础设施的例子比比皆是,我们以“水”为例来谈一谈不可变基础设施和其对应的可变基础设施:

现实生活中,如果我们生活在农村或者比较落后的山区,水资源的获取对于我们来说是相对比较困难的,在使用水资源时会比较珍惜,会存在这种水资源使用方式:淘米水用好之后可能会用来洗菜、洗菜后的水会用来洗拖把、洗拖把后的水再用来冲马桶,这种水资源的利用被视为可变的基础设施;生活在城市的时候,水是作为一种不可变基础设施来使用的,我们打开水龙头后,用过的水直接进入了下水道,这种水资源的使用是没有进行复用的。

从现实回到代码,其实在代码中我们也是存在很多不可变基础设施和可变基础设施的思考:

图1

开发人员在编码时也会存在不可变基础设施的场景,java、c++等语言都提供一种能力让变量变成不可修改,包括传参的时候,如果进行限制后,对该变量进行修改会出现编译报错,如果要实现不可变数据的修改,需要通过再申明一个变量等方式去支持不可变数据的修改,有开发经验的开发人员知道不可变数据让代码逻辑更加清晰,减少错误,同时让并发变得更加简单。并发编程时如果让一个变量申明为只读类型的,对其进行并发修改时不需要加锁进行控制,这就是不可变性在并发中的思考。

其实“不可变基础设施”这个名词最早出现在2013年,随后,Docker带来的“容器时代”和k8s引领的“云原生时代”让不可变基础设施这个理念越来越流行。常见的服务器、虚拟机、容器都称为基础设施。

02

不可变基础设施的优势特点有哪些?怎么改造?

大家熟知,云计算的出现是降低了环境标准化的成本,但业务的交付成本依然很高。

云原生技术架构展示如下:

图2

不可变基础设施与之对应的是可变基础设施,在传统开发中,软件开发完成后需要部署到服务器上进行测试或者正式部署等,开发或者运维人员需要通过客户端连接到服务器端进行一些安装部署等工作,并且如果考虑多节点服务器部署的话,涉及到对应的配置项(比如环境变量等)需要对每个节点逐个进行配置参数修改,如果后续升级等还需要对每一个节点环境进行修改,比如电商那种更新迭代比较频繁的话,这些环境经历的一些操作很少能完全理清,后续的变更会经常遇到各种诡异的问题,基础设施变得很脆弱、敏感,一些比较小的变动就会引发不可预知的结果,这是一件非常头疼的事情,排查问题需要很丰富的技术积累,同时耗费的时间也会很长。

从开发者角度来看,不可变基础设施在时间和空间的一致性是非常棒的,特别是在排查业务侧问题的时候。对于时间的理解,如果应用部署在某一个服务器上面的时候,运行了一段时间(比如100天),服务器的状态还是一模一样的,这就能在很大程度上保证排查问题的效率;空间上,应用不管部署在研发区还是测试域、部署在linux还是windows,空间上也能做到一致。

❓ 可变基础设施常见问题:

  1. 服务频繁持续的变更会给服务运行引入很多中间态,从而导致软件熵的增加,不可知风险增加;

  2. 故障出现时,很难快速构建出新的服务副本,依赖于部署时的高可用节点;

  3. 很难标准化,交付运维过程异常痛苦,虽然可以通过 Ansible、Puppet 等部署工具进行交付,但是也很难保证对底层各种异构的环境支持得很好,还有随时会出现的版本漂移问题。比如你可能经常遇到的,某个软件包几个月之前安装还能够正常运行,现在到一个新环境安装后,竟然无法正常工作了。

不可变基础设施是另外一个思路,部署之后即是只读状态,不可对其进行修改,如果需要更新或修改,则使用新的环境或服务器去替代旧的。不可变基础设施可以避免可变基础设施中遇到的各种常见问题。

云原生不可变基础设施相关推荐

  1. 【云原生 • Terraform】基础设施即代码工具力荐

    目录 前言 Terraform 如何工作 为什么要使用Terraform? 管理任何基础设施 跟踪基础设施 自动化变更 标准化配置 Terraform 安装 举个栗子 使用nginx 镜像启动一个名为 ...

  2. 网易严选应用的云原生演进实践

    1. 背景 Cloud Native 这个名词最近几年一直很火,Pivotal和CNCF 都出过相关的定义,但本质都是为了引导应用在业务日益复杂多变的场景下可以更好地利用云基建,做到更加敏捷高效.20 ...

  3. 阿里云刘伟光:2万字解读金融级云原生

    文 | 刘伟光 刘伟光,阿里云智能新金融&互联网行业总裁.中国金融四十人论坛常务理事,毕业于清华大学电子工程系 前言 2015年云原生理念提出的时候,彼时全球金融百年发展形成的信息化到数字化的 ...

  4. 阿里云刘伟光:2 万字解读金融级云原生

    作者:刘伟光,阿里云智能新金融&互联网行业总裁.中国金融四十人论坛常务理事,毕业于清华大学电子工程系 01 前言 2015年云原生理念提出的时候,彼时全球金融百年发展形成的信息化到数字化的背后 ...

  5. KubeNode:阿里巴巴云原生 容器基础设施运维实践

    作者 | 周涛  阿里云技术专家 来源 | 阿里巴巴云原生公众号 阿里巴巴节点运维的挑战 在阿里巴巴的场景下,做节点运维面临的挑战主要来自于这几个方面:规模.复杂性.稳定性. 首先是规模大.从 18 ...

  6. 云原生大数据 Meetup|云原生时代下的数据计算基础设施

    随着云原生基础设施的普及,大数据系统如何丝滑地云原生化已经成为不可逆的趋势.6 月 10 日,火山引擎云原生计算和稀土掘金开发者社区将在上海举行一场技术 Meetup,邀请四位来自字节跳动大数据基础设 ...

  7. CNCF 官方大使张磊:什么是云原生?

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 编者说: 从 2015 年 Google 牵头成立 CNCF 以来,云原生技术开始进入公众的视线并取得快速的发展,到 2018 年包括 Go ...

  8. Kubernetes 入门必备云原生发展简史

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 "未来的软件一定是生长于云上的"这是云原生理念的最核心假设.而所谓"云原生",实际上就是在定义一条能 ...

  9. 云原生:重新定义信息产业生态体系

    简介:回顾过去40多年的信息产业发展历程,从PC计算机,到PC互联网,再到移动互联网,现在进入云计算.大数据.物联网.人工智能等的时代,产业发展经历了数次升级,这些升级的背后是以"算力&qu ...

最新文章

  1. SSE-CMM5个级别划分概述
  2. JMC | 人工智能在药物发现中的应用:走进广阔的天地
  3. PAT甲级1140 Look-and-say Sequence:[C++题解]统计连续个数
  4. 用户路径分析:揭秘你的用户行为偏好习惯
  5. iframe 的一点经历
  6. cmake的使用 cmake不是内部或外部命令
  7. Spring Boot Spring MVC 异常处理的N种方法 1
  8. 对比四大企业级linux版本_Linux家族族谱
  9. C/C++基础语法,赶紧收藏好哟~
  10. [note]抽象类和接口的相同点和不同点
  11. Spring Cloud 各个组件介绍
  12. 动态树算法概述及习题
  13. spring报错→UnexpectedRollbackException: Transaction silently rolled back becaus
  14. linux下配置mysql_linux下安装mysql
  15. 【转】dB的计算方法
  16. 基于自定义gym环境的强化学习
  17. Java知识大全 - 十二、Java和大数据
  18. uniapp中修改uni.showModal弹框content内容样式
  19. 外部连接Redis时候,出现Time Out异常
  20. XP下让系统自动登录

热门文章

  1. Android MVVM框架搭建(十)Hilt、ViewBinding、Activity Result API
  2. 【Android Gradle 插件】 Splits 配置 ② ( Splits#abi{} 脚本块配置 | 根据 CPU 架构进行分包 | AbiSplitOptions 配置简介 )
  3. Python监控服务器显卡使用情况程序
  4. 2017-2018-1 现代偏微分方程导论
  5. 【linux基础1】linux命令行使用技巧
  6. 《自由在高处》读后感
  7. 《写给大家看的设计书》读后
  8. iwanna 关卡设计(挖坑)指南
  9. java技术--报警通知及实现方式
  10. C++ Source Flowchart 自动生成C++程序流程图