Obeta

IT的基础设施

IT基础设施(Information technology infrastructure)是指运行和管理企业 IT 环境所需的组件集合,基础设施按照实现方式有传统的基础设施和云基础设施

传统的基础设施指的是私有云部署方式,企业自己管理和运维基础设施,适合对安全和访问速度有要求的企业,缺点是运维成本高昂、需要购买大量硬件和电力。

而公有云基础设施是将基础设施进行一层抽象,用户只需要专注于开发自己的那部分服务,目前这种设施使用的非常多,比如国外的 AWS、GoogleCloud、IBM、Microsoft Azure,国内的阿里云、腾讯云。

本文以下说的基础设施特指 IT 公有云的基础设施,不过私有云也是类似的

基础设施组件

设施的简单含义是组合多种组件来运行并提供某些特定的服务。

基础设施组件有:硬件、软件、网络三大类

image-20200621103026287
image-20200621103026287

硬件

包括服务器(CPU、内存等)、数据中心(存储阵列)、路由器、交换机、负载均衡器等,甚至还包括一些冷却设备服务和供电服务等设施。

软件

提供给使用者使用的各种软件,包括了各种 Linux 发行版、服务器运维管理工具,这里其实是使用到云服务提供的虚拟化解决方案。

网络

使设备可以与外界进行网络互联、提供网络服务、网络防火墙、电缆等,这里是部分硬件和软件进行组合而提供的网络服务。

基础设施类型

基础设施根据部署后是否会进行手动修改分为两种类型:可变基础设施(Mutable Infrastructure)、不可变基础设施(Immutable Infrastructure),可以看出来区分要点是你的使用、思维方式,而不是使用什么特定的配置、软件。

那为什么会这么区分呢?

这是 DevOps 领域中的工程师使用云基础设施多年经验总结出来的

首先我们要明确一点是云基础设施可以被认为是一次性的,可以随时丢弃、更换、创建,理解了这点我们就往下看。

可变基础设施

image-20200623215124611
image-20200623215124611

传统应用的部署方式遵循的是可变基础设施的理念,在部署服务器后需要手动 SSH 上去进行安装依赖、更新系统、升级安装包、调整配置等操作,这些服务器在被部署还在被更改,你可能觉得这没什么问题,因为你一直都是这么做的,那这么做有什么坏处呢?

想象一下你不止管理着这一台服务器,而是十台、一百台服务器,这时候上面的应用部署方式你会不会觉得这是一个灾难?同一个操作要重复上千次,合格的程序猿应该将重复的工作交给机器才对。

要是你比较刚,非要说我就喜欢这么干怎么办?那等待你的是配置漂移(为某个服务器安装一个库后换一个环境后应用无法启动)、雪花服务器(手动管理一堆服务器,手动修改各种配置导致每台服务器跟雪花一样独一无二

因此可变基础架构并不适合云基础设施,毕竟雪花服务器无法做到一次性。

不可变基础设施

image-20200621105210210
image-20200621105210210

部署后不会手动修改服务器任何数据。

如图如果需要升级 App、修改 Apace 为 Nginx 的时候直接构建一个新的镜像部署到新的服务器以替换旧服务器

这么做有什么好处呢?想象一下如果你的服务需要扩容,可以根据镜像直接新起一个服务器。一个服务器 Down 掉我们可以迅速的部署另一个服务来替代它。

Randy Bias 曾经这样类比云基础设施:

在旧的设施中,我们将服务器视为宠物,例如 Bob 是一个邮件服务器。如果 Bob 损坏了,那么其他人也就无法收到他的电子邮件了,这无异于是世界末日。但如果以新的方式,服务器会被编号,就像牛群中的牛一样。例如,www001 到 www100。当一台服务器发生故障时,它会被回收,其它服务器会替代它进行服务。

可变基础设施可以类比为一群独一无二的宠物,不可变基础设施可以类比为一群一样的牛。每个宠物的损失对于我们的打击是非常大的,但是如果是损失了一群牛中的一头,那么损失是很小的。

最后用一个 Gif 来观察一下他们的构建和部署方式。

giphy

引用

个人随笔记录,内容不保证完全正确,若需要转载,请注明作者和出处.