什么是Unikernel?
What is a unikernel?
我是 unikernels 的新手,以下链接对我理解它们没有太大帮助:
- https://searchitoperations.techtarget.com/definition/unikernel
- https://en.wikipedia.org/wiki/Unikernel
- 什么时候使用 unikernel 比较好?
- 就代码大小而言,unikernel 比 microkernel 小多少?
一句话,(应用程序 + unikernel)在管理程序(云)上称为工作负载 运行 相当于嵌入式世界中裸机上的独立应用程序 运行。
当应用程序(工作负载)不使用大多数 OS 和设备驱动程序服务时,云中的 Unikernel 更好。
Unikernel 仅使用内核的已用特性编译,而不像微内核那样具有必要的特性,因此体积很小。
术语 "unikernel" 和 "microkernel" 的意思不同,并不是两个真正的两个对立面,也不是您需要选择的两个选项:
"microkernel" 是一个较旧的术语,是一种内核 design,与 monolithic 内核形成对比。在单片内核中,顾名思义,整个内核是一个单独的程序,它实现了用户应用程序所需的内核 APIs(例如,Unix 系统调用、线程、进程、文件系统等) .与此形成对比的是,在微内核设计中,我们有一个 "microkernel",一个非常小的内核,它实现了一个小的 API(例如,执行线程、权限和消息传递的非常基本的概念),在它之上是一个更大的内核部分,它实现了应用程序所需的完整 APIs——实际的文件系统、行为类似于 Unix 进程的进程、系统调用等等。在 1990 年代初期,有一种学术理解认为编写整体内核变得太难且容易出错,微内核是未来的发展方向,但后来出现了 Linux(这是一个整体内核)并制作了这个结论变成笑话。今天,您不应该根据它是使用微内核还是整体内核来选择内核。这是用户很少关心的实现细节。
"unikernel" 是一个较新的概念。传统内核以能够在同一台物理机器上多路复用许多不同的用户和应用程序而自豪。 1974 年关于 Unix 的著名论文被称为 "The UNIX time-sharing system",因为分时(即多路复用多个用户和应用程序)是 OS 最重要的目标之一。但是今天,随着对虚拟机而不是物理机的关注,有一种不同的方式(即管理程序)可以将物理机拆分为不同的虚拟机。所以很多时候,每个虚拟机只有 运行 属于一个所有者的一个应用程序。这为 运行 trimmed-down 内核提供了一个机会,它不需要支持传统内核支持的很多东西: 不需要支持不同用户之间的隔离;无需支持数以千计的驱动程序(所有已知的虚拟机管理程序都需要一小部分驱动程序);无需支持不同进程间的隔离
修剪所有不必要的东西使内核更小,这对快速部署新 VM 有很大好处,减少内存使用,还可以提高性能。例如,您可能听说最近对 Linux 内核进行了修补,以修复当代 CPU 中的 "Meltdown" 漏洞。该修复会减慢 Linux 上的系统调用和上下文切换速度,并且需要修复,因为没有它一个进程可以读取其他进程的内存。但是,如果我们知道没有其他进程 - VM 上只有一个应用程序 运行ning - 我们不关心。因此,Unikernel 不需要通过崩溃变通方案来降低自身速度。系统调用可以像函数调用一样快,上下文切换要快得多,等等
例如 OSv 等一些 unikernels 执行了上述操作,并提供了一个模拟传统内核(即 Linux)但没有不受支持的功能(例如多个)的内核用户或多个隔离的进程(尽管未隔离的线程 受到 支持)。其他 unikernels 在 trim 内核的探索上走得更远,并为每个应用程序提供不同的内核构建,其中包括该特定应用程序所需的特定功能。例如,对于 运行 TCP 应用程序,您可以使用仅支持 TCP 协议但不支持 UDP 的内核。您可以将其视为内核和应用程序链接在一起形成一个统一的内核应用程序,它直接在管理程序上运行。
何时以及为何使用(上述任何变体的)unikernel 是一个悬而未决的问题。当然,如果使用少量磁盘或内存是一个问题,那么 unikernel 是一个不错的选择。如果您担心安全性并计划审计您的代码,那么 unikernel 需要审计的代码要少得多。在需要非常快速启动的应用程序中(例如,实现 "function as a service"),unikernel 允许非常快速的启动,显着少于 1 秒,因为启动做的事情少得多 "generic" 并且专注于你的应用程序真的需要。这些示例还可以告诉您什么时候不应该费心考虑使用 unikernel: 如果您的应用程序无论如何都使用大量磁盘和内存(例如,数据库应用程序),那么减少内核的大小不会有太大帮助.如果您的应用程序 运行s 持续数小时,快速启动并不重要。如果您的应用程序使用了很多 OS 功能,我上面描述的许多更专业的 unikernel 可能无法提供您的应用程序所需的所有功能。
Unikernel 是简单的单一应用程序操作系统。 unikernels 不是在 linux 之上部署我们的软件,而是在我们的应用程序之外创建一个操作系统,并且 运行 只有那个应用程序——没有别的。
没有 usernames/passwords 或 sshin' 进入应用程序的概念,因为它只是 运行 一个应用程序。传统上,unikernel 很难使用,因为它们过去需要专家级的系统知识。
更多信息:https://bootsity.com/php/running-php-unikernels-on-google-cloud
我是 unikernels 的新手,以下链接对我理解它们没有太大帮助:
- https://searchitoperations.techtarget.com/definition/unikernel
- https://en.wikipedia.org/wiki/Unikernel
- 什么时候使用 unikernel 比较好?
- 就代码大小而言,unikernel 比 microkernel 小多少?
一句话,(应用程序 + unikernel)在管理程序(云)上称为工作负载 运行 相当于嵌入式世界中裸机上的独立应用程序 运行。
当应用程序(工作负载)不使用大多数 OS 和设备驱动程序服务时,云中的 Unikernel 更好。
Unikernel 仅使用内核的已用特性编译,而不像微内核那样具有必要的特性,因此体积很小。
术语 "unikernel" 和 "microkernel" 的意思不同,并不是两个真正的两个对立面,也不是您需要选择的两个选项:
"microkernel" 是一个较旧的术语,是一种内核 design,与 monolithic 内核形成对比。在单片内核中,顾名思义,整个内核是一个单独的程序,它实现了用户应用程序所需的内核 APIs(例如,Unix 系统调用、线程、进程、文件系统等) .与此形成对比的是,在微内核设计中,我们有一个 "microkernel",一个非常小的内核,它实现了一个小的 API(例如,执行线程、权限和消息传递的非常基本的概念),在它之上是一个更大的内核部分,它实现了应用程序所需的完整 APIs——实际的文件系统、行为类似于 Unix 进程的进程、系统调用等等。在 1990 年代初期,有一种学术理解认为编写整体内核变得太难且容易出错,微内核是未来的发展方向,但后来出现了 Linux(这是一个整体内核)并制作了这个结论变成笑话。今天,您不应该根据它是使用微内核还是整体内核来选择内核。这是用户很少关心的实现细节。
"unikernel" 是一个较新的概念。传统内核以能够在同一台物理机器上多路复用许多不同的用户和应用程序而自豪。 1974 年关于 Unix 的著名论文被称为 "The UNIX time-sharing system",因为分时(即多路复用多个用户和应用程序)是 OS 最重要的目标之一。但是今天,随着对虚拟机而不是物理机的关注,有一种不同的方式(即管理程序)可以将物理机拆分为不同的虚拟机。所以很多时候,每个虚拟机只有 运行 属于一个所有者的一个应用程序。这为 运行 trimmed-down 内核提供了一个机会,它不需要支持传统内核支持的很多东西: 不需要支持不同用户之间的隔离;无需支持数以千计的驱动程序(所有已知的虚拟机管理程序都需要一小部分驱动程序);无需支持不同进程间的隔离
修剪所有不必要的东西使内核更小,这对快速部署新 VM 有很大好处,减少内存使用,还可以提高性能。例如,您可能听说最近对 Linux 内核进行了修补,以修复当代 CPU 中的 "Meltdown" 漏洞。该修复会减慢 Linux 上的系统调用和上下文切换速度,并且需要修复,因为没有它一个进程可以读取其他进程的内存。但是,如果我们知道没有其他进程 - VM 上只有一个应用程序 运行ning - 我们不关心。因此,Unikernel 不需要通过崩溃变通方案来降低自身速度。系统调用可以像函数调用一样快,上下文切换要快得多,等等
例如 OSv 等一些 unikernels 执行了上述操作,并提供了一个模拟传统内核(即 Linux)但没有不受支持的功能(例如多个)的内核用户或多个隔离的进程(尽管未隔离的线程 受到 支持)。其他 unikernels 在 trim 内核的探索上走得更远,并为每个应用程序提供不同的内核构建,其中包括该特定应用程序所需的特定功能。例如,对于 运行 TCP 应用程序,您可以使用仅支持 TCP 协议但不支持 UDP 的内核。您可以将其视为内核和应用程序链接在一起形成一个统一的内核应用程序,它直接在管理程序上运行。
何时以及为何使用(上述任何变体的)unikernel 是一个悬而未决的问题。当然,如果使用少量磁盘或内存是一个问题,那么 unikernel 是一个不错的选择。如果您担心安全性并计划审计您的代码,那么 unikernel 需要审计的代码要少得多。在需要非常快速启动的应用程序中(例如,实现 "function as a service"),unikernel 允许非常快速的启动,显着少于 1 秒,因为启动做的事情少得多 "generic" 并且专注于你的应用程序真的需要。这些示例还可以告诉您什么时候不应该费心考虑使用 unikernel: 如果您的应用程序无论如何都使用大量磁盘和内存(例如,数据库应用程序),那么减少内核的大小不会有太大帮助.如果您的应用程序 运行s 持续数小时,快速启动并不重要。如果您的应用程序使用了很多 OS 功能,我上面描述的许多更专业的 unikernel 可能无法提供您的应用程序所需的所有功能。
Unikernel 是简单的单一应用程序操作系统。 unikernels 不是在 linux 之上部署我们的软件,而是在我们的应用程序之外创建一个操作系统,并且 运行 只有那个应用程序——没有别的。
没有 usernames/passwords 或 sshin' 进入应用程序的概念,因为它只是 运行 一个应用程序。传统上,unikernel 很难使用,因为它们过去需要专家级的系统知识。
更多信息:https://bootsity.com/php/running-php-unikernels-on-google-cloud