操作系统并非完全起源于计算机的早期,但也由来已久。大型机客户在 1950 年代后期编写了最早的操作系统,随后几十年出现了我们今天更清楚地认识到的操作系统,包括 IBM 的 OS/360 和贝尔实验室的 Unix。
操作系统在系统中执行各种有用的功能,但将这些功能归纳为三个一般类别会很有帮助。
首先,操作系统位于物理系统之上,并与硬件对话。这使应用程序软件免受许多硬件实现细节的影响。除其他好处外,这为硬件创新提供了更大的自由度,因为是操作系统承担了支持新处理器和服务器设计其他方面的大部分负担,而不是应用程序开发人员。可以说,随着机器学习和其他关键软件趋势不再依赖 CMOS 工艺缩放来实现可靠的逐年性能提升,硬件创新将变得更加重要。随着混合云架构的日益普及,这种抽象层提供的可移植性只会变得更加重要。
其次,操作系统(特别是内核)执行应用程序所需的常见任务。它管理进程调度、电源管理、root 访问权限、内存分配以及保持系统高效安全运行所需的所有其他底层内务处理和操作细节。
最后,操作系统充当其自身的“用户空间”程序(例如日志记录、性能分析等系统实用程序)和用户编写的应用程序的接口。操作系统应通过基于开放标准的 API(应用程序编程接口)为应用程序提供一致的接口。此外,商业支持的操作系统还带来了与第三方应用程序提供商的业务和技术关系,以及将其他受信任内容添加到平台的内容渠道。
在过去的几年中,计算技术格局发生了很大变化。这已经改变了我们对操作系统的看法以及它们的作用,即使它们仍然像以往一样重要。考虑一下应用程序打包方式的变化、计算基础设施的快速增长以及威胁和漏洞形势。
容器化
在 Linux 容器中运行的应用程序在一个物理服务器上运行的单个操作系统副本中隔离。这种方法与基于 hypervisor 的虚拟化形成对比,在基于 hypervisor 的虚拟化中,每个应用程序都绑定到客户操作系统的完整副本,并通过中间的 hypervisor 与硬件通信。简而言之,hypervisor 虚拟化硬件资源,而容器虚拟化操作系统资源。因此,容器消耗的系统资源(例如内存)很少,并且基本上不会给应用程序带来性能开销。
容器化在很大程度上依赖于熟悉的操作系统概念。容器建立在 Linux 内核的进程模型之上,并辅以额外的操作系统功能,例如命名空间(例如,进程、网络、用户)、cgroup 和权限模型,以隔离容器,同时给人一种每个容器都是一个完整系统的错觉。
通过添加机制以可移植的方式将应用程序组合为一组层并在环境中以低开销移动它们,容器最近变得非常有趣。在这方面,容器是通用概念的实现,该概念在各种伪装中已经存在一段时间了,但从未真正成为主流。(例如,考虑应用程序虚拟化。)今天一个重要的变化是开源和开放标准的角色大大增加。例如,开放容器倡议是 Linux 基金会下的一个协作项目,专注于围绕容器格式和运行时创建开放行业标准。
同样重要的是,容器技术与软件定义的基础设施(例如 OpenStack)正在构建到 Linux 中并与其一起进行工程设计。计算机软件的历史清楚地表明,将技术集成到操作系统中往往会导致更广泛的采用以及围绕这些技术的生态系统发展的良性循环——例如网络中的 TCP/IP 或各种安全相关功能。
规模
另一个重大转变是我们越来越多地从数据中心的规模点而不是单个服务器的角度来考虑计算资源。当然,这种转变从网络的早期就开始了。然而,今天我们看到高性能计算“网格”技术正在为传统的批处理工作负载以及较新的面向服务的风格进行重新构想。
基于松散耦合的“微服务”(在容器中运行)的应用程序(无论是否具有持久存储)与容器完美契合,正在成为一种流行的云原生方法。这种方法虽然让人联想到面向服务的架构 (SOA),但它展示了一种更实用和开放的方式来构建复合应用程序。微服务通过细粒度、松散耦合的架构,允许应用程序架构反映单个明确定义的应用程序功能的需求。快速更新、可伸缩性和容错能力都可以在复合应用程序中单独解决,而在传统的单体应用程序中,防止对一个组件的更改对其他地方产生意外影响要困难得多。
从操作系统的角度来看,这种转变的一个重要方面是,将“计算机”视为数据中心资源的聚合集合越来越有意义。当然,引擎盖下仍然有单个服务器,它们仍然必须进行操作和维护——尽管是以高度自动化和无需人工干预的方式。然而,容器调度和管理有效地构成了工作负载运行和多层应用程序如何组成的新相关抽象——而不是服务器。
云原生计算基金会 (CNCF) 也在 Linux 基金会下成立,旨在“推动采用一种新的计算范例,该范例针对能够扩展到数万个自愈多租户节点的现代分布式系统环境进行了优化”。CNCF 下的一个项目是 Kubernetes,这是一个最初由 Google 设计的开源容器集群管理器,但现在有来自 Red Hat 和其他地方的 广泛的贡献者。
安全
应用于虚拟化世界的所有安全加固、性能调整、可靠性工程和认证仍然适用于容器化世界。事实上,在容器化和软件定义的基础设施世界中,操作系统在提供安全性和资源隔离方面承担着比专用硬件或其他软件可能处理某些任务时更大的责任。Linux 受益于使用开源模型构建的全面安全强制功能工具箱,包括用于强制访问控制的 SELinux、广泛的用户空间和内核加固功能、身份管理和访问控制以及加密。
然而,今天,信息安全也必须适应不断变化的格局。无论是为客户和合作伙伴提供对某些系统和数据的访问权限,允许员工使用自己的智能手机和笔记本电脑,使用来自软件即服务 (SaaS) 供应商的应用程序,还是利用公共云提供商的按需付费实用程序定价模型,都不再存在单一的边界。
开放的开发模型允许整个行业就标准达成一致,并鼓励其最聪明的开发人员不断测试和改进技术。为 Linux 和其他开源软件提供及时安全反馈的大量公司和其他组织清楚地证明了在社区内部和社区之间协作解决问题是如何成为技术的未来。此外,开源开发过程意味着,当发现漏洞时,整个开发人员和供应商社区可以协同工作,以协调的方式更新代码、安全公告和文档。
当操作系统的作用不断发展和扩展以包括 Linux 容器等新功能时,这些相同的流程和实践也适用于混合云基础设施。此外,当组件以微服务和其他松散耦合架构的形式重用时,在(构成应用程序时)维护对这些组件及其依赖项来源的信任变得更加重要,而不是更不重要。
有些事情会改变,有些事情不会改变
与操作系统开发和操作相关的优先级肯定发生了变化。今天的重点更多地是关于大规模自动化部署,而不是自定义、调整和优化单个服务器。与此同时,对不再明确定义的安全边界的威胁的速度和普遍性都在增加,这需要系统地了解风险以及如何快速缓解漏洞。
将所有这些加在一起,应用程序变得更具适应性、更具移动性、更具分布式、更强大且更轻量级。它们的放置、配置和保护必须变得更加自动化。但它们仍然需要在某些东西上运行。一些坚实的东西。一些开放的东西。一些能够为新需求和新型工作负载而发展的东西。而这“某些东西”就是一个(Linux)操作系统。
5 条评论