未来 需要的是 轻量 的 操作系统 而 不是 容器
未来 需要的是 轻量 的 操作系统 , 而 不是 容器 。
对于 客户端 、桌面 , 需要的是 满足用户需求的 ,生活化的 智能化的 操作系统 。
对于 服务器端 , 需要 的 是 轻量 的 操作系统 。
所谓 轻量, 就是 简单 直接 的 给出 服务器 需要 的 功能。 或者说, 服务器端程序 需要 的 功能 , 或者说, 开发者 需要 的 功能 。
设备驱动 进程调度 虚拟内存 网络通信 , 这些 都已经 发展 到 成熟 和 饱和 了。
并不难。 也并不大。 所谓 并不大 。 是指 , 这些 功能 的 代码量 并不需要 很大 。 在 不运转 时 占用 系统的 资源 很 小 。
这些 是 现在 可以做到 的 , 也是 现状 。
我在另一篇文章 《浅谈 操作系统原理》 https://www.cnblogs.com/KSongKing/p/9495999.html 中 对 操作系统 的 基本 组成 和 原理 作过分析 。
而 所谓 的 各种 对于 服务器 能力 的 扩展 , 本质上 , 都是 围绕 网络通信 为 重点 来 发展 的 。
参考 下面 这 2 篇 文章:
https://blog.csdn.net/mawming/article/details/51941771
https://blog.csdn.net/wodeyuer125/article/details/43274527
未来的 服务器操作系统 , 要实现的, 是 把 网络通信(Socket) 的 能力 发挥 到 CPU 内存 网卡 的 极限, 就这件事 。
还有 另外一件事, 就是 线程 的 轻量化 :
减小 线程上下文,减少 线程切换的工作量,线程切换 轻量化,线程 轻量化, 是 操作系统 轻量化 的 一个 方向 。
关于 线程 的 轻量化, 可参考 《后线程时代 的 应用程序 架构》 https://www.cnblogs.com/KSongKing/p/10228842.html
一个 轻量 的 操作系统, 实现 了上述 的 功能 。 就 足够 了 。
简单明了 的 内核 , 清晰 的 意图 , 明确 的 要 解决 的 问题 。
如果 还不够 , 自己 改写 内核 。 简单明了 意图清晰 的 轻量 操作系统 鼓励 你 这么 做 。
如果 需要 “镜像” (用于 部署 程序), 那么 轻量 操作系统 可以 提供 镜像 。
未来 ,只需要一块 智能的 主板,可以灵活的配置硬件配伍就行。硬件是指 CPU 内存 外存 等 。
外存的存储空间分配是由外存的固件程序实现 。
对于 服务器 能力的扩展 , 还有 集群治理 和 突破一些传统架构上的瓶颈 。
未来 是 服务器 “团队作战” 的时代 , 所以需要 集群治理 。
传统架构上的瓶颈现在可以看到的主要是 同步/互斥(Lock) 可能对未来 并行计算 和 大幅利用多核资源 造成的瓶颈 。 这部分我在 《漫谈 C++ 内存堆 实现原理》 https://www.cnblogs.com/KSongKing/p/9527561.html 文中大概提到 , 主要提到了 堆分配 和 套接字(Socket) 受到 同步/互斥(Lock) 的限制 。
集群治理 并不难 , 可以偏重于硬件 , 通过一些 总线 之类 的方式 , 也可以是比较灵活的 ,偏重于软件的方式 。 软件的方式主要是 网络通信 , 通过 网络通信 来实现 服务器 之间的通信的协作 。
这并不难 , …… 比如 , 我举个例子, ……
……
可以看看 《利用 MessageRPC 和 ShareMemory 来实现分布式并行计算》 https://www.cnblogs.com/KSongKing/p/9490915.html ,
说到这里 , 我又要笑了 , 不是我又推销我的研究成果 , 而是这真的不难 , 就像上面 MessageRPC 和 ShareMemory 这样 , 再加些 协作算法就差不多了吧 ?
我想说的另一点是 , 这并不难 , 我们不需要一次又一次的 去 创造一些 “抽象层” , 没有必要 。
一次又一次的 创造 “抽象层” 会让事情复杂 。 实际上 , 这本来是 很简单的一个事情 。
堆 确实是比较重要的一个 基础模块 。 是 动态分配 内存 , 动态使用 内存 的 基础 。 算法也有那么一点啰嗦和小复杂 。 但 实现了 堆以后 , 就可以方便的 动态使用 内存了 。
操作系统 的 虚拟内存 可能比 堆 还简单一点 , 因为 虚拟内存 页 的 大小 是固定的 , 而 堆 里的 内存块 的 大小 数量 起始地址 可能是任意的 。
少搞一点 框架 , 大多数时候 , 库(Lib) 就足够了 , 库 是 最友好 的 。
还可以看看我写的另外一篇文章 《谈谈在 .Net 平台上的 软件生态 和 软件生产力》 https://www.cnblogs.com/KSongKing/p/9574379.html
《程序员的职业归属》 https://www.cnblogs.com/KSongKing/p/9380112.html
我们来看看一篇文章 《云架构师进阶攻略(2)》 https://sq.163yun.com/blog/article/215552048311889920?tag=M_tg_546_65
这是一个系列的文章, 这是 第 2 篇,
文章的内容 很多, 很详实 。
我们再看看文中的一篇 链接 的文章 《容器平台选型的十大模式:Docker、DC/OS、K8S谁与当先?》
如果 仅仅 是 为了 镜像(部署),
那么 , 操作系统 也可以, 只需要 在 操作系统 里 增加一个 部署工具 就可以了 。
这样 就 不需要 资源分配 容器隔离(安全) 等 复杂技术 ,
当然 也就 无所谓 容器 一说了 ,
只需要 操作系统 集成 一个 部署工具 就可以 。
这样的话, 操作系统(虚拟机) 也可以做到 镜像很小(只包括 应用), 秒级启动, 快速复制 。
这里的 镜像 当然不是 虚拟机镜像, 而是 应用 的 镜像 ,
我们这里所说的是 不需要 频繁 的 创建销毁 虚拟机, 但是可以 快速的 复制和部署 应用镜像 到 虚拟机 上 。
或者说, 创建销毁 虚拟机 的 速度 可以和 复制部署 应用镜像 的 速度 处于 2 个 数量级 上 。
也可以说, 这种方式也使得 迁移 的 速度 不受 虚拟机镜像 大小 的 限制 了 。
或者说, 迁移 速度 和 虚拟机镜像 大小 无关 了 。
迁移 速度 只和 应用镜像 大小 有关 。
因为在这种架构下, 虚拟机镜像 不包含 应用, 只是标准的 操作系统 。
所以,
即使是 异地迁移, 异地环境 也应该会提前准备好 需要的 虚拟机镜像(操作系统), 所以 迁移 速度 和 虚拟机镜像 无关,
只和 应用镜像 有关 。
事实上, 我在另外一篇文章《谈谈 ServerFul 架构》 https://www.cnblogs.com/KSongKing/p/9805610.html 中 谈到过 以 服务器(Server) 为 单元(基本计算单位) 的 架构,
Server + 部署工具 = Server 集团作战
即, “Server + 部署工具” 就可以实现 “Server 的 集团作战” 了 。
当然, 部署工具, 包含了一个 镜像 的 标准 和 实现, 我想 这并不难 。
核心算法 就是 复制文件 么 。:) ^^ ^^ ^^
可参考另一篇文章 《我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager》 https://www.cnblogs.com/KSongKing/p/9899199.html
有网友说, “这个所谓的轻量级操作系统,更像一个加强版容器,而不是操作系统” ,
是的, 也不是的,
虚拟机 操作系统 容器, 本来 就是 同一种 性质的 技术, 可以说 都是 操作系统 技术,
就看 “壳” 在 外 ,还是 “壳” 在内 。
我之所以 倾向于 轻量操作系统 而不是 容器,
是因为,
操作系统 是一个 广泛接受 的 入口(抽象层) ,
没有必要 再造一个 入口(抽象层),
再造一个 入口 导致的 结果 就是 复杂 。
实现新的 抽象层(容器) 的 技术 是 复杂的,
使用 容器 的 技术 也是 复杂的,
复杂 通常会 束缚 战斗力 爆发力 张力 。