曾几何时,Azure 只是一个专门用来托管 Windows 的云主机平台。
如今,这家科技巨头却每月要测试高达 1,000 多个 Linux 发行版,以便确保其客户的应用程序能够在 Azure 上顺畅运行。
在不远的 2001 年,当时的微软首席执行官史蒂夫·鲍尔默 (Steve Balmer)还抱怨地说“Linux 是一种毒瘤”。
这位后来的洛杉矶快船队大老板这样说 Linux 的开源许可证:通用公共许可证,要求所有基于Linux 的相关软件也必须换为开源软件。
鲍尔默的恐惧被夸大了,但他可能未曾意识到现在的状况,如果当初他有先见之明,应该是更充满想像力的事情。
在二十年后,Linux 成为 Microsoft Azure上最广泛使用的操作系统,而不是微软自家的 Windows。
Linus Torvalds 的项目在 Microsoft 云中持续地脱颖而出,是因为客户的强烈需求,而不是基于自由软件勇士 Richard Stallman的强列支持或反对。
Microsoft Azure Linux 平台组两位项目经理Jack Aboutboul和 Krum Kashan今年在 Linux 基金会开源峰会上发表演讲说:
“如今,微软投入了相当大的精力来确保Linux在 Azure 上最大可能地流畅运行”。
Aboutoul 确认说:“Linux 是目前 Azure 中排名第一的操作系统。”
其中超过 60% 的 Azure 市场产品基于 Linux,总共约有 20,000 种服务,超过 60% 的虚拟机(VM)内核都是基于 Linux 构建的。
“我们最初是使用 Windows 平台,但是目前 Linux 是 Azure 上运行的第一大操作系统。”
— Jack Aboutoul
并且,所有的技术支持都必须以用户所期望的方式进行。因此需要 Microsoft 的 Linux 平台小组,要同时为内部客户以及 Azure 客户提供系统级支持。
这两位优秀工程师还解释道,当今微软对于“如何以超大规模运行 Linux” 的理解已经和其他公司的团队一样多、功力一样深厚了。
超大规模的 Linux 如何产生的
是的,当初的情况并非如此。当微软于 2008 年推出 Azure(研发代号称为“Red Dog”)时,它的目标是提供 .Net 平台即服务(.NET PaaS),主要用于运行与托管 Web 应用程序。
然而,后来有不少的客户不断要求微软在Azure上托管 LAMP Stack (即Linux/Apache/MySQL/PHP/Perl/Python 技术堆栈)。
到了 2014 年,在微软首席执行官 Satya Nadella发出 “Microsoft ❤️ Linux” 的口号下,第一批运行 Linux 的虚拟机 (VM) 在 Azure 上正式上线。
微软 Azure推出 Linux 时间线
截止到今天,已有数百种 Azure 和基于 Azure 的服务在 Linux 上运行,其中包括Azure Kubernetes 服务(AKS)、OpenAI、HDInsight以及许多其他的开源数据库系统服务。
Aboutoul 表示说:“很多为其它产品提供动力的基础设施都运行在 Linux 上。它们都是在各处运行的不同版本的 Linux”。
为了更好的运行这些服务,微软还维护了自己的 Linux 内核,并于 2023 年发布了自己的 Linux 版本 Azure Linux。
相关网址:https://azure.microsoft.com/en-us/solutions/linux-on-azure
但是 Azure Linux 只是 Azure 上运行的其他 Linux 版本中的一小部分,但微软必须与所有这些版本合作才能提供支持。
总体上的数据,Azure 市场中有大约 20,000 个第三方软件即服务 (SaaS) 包依赖于某些 Linux 发行版。当出现技术问题时,Azure 服务工程师会获得帮助工单。
现在的微软拥有一系列认可的 Linux 发行版,其中包括 Red Hat Enterprise Linux、Debian、Flatcar、Suse、Canonical、Oracle Linux和 CentOS(由OpenLogic管理,而不再是 Red Hat)。
Aboutoul 进一步解释说,认可并不意味着推荐,但是每个产品都有专门的用户群。
Aboutoul 表示:“如果一个发行版要获得认可,我们希望确保人们确实愿意使用该发行版。”
一旦某个Linux 发行版获得认可,微软必须投入一些工程时间来确保它在 Azure 中运行良好。微软与分销商建立了合同关系。微软会定期与这些公司会面,让他们了解即将发生的变化和正在发生的问题。
最后,微软竭尽全力通过 Azure 镜像基础设施确保及时更新软件包。
Aboutoul 表示:“我们希望确保当用户需要软件包更新时,更新就在那里,与计算机位于同一网络中。”
Linux 客户操作系统开发生命周期
Microsoft Azure 的 Linux Guest OS 开发生命周期
总体而言,该公司每月仅从认可的合作伙伴处就获得约 1,000 个映像。许多发行版都有多个映像(例如,Suse有一个常规型映像,另一个用于高性能计算)。
Aboutoul 表示:“我们面临的主要挑战是时间安排。每个发行版都有自己的发布周期。”
其中一个发行版 Oracle Unbreakable Linux 甚至没有固定的时间表。
“我们会收到他们发来的电子邮件,说即将发布新闻稿,然后我们在接下来的三天里惊慌失措地试图整理所有需要做的事情的要求”。
一旦客户启动发行版(在虚拟机内),他们就需要获取更新。许多人会选择自动更新选项,因此,为了安全起见,Azure 会在用户机器上线之前对其进行测试更新,以确保它们不会破坏系统。
随着时间的推移,该公司希望将这些安全修补程序标准化为 Aboutoul 所称的 Azure Guest Patching Service (AzGPS)。
除了八个官方支持的Linux发行版之外,还有许多边缘情况,包括过时的发行版和根本不受官方支持的发行版。
Aboutoul 表示:“您可以在 Azure 中运行任何想要的 Linux。您可以引入自己的映像。您可以构建自己的VHD。我们会尽最大努力为您提供支持。”
“相信我,”他热情地补充道。“没有什么比在云中运行Gentoo更好的了。”
Microsoft 如何测试 Linux Azure
Kashan 表示,微软公司还“持续监控”上游内核,即正在积极开发的内核,将成为稳定分支的下一个版本。它每 12 小时进行一次自己的构建,并将验证结果发布回 Linux 内核,并持续集成数据库。
微软构建了自己的内核,即 Azure 调优内核,针对性能和 Azure 硬件进行优化。
Azure Linux Fleet 在数千个 SKU 上运行着数百万台虚拟机,每个 SKU 都针对特定的配置或工作负载优化:GPU、存储和高性能计算。所有组合(涵盖性能、功能、压力和社区测试等 40 个领域)每月总计约 500 万次测试。
这意味着运行各种市场应用程序的 20,000 个映像中的任何一个,都可以在 Azure 中无缝运行。
为了实现自动化,微软开发了LISA(Linux 集成服务自动化)框架。许多用 Python 编写的测试用例都已经作为开源软件发布。
https://mslisa.readthedocs.io/en/main/run_test/microsoft_tests.html
“我们试图将其打造成一站式服务。只要你的照片通过了 LISA 审核,你就可以开始了,”Kashan 这样说道。
Azure团队的下一步是将 LISA 作为 Azure 的自助服务门户推出,称为适用于 Linux 的 Azure 映像测试服务 (AITL),它允许第三方通过 API 或 GUI 验证他们自己的、适用于 Azure 的 Linux 版本。其中的测试将被保密,可以集成到你自己的持续集成与交付系统当中。
作者:洛逸