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