如果你刚开始探索微服务世界,正在了解虚拟机(VM)和容器的差异,这样的差异让你满脑子都是关于裸机、VM 和容器各自用途的问题。

本文可以给你一个好的起点,让你理解技术是如何发展和影响应用开发的。 随着每次转变,引入新技术最终使得企业运营成本降低、效率更高,开发者更容易专注于真正重要的事 — 改进终端用户的体验。

裸机

裸机指的是物理服务器 / 设备,它开创了我们所知道的现代计算的一切。 这些机器是其他一切的基础,从 20 世纪 60 年代第一个操作系统诞生起,到今天我们运行的容器:所有东西仍然运行在裸机上。

对直接在裸机上运行服务,有几种可选择的环境?

  • 私有或公共(集中式)数据中心:
    • 如果你完全拥有数据中心,那么你不仅已经预先负担了很多成本,并且还要负责维护。因此你会想到避免资源浪费。
  • 公有云租用设备:
    • 如果你使用租赁设备,就会被收取固定的月租。你掌握着租赁设备的使用权,所以肯定不希望浪费任何设备资源。

然而,如果想要在裸机上运行多个应用,你需要在裸机之上添加更多的层以提供更好的开发者体验。因此虽然永远不可能摆脱对裸机服务器的基本需求,但你可以不用直面它们。 行业驱动着运营成本更低廉且要求企业组织更高效地使用裸机服务器的功能。

要想在一台机器上运行多个应用,虚拟机应运而生。

 

从裸机 > 到虚拟机

Two types of hypervisor image both native and hosted. Type 1 (native) shows a Bare metal device that needs a hypervisor to run the operating system. Type 2 (hosted) shoes the hardware that needs an operating system to support the hypervisor in order to run the application operating system

虚拟机(VM)是一种软件,可以在同一台设备上运行多个像计算机的东西。 每台虚拟机内运行的每个操作系统(OS)和应用都与其他共享裸机服务器的操作系统和应用完全分开,彼此之间完全没有影响。

虚拟机共享裸机和 VM 之间的 hypervisor(虚拟机监视器),确保 CPU、内存、网络和其他硬件资源在 VM 间公平分布。 Hypervisor 给予管理员调整 VM 的能力。

随着将更多的功能压缩到更小的软件包,你可以使用更多的可用资源并降低成本。在公有云中,你将为自己使用的内容付费而非支付服务器租赁的统一价格。 VM 使公有云公司能够通过多租户产品进一步降低成本,多租户产品意味着多个客户共享裸机资源,但没有交互也不会对每个租户的服务质量造成影响。 虚拟机可以很轻松地根据请求作出调整,使企业组织能够自由选取所需资源并快速高效地响应需求。

将 VM 放在公有云上可以减少你的工作量。 物理机器的维护、保养和健康状况不用你操心,hypervisor 层的更新需求也由提供者处理。 即使承载你服务的物理服务器坏了,云提供商也会将你的 VM 移动到其他基础设施上而不用你手动干预。

即使应用托管在公有云上,开发者也只需要专注于 VM 和应用本身。 你保留着启动、关闭和简单快速地进行部署的能力,这样可以更容易响应需求变更和应用更新。

以上这些改变使关注点不再聚焦于物理基础设施, 使工程师有更多的时间和精力专注于应用和产品改进。

不过,应用仍然可以变得更小、运行更快,成本也可以更低。

 

从裸机 > 到容器

Container diagram showing the Operator sat between the bare metal and containers which are running applications

容器在 2013 年随着 Docker 的出现而爆红。 Docker 是一个能将应用打包成虚拟容器的平台工具,这些虚拟容器可以运行任何操作系统(是的!任何已运行的操作系统都可以工作,包括能在 VM 中运行的那些!),这使得它们比 VM 小得多,但容器仍然需要一个编排工具。

Kubernetes 是目前最流行的容器编排工具,类似于 steroids 上的 hypervisor。 它横跨容器运行的整个环境而 hypervisor 局限于单一裸机,让你可以一站式解决容器集群的编排管理问题! 这么做令 Kubernetes 拥有呈现出环境全部资源的能力 —— 使数据中心成为单个计算机。如果你在公有云中运行 Kubernetes,就可以尽可能多的使用云提供方允许的算力。

能够快速移动容器,更快地响应环境变化(如需求的增加或减少),以及 Kubernetes 容器的平均生命周期只有一天,这些因素的结合,使得容器的公有云产品甚至比虚拟机更便宜。

企业组织在裸机上运行容器的大多数情况是从头开始构建一个新应用 —— 这通常被称为 “greenfield” 开发。 然而对许多人来说情况并非如此,总有一些历史遗留的交叉项目或对迁移问题导致需要在过渡阶段中从虚拟机上运行容器。

 

从裸机 > 到虚拟机 > 再到容器

对一些人来说,在 VM 中运行容器是一个有趣的折中选择。 拥有的抽象层越多,系统越安全。因为有更多的层需要穿过,这也意味着有更多的地方可以潜在地发现漏洞。 然而这并不是这样选择的唯一原因。

对许多人来说,这是迁移更多应用到容器上很好的过渡阶段。 将容器放在 VM 上保证了工作负载不受转变的影响,还能保留一些遗留的基础设施 “以防万一”。 事实上在现实中很少有组织会将项目完全运行在 VM 或容器上,而且很可能会有一个供开发者使用的遗留环境和现代环境的混合设置。 因此为了敏捷开发和交付效率起见,组织需要找到一种能使混合环境对这些考虑起效的方法。

 

这在实践中是怎样的?

运行跨多个环境的系统本身没什么问题。 但是如果不妥当管理混合系统,你将会遇到一些拖慢组织开发进度的问题。

  • 你需要拥有对应用程序内发生事物的可视性
  • 无论你遇到网络问题或应用问题,需要能够快速调试
  • 你需要能够动态转移流量且快速有效地应对需求的激增

在混合环境下这可能是个困难的工作。

 

服务网格让你的工作更轻松

当你拥有混合环境时,没理由过度复杂化做事方法或做一些重复工作。因为添加服务网格可以帮助所有与你开发生命周期有关联的团队。

服务网格允许你从单一平面管理混合环境。 它为你的环境带来了非凡的控制力,同时对环境的运行过程带来了重要的洞察力。 无论幕后发生了什么,服务网格都将确保你的主要关注点放在开发过程和最大化资源能力。

如果你想了解更多关于服务网格能做什么的信息,请下载我们的免费 PDF 副本 Istio: Up and Running (O’Reilly) ,作者是 Zack Butcher 和 Lee Calcot。或者看一看我们的博客和资源库。

 

结束语

技术行业的发展日新月异。 虽然裸机和数据中心不会消失, 但应用现代化和充分利用基础设施和算力的趋势不可阻挡。 确保你的基础设施尽可能的发挥出一切作用,并且这些作用对你有利而非不利。

Tia Louden - Marketing

 

Tia Louden 是 Tetrate 的内容作者。 Tetrate 致力使 Istio 适用于任何负载、任何环境。 想了解更多,在 Tetrate.io 联络我们,让我们带领你通过我们的旗舰产品 Tetrate Service Bridge 来达成你的目标。

作者