开场0:00
欢迎收听 IPN Podcast, 网络旗下的 IT 技术主题娱乐节目 《 内核恐慌 》。 我们号称 "Hardcore",但是也没有什么干货 ; 想听的人听 ,不想听的人就别听 。
本节目的网址是 ipn.li/kernelpanic。 我们推荐大家使用 Podcast 客户端订阅节目 , 详情请访问 ipn.li/faq。 欢迎你为本节目捐款 , 捐款地址是 ipn.li/kernelpanic/donate。
捐款金额随意 , 只要是能被 8 整除的正整数就可以 。 捐款不会给你带来什么 ,不捐也不会让你失去什么 。
我们的口号是 "Hyper is hyper awesome"。 今天我们特别荣幸请到一位嘉宾 , 呃 ,Simon, 薛磊 。 薛磊 , 你给大家介绍一下自己吧 。
哈喽 , 大家好 。 哎 , 我叫 Simon, 然后我现在是 , 呃 , 从事的是一项基于容器的一个创业项目 , 然后目前呢是处于初创阶段 。
之前我从事的主要是内核相关的工作 , 之前也非常热衷地关注于内核相关的所有这个创业的相关的项目 , 然后包括最近特别火的一个容器 。
所以呢 ,也加入了这个以容器或者说以 Hypervisor 为主题的一个创业项目 。 非常荣幸地能参加 " 内核恐慌 " 这个节目 , 之前也很关注 。
啊 , 非常谦虚哈 ,因为那个 Simon 的自我介绍很低调 。其实 Simon 你之前是在这个 SUN, 就是那后来人家卖给 Oracle 的公司 ,也就是 Java 的诞生地 , 对吧 ?
对对对 。其实说到 SUN,其实有更多的人其实只知道是 Java,但是除了 Java 之外, 它有非常非常多的优秀的项目 , 比如说 CoreOS, 就是 Unix 的一个变种 。
可能目前很多 Linux 内核以及 Linux 分化版本上面的软件 ,以及内核的模块都是来自于 CoreOS。 比如特别著名的 ZFS, 当然可能做存储的人都知道 ZFS 它的一个特别强大的功能 ,以及调试内核的时候所用到的一些工具 , 比如说 MDB, 就是 Linux 上类似的就是 GDB, 然后一种追踪内核的 ,不不不局限于内核 , 除了内核还有应用程序都可以追踪 DTrace, 就像目前的
System Type 以及 KType 以及类似这种 Trace 工具 , 应该说大多数都来自于 DTrace 的设计理念 。
非常酷 , 非常酷 。 那个 Simon 你之前在 SUN 的话 ,是具体是做哪一块工作呢 ?
哦 , 我之前在 SUN 的时候是北京研发中心 , 北京研发中心这边主要的一大块呢是大概一个 20 多人的一个团队 , 主要是从事的是内核 ,CoreOS 的一个存储 , 存储协议的一个研发 , 主要集中在 SCSI 协议 。
这个可能比较底层了 , 可能不做内核的人不太清楚这一块东西 。 这就是一个 , 呃 , 相当于一个标准的网络存储协议 , 比如就现在咱们说的硬盘 , 就 SCSI 硬盘 , 像什么 SATA 硬盘等等等等等等 , 都是走的 SCSI 协议 。
所以呢 , 我们其实在这一条线上去做开发 , 可能就是也比较偏存储一点 ,也比较偏内核一点 。
SCSI 啊 , 当年还是跟那个什么 IDE 那些 , 哎 ,是叫 IDE 吧 ?
对对对 。
对 , 对应的那个时候 。 所以它现在后来是发展成了那个是 SATA 对那个 SAS, 对吧 ?
对对对 。
SAS 两个协议 。 然后那个 SCSI 是 SAS 的前身 , 如果我理解没错的话 。
对 ,是的 。
啊 ,OK。 所以你之前的主要工作是在做这个存储协议这一块 ?
对 ,是 。
啊 , 所以也是非常一个 Hardcore 的人, 特别适合我们节目的这个主题哈 。
对对对 。 所以我我最开始最开始关注疯狂内核那个 , 呃 , 这个节目的时候 , 就就就就因为因为自己从事这个行业嘛 , 所以就是也也也关注这个 , 发现还是挺有意思的 。
虽然我们节目一直都号称自己非常水 , 然后这一期终于有一个够硬的干货 , 满足大家的要求了 。OK。
啊 , 那个 Simon 刚才你提到你现在在做一个跟这个容器相关的 , 当然我们节目在之前的某一期里面也提到过 , 呃 , 这个概念叫做 Container, 对吧 ?
对对对 。
然后但是当然我们毕竟我跟吴涛两个人都属于这个东西的一个叫什么用户或者说是门外汉 ,但是你其实是在做这个相关的开发的 。
所以本期呢 , 我们可能会就这个问题进入一些更加深入的探讨 。
OK。
所以你现在做这间公司这个这个这个项目叫什么 ?
项目简介4:55
呃 ,其实这个项目就叫 Hyper, 然后 Hyper 这个我们的这个公司呢就叫 HyperHQ。 然后, 呃 , 主要为什么取这个名字呢 ,其实也是想 , 呃 , 针对国外的用户或者一些企业或者 Partner 来去做 。
所以 , 呃 , 这个中文的名字不太好听 , 所以大家也就忽略吧 。 大家更多关注可以关注我们的那个英文的网站 , 然后可能我们的中文网站还在做 ,也也也也也也没有特别的一个进展 。
但是所以就是我们的一个定位吧 , 可能跟之前的国内的一个创业团队不太一样 , 我们还是希望能够做的足够精致吧 , 属于这个 。
OK,awesome。 对 , 这个这个事情说来就非常巧啊 。其实我跟 Simon 的认识还是一个机缘巧合 , 就有一天我收到了一封这个邮件 , 然后发发给我的地址是对应到我的那个 GitHub 的账号的那个邮箱的 。
然后是 Simon 给我来了一封信 , 然后他是问我说能不能 ,因为我当时在 GitHub 上面有一个项目 ,是是用这个命令行控制 , 通过这个 VirtualBox 的命令行工具去控制它启动这个虚拟机啊 , 创建虚拟机这种那样的基本的小工具啊 , 是一个 Golang 的一个库吧 。
然后当时 Simon 给我来了一封邮件说能不能用这个 ,因为当时我在那 GitHub 上面那个 repository 里面没有写这个授权协议啊 , 就这点我还是当时我就非常感动 ,因为你知道很多这个大家都是直接拿来主义嘛 , 对吧 ?
对 。
我们也不会问这种事情的 。 所以在这方面我觉得像 Simon 啊 , 还有 Hyper 这个团队对这个版权意识还是非常非常 , 呃 , 这个看重的 , 这点我觉得非常非常难得 。
对对对 , 就是因为我们其实我们这个项目 , 呃 , 据据据我们所知 ,因为国内很少有这种创业团队去做开源项目 ,而我们这个 Hyper 其实是一个开源项目 。
既然开源项目的话 , 我们也是希望能够融入足够多的 , 呃 , 社区 , 足够大的社区 , 然后吸引更多的 , 呃 , 开发者 。
然后所以在这方面其实 , 呃 ,也也也是尽自己微薄之力 , 然后能尽量的 , 呃 , 改善一下国人在在在在开发者在这全球的开发者的这种印象吧 。
因为可能更多的提到可能国内的工程师 , 当然只能是少少数吧 ,他就拿来主义 , 让让让让就直接毁坏了这个圈子的名声啊 。
嗯哼 , 嗯 , 对对对 。 呃 , 刚才我们聊了一堆这个周边的情况啊 , 最后还是回到这个 Hyper 这个本质上 。
说 , 呃 ,在这个说之前 , 我们先把这个网址亮出来吧 , 这个网址是非常酷的一个域名叫做 hyper.sh。
对 。
呃 , 当时你们怎么想的 , 会启用这个一个 , 呃 , 这个这么一个域名 ?
呃 ,因为毕竟其实我我们的就是到到到的 SH 还是偏技术或者偏 hack 一点 ,因为 SH, 呃 , 你可以认为是 bash 啊 , 或者是认识认认为是其他的一些那个 。
Shell。
Shell, 对对对 。 所以 , 呃 , 所以我们当时也也也也是用了这种 , 呃 , 当然也是追求足够精简那个 , 呃 , 短一些 , 然后就选用了这个域名。
然后当时我们之前参加挺有意思的一个一个一个一个事情 , 就是我们之前参加一个云计算的大会 , 然后很多人过来说 , 哎 , 你们这家公司成立在上海是吗 ?
哈哈哈 。
对 ,但但其实到 SH,SH 是哪个国家的这个国家地局来着 ?
呃 , 这这这我还真真忘了 。
OK, 这个我们回头回头查一下 。
对对对 。
但是一般我们会把这个一些 Shell 的工具啊 , 会会用这个到 SH 这个顶级来做 。
对 。
然后这个网站 , 当时那个 Simon 给我来信的时候 , 我就就我就问到这个项目网站之后, 我就看了一下, 真是令我非常惊艳啊 ,因为这确实不像是一个国内的团队做出来那种风格 ,因为整个就是很很这个很美国的那种 , 很很酷很嘻哈的那种创业团队做出来的这种技术展示的页面 , 非常精美 , 非常漂亮 。
呃 , 所以说了这么多 , 这个我们还没有介绍 Hyper 到底是一个什么样的东西 。Simon 你能够用这个一句简单的话介绍一下 Hyper 是一个就给我们不太熟悉这个东西的听众哈 , 介绍一下 Hyper 到底是个什么样的工具吗 ?
呃 ,其实我觉得如果先介绍 Hyper 之前 , 应该先 , 呃 ,在介绍 Hyper 之前最好先介绍一下 Docker,因为可能很多人没有了解过 , 呃 ,在这个领域 。
核心概念9:14
然后, 呃 , 如果大家知道 Docker 的话 , 那么说 Hyper 的话就就很简单 , 一句话就可以说说说明白了 。
OK。
OK, 咱们咱们先说 Docker, 慢慢慢来 。
OK。
呃 ,Docker 呢 , 它其实 , 呃 , 属属于一个新兴的项目 , 大概也存在了两到三年, 它发展速度相当相当惊人, 大概现在 Docker 的公司大概在估值 10 亿美金吧 ,10 亿美金 , 超过 10 亿美金了 。
嗯哼 。
嗯 , 然后它其实本质上是基于容器 , 就是 , 呃 , 做的一组管理工具 , 我我我是这么这么这么理解 。
然后它将一些镜像文件 , 比如 , 呃 ,Ubuntu 啊 , 各各种 Linux 分化版本都可以 , 然后, 呃 , 作为一个运行式环境 , 然后装到 , 呃 , 容器里面 , 然后去增加网络 , 增加存储 , 这这些所有的那个组件 ,component, 然后使之 , 呃 , 作为一个轻量级的虚拟化工具来去运运行 。
然后这样的话 , 就相当于在同一台机器上, 我可以虚拟出来多个单独的容器 , 然后这样去运行不同的 APP。
呃 ,Docker 一个其中一个理念就是 , 或者说容器的一个理念就是一个容器里面只运行一个 , 呃 ,APP, 就是相当于我只运运行一个 Tomcat, 或者说类似那个 , 呃 , 一一种那个软件 。
然后这样的话呢 , 来做到使每个容器尽量的精简 , 然后更便于管理 。 它它其实是为了 , 呃 , 为为这些 , 呃 , 运营 , 或者说为这些开发测试提供一个 , 呃 , 呃 , 比较一致的一个运行式环境 。
然后这样的话 , 就是你可以自己提交你自己的 container 的镜像 , 然后直接提交过去之后, 任何人都可以下载 , 这样的话就保证了一个非常一致的运行式环境 。
就像 , 呃 , 就就 , 呃 , 解决了一些像咱们几年前开发软件就是 , 呃 ,Java 各种配置环境变量 , 各种各种那个参数配置等等 , 这这这些问题就迎刃而解 。
我直接下载一个镜像 , 直接运行 , 就可以跟 , 呃 , 呃 , 就比如我是一个测试人员 , 就可以跟开发人员的运行式环 , 呃 , 那个开发 , 呃 , 开发环境保持一致 , 就解解解决很多就环境相关的问题吧 。
嗯哼 。
呃 , 然后说到容器 , 容器它是 , 呃 ,Docker 用用到容器作为运行式环境 , 然后容器的这个概念呢 , 就是相当于 , 呃 , 将一个 house 的主机分成多个子的容器来 , 呃 , 来来来来去运行 APP。
呃 , 它这属于轻量级 , 轻量级的另外一个好 , 一个一个好处呢 , 就是就是速度足够的快 。 然后但是它一个弊端呢 , 就是它因为它是 shell 的 cron, 它是在一个内内核上面去运行 , 所以它也造成了一个安全性的隐患吧 。
所以所以所以这这就提到了我们存在的意义 , 就是 , 呃 , 解决这个安全性的问题 , 就是因 , 呃 , 这个容器它是 shell 的 cron,OK, 我们不用 shell 的 cron,而是用 hypervisor, 就是用 VM 来代替容器来去运行 , 呃 , 呃 ,Docker 的 image。
然后这样的话呢 , 就是解决了 , 呃 ,Docker 的一个安全性问题 。 但是因为 , 呃 , 众所周知大家用过 VMware, 用过 Waterbox, 都知道它的启动速度可能 , 呃 , 就是可能会比较慢 , 就即即即使在你的非常好的高端的服务器上面 , 大概也也要在一一两分钟或者是两三两三分钟吧 。
没错 。
对 , 所以 , 呃 , 我们也是极其极致的优化 , 让它的启动速度大概在毫秒级别 , 然后是 。
毫秒级别 。
对对对对 , 大概在 。
所以刚刚才是从这个一两分钟 , 至少就是一百秒一级别 , 我们现在已经到毫秒级别了 。
对对对对 。
有四个数量级的提升啊 。
对对对 , 所以 , 呃 , 大概我们的测试在比较好的机器上大概在 300 毫秒 。
OK, 就 0.0.3 秒左右 。
对对对对 , 所以这个相对于 , 呃 , 容器的运行 , 呃 , 的启动速度来说 , 已经算是 , 呃 , 差距不大了 。
所以而而且它的安全性有 , 呃 , 很大的提升 , 这样的话也就是成为我们一个核心的竞争力 , 或者说一个存在的 , 呃 , 呃 , 呃 , 基于这个目的来来来来去做的这个这个东西 。
所以就是说这个 Hyper 是一个可以快速启动的这个虚拟机 , 可以这么理解吗 ?
嗯 , 对 , 然后它在虚拟机的 , 呃 , 基础上, 呃 , 可以很快的将 Docker 的 image 运行起来 。
OK。
对 。
呃 , 然后这个这个这个 , 呃 ,Hyper 起的这个虚拟机里面是就只跑一个 Docker 的镜像呢 , 还是说它里面可以跑多个这个 Docker 的镜像 ?
呃 , 可以跑多多个 Docker 的镜像 ,而我们这个一个虚拟机呢 ,其实相当于是一个工作的单元 。 呃 , 这个工作单元呢 ,其实来这个这个 idea 是来自于 Cubernetes 里边的一个 pod 的概念 , 就是 。
OK。
一组 , 呃 ,container 的一个集合 ,而这一组 container 呢是有关系的 , 它是为了运行一个 , 呃 , 比如我我运行一个网站 , 肯定要一个那个 Nginx, 我买 SQL, 然后等等这类似的东西 。
所以 。
没错 。
对 , 所以我我我我买 SQL 一个 container, 我 Nginx 一个 container, 呃 , 然后这样的话就就 , 呃 , 就组成一个 pod, 这个 pod 概念就包含了两个 container。
OK, 所以可以这么理解吗 ? 就是说一个一个 Hyper 的虚拟机是对应一个就是这个 pod。
对对对对对 。
这个盒子 , 然后这个 pod 里面是包含了多个 , 呃 , 这个 Docker 的这个 container。
对 。
然后每个 container 里面只运行单一的一个应用 , 它可能是一个数据库 , 像买 SQL, 可能是一个这个 Web 服务器 , 像 Nginx。
对对 。
或者还有一个就是像这个一个应用服务器 , 比如说一个 Tomcat 或者其他一些什么像 Python 或者 Ruby 写的一个应用进程 。
对对对对 , 所以它它它用这种 pod 的概念来管理一组 service。
嗯哼 。
嗯 。
所以这个相比这这里听起来哈 , 就是说做这件事情的时候 , 啊 ,Hyper 相对于一些已有的工具 , 它们的 , 呃 , 主要的区别在哪里呢 ?
比如说可能像过去也有像基于这个 KVM,Linux 上面的 KVM。
嗯 。
啊 ,也可以运行一些轻量级快速启动的这个 , 啊 , 当然这个可能需要定制那个你跑的那个叫做 guest, 就是叫做 。
GuestOS。
GuestOS。
对对对 。
就宾客系统 , 啊 , 还有一些像过去基于这种传统的这个 hypervisor 的一些工具 , 像 Zen 啊 , 里面也可以做一些事情 。
那么从这个角度出发的话 ,Hyper 和它们的区别 , 刚刚提到这个 KVM 和 Zen, 它们的区别主要在哪里 ?
嗯 ,其实我们底层也是用过 KVM、Zen 以及 Waterbox 这些 hypervisor,但是呢 , 我们跟它们的一个 , 呃 , 优势 , 或者说我们做什么东西 , 就是我们将 GuestOS, 呃 , 呃 , 我们实现一个经济最最简单的一个 GuestOS, 主要是用于跑 , 呃 ,Docker 的 image, 啊 , 然后生成 container 这这一系列工作 。
另外呢 , 我们外边提供了一整套管理工具 , 然后可以管理这些 hypervisor, 然后让它能够以 pod 为单位去运行 , 呃 ,Docker 的 image, 呃 , 然后并且并且提供了很多监控的工具 , 呃 , 这样的话方便用户运运行 Docker image,并并有更好的安全性 。
嗯 ,OK, 所以所以就是实际上 Docker Hyper 是分两部分 , 一个是说管理像传统的像 KVM、Zen 这些 hypervisor 的工具 。
对 。
然后另一方面它是说是包含一个 , 呃 , 你们定制过的极度精简的一个 GuestOS 的一个内核 。
对 ,是的 。
可以这么理解吗 ?
对对对 。
OK, 啊 , 那这里就牵涉到两方面的问题了哈 , 就是说在这个管理这个工具这一块 ,hypervisor 就 Hyper 和这个 Docker 它们之间的这个就是这个界限是什么 ?
呃 , 你你指哪哪方面的界限 ?
就比如说这个你刚才提到这个 Hyper 里面 , 它这个 GuestOS 里面包含哪些的东西 , 就只有一个基基础的内核吗 ?
对 。
就是这个这个 GuestOS 里面 , 呃 , 除了这个内核之外还有什么东西 ?
呃 , 没有别的了 , 它只是跟 , 呃 , 外边的 Hyper Demon 去一个交互的作用 , 然后我们会把 , 呃 , 用 Hyper Demon 会把 Docker 的 image 从 Docker Hub 上面下载下下载下来 , 然后作为一个 block device 或者是一个 WatchOS 999P 的一个一个一个文件文件 , 呃 , 呃 , 它也是给这个 hypervisor, 然后, 呃 ,GuestOS 拿到这这些信息之后就会做给给用户生成一些那个运行式环境 。
是是的 。
OK。
对 ,是整个一个这样的一个大概的一个思路 。
OK, 然后你刚才提到那个 Hyper 还有一部分是管理像传统的像 KVM 啊 ,Zen 这种 hypervisor 的工具 , 这一部分的话它又主要包含哪些 , 呃 , 组件或者说一些功能模块呢 ?
啊 , 它主要是 , 呃 , 就就就我想用过 Docker 的人都会有一些印象 , 比如它可以直接用 Docker 的 Docker Logs, 然后或者说 Docker 那个 EEC 或者是 Docker, 呃 , 类似于 TTY 的这种环境 ,其实我们也提供了这种工具 , 就是可以 , 呃 ,因为因为因为如果要用一个用户要想看 , 呃 , 这个 hypervisor 里边的 , 呃 , 信息的话 , 那么 , 呃 , 或者说它的 log 的话 , 就必须要登录或者 SSH 进去 。
所以呢 , 我们其实是将这些 , 呃 , 这些操作全都简化 , 然后直接通过 , 呃 , 客户端或者说通过 API 就可以让用户能够 , 呃 , 简单的访问到底 hypervisor 里面运行的 container 到底运行的到底怎么样了 , 然后以及它的是否发生错误等等等等 , 就这这些全部达到一个监控的效果 。
当然你也可以 , 呃 , 完全当这个 container 一运行的时候 , 你就可以监控这个 container 所有状态 , 将 log 全部收集起来 , 然后再去分析等 , 这个其实是一个很方便的 ,有很方便的 API, 呃 , 方便用户再次开发 。
OK。
嗯 。
所所以如果我们画一个这个层次结构图的话 , 最底层可能是这个 host 的的这个操作系统 。
对 。
然后它上面会跑着像诸如这个 KVM、Zen 啊这样的一些 hypervisor 工具 。
对 。
然后再上就是 Hyper 这一层 。
对 。
啊 , 去管理这个 KVM 和 Zen 这样的工具 , 然后再在 Hyper 管理的这些 GuestVM 里面会跑一个这个 Docker 的一个镜像 , 然后再在镜像里面去 , 呃 , 运行我们最终的应用程序 , 没错吧 ?
那个概念上有有点不太一样 ,因为这这个这个刚才你你说的这个可能就是 , 呃 , 更多人去想到的这种方式 , 就是它它其实其实这种方式就是目前的 boot2docker, 它就是将 , 呃 ,Docker 的 demon 放在一个 VM 里面去运行 ,而我们呢其实是将 , 呃 ,Hyper 的 demon,其实我们这里就没有 Docker 的 demon,因为我最开始其实是依赖于 Docker 的 demon,但现在没有了 , 就是 。
哦 。
对 , 所以我们取消了 Docker 的依赖 , 然后 。
OK。
将 Hyper Demon 放在 houseOS 里面去运行 ,而 , 呃 ,Docker, 呃 , 的 image 下载下来是 , 呃 , 直接把这些文件全部传传进 VM, 然后 GuestOS 再去用这些文件来去 , 呃 , 起 container, 然后去运行这这这些这些那个文件 。
啊 , 所以其实你们是这个就是 Hyper 是完全替代掉了 Docker 的这个管理的功能 。
对对 。
你们只是复用了 Docker 的这个已经制作好的 , 就它本来是为 Docker 这个管理工具制作好的这个 container image。
对 。
啊 , 这个还和我之前理解的有一点点这个出入哈 。
哦 。
啊 , 这个这个话其实就还蛮酷的 , 就是说 , 呃 , 就如果这理论上来讲哈 , 如果你们因为这个这个 Hyper 这个管理的 VM 的这个虚拟机也非常轻量 , 启动也很快嘛 。
对 。
然后同时它又具备这个传统的像 Docker, 呃 , 无法提供的这个内核级别的隔离的安全性 , 对吧 ?
对 。
所以其实是在安全性和性能上是完完就是完全可以 , 呃 , 替代甚至超越这个 Docker 这个 demon 本身的 。
对 。
OK, 明白明白 。
嗯 , 对 。
非常好 , 非常好的解释 。 所以所以现在有刚才你提到一个最主要的核心要点 , 就是说这个 , 呃 , 安全性这一块面 。
嗯 。
可能这个很多这个不是做这个内核相关的朋友 , 可能也其实也是现在很多使用这个 Docker container 的一个新手可能一个困惑吧 , 就是说 ,因为因为确实你你想一个 Docker 的 image 给人感觉用起来很像一个虚拟机嘛 。
嗯 。
对 ,但它但它其实并不是一个虚拟机 , 只是一个一个集装箱或者叫一个容器这么一个概念 。
对 。
所以 Simon 肯定这里要给这些我们这些新手哈 , 还有好些不太熟悉这个使用 Docker 的人要普及一下, 为什么说 Docker 它不不能提供像传统的这个虚拟机那样的这么一个安全性呢 ?
安全性22:33
呃 ,其实这个的话就是就是从 Docker 本身用的技术上面就要来讨论 ,因为 Docker 其实它并没有 , 呃 , 就是可能说说的有点有点有有点太太直白了 , 就是 Docker 其实并没有发明任何新的技术 。
OK。
啊 , 对 。
这个其实很多人对 Docker 的一个指责哈 , 就是说因为这个所有的像 container 这些概念可能是十年前就已经有了 。
对 。
然后很多人都说这个 Docker 其实只是把一些叫什么新瓶装旧酒嘛 。
对 , 哈哈哈 。
这个倒也没什么 , 就是这个从技术角度上确实是这样子的 。 就我的理解 , 可能 Docker 的主要的价值还是说它提出了这么一套这个理念 , 让大家可以说去更好的去从这个开发到测试到实际部署这么一套流程工具流程吧 。
对 。
对 , 那么刚才那个安全性的问题呢 , 就是说 , 呃 , 为什么说这个 Docker 就我们这些小白们会觉得这个 container 之间是有隔离的 ,但其实并没有想象的那么好 。
对 , 就是因为因为这些 container 之间的它的一个同的实验方式 , 它是基于 namespace, 或者说更底层的一点 , 它是 , 呃 , 通过 cgroups,cgroups 就是一个内内核的一个 module, 然后它所 , 呃 , 做一个隔离性呢 , 就是相当于 , 呃 , 用户可以配置 , 然后 cgroups 在内核里面去限制某一个某一个模块 , 比如内内内存 , 比如 CPU, 呃 , 每个线程可以用多少 ,但是这样的话它所有的全都是基于一个 houseOS 的 kernel 去去去做的
, 然后如果 , 呃 , 一个 container 里面的一个 process 获取了一些更更更高级的权限 , 它它就可以控制这个内核 ,而可能这个就是特别特别细特别细怎么 hack 去去这个这个的事情 ,但是本身你 , 呃 ,share 的 kernel 它它其实就是就是有这种问题的 ,因为因为你如果一个 container 出个问题 , 就是导致 kernel panic 的话 , 就就会导致整个所有的 container 不可用 。
嗯 , 看来 B 节目的名字还是很有示范意义的 。
对 , 哈哈哈 。
对对对 。
对 , 所以所以刚才你提到一个很重要的概念啊 , 叫就是如果在传统的一个 Docker 的部署里面 , 如果你在 , 呃 , 一个虚拟机或者同一个内核里面部署了多个这个来历不明的这么一个到这个 image 在跑 , 然后, 呃 , 假设某一个 , 呃 ,因为因为这个内核它不可能是完美的一个程序嘛 , 对吧 ?
所以假设一个内内核的一个漏洞 , 或者说你没有及时打上一些补丁 , 使得一个恶意的程序抓住这个漏洞 , 它其实可以越权拿到这个这个最高级的权限 , 从而从而从而影响或者控制其他在就其他的 container 里面的东西 。
对 。
OK, 所以从这个方面来讲 , 我们必须采用像传统的这个虚拟机 , 就是 , 呃 , 独立 kernel 的这种虚拟机的方式才能实现 , 啊 , 哪怕一个 guest kernel 的被 , 呃 , 被攻陷之后, 我的 host 还是相对来说安全的 , 对吧 ?
对对 。
OK, 那么这里就会有一个自然而然的问题了哈 , 就是说这样的话 , 毕竟还是多了一个虚拟机 , 多了一个内核层面的在跑嘛 。
嗯 。
性能开销25:50
那么它的这个相对于这种 Docker 本身没有一个 , 呃 , 它是一个共享内核的情况 , 它的这个额外的开销会是怎么样的一个情况 ?
啊 , 对 , 所以这个也就是我们之前一直在关注的一个点 , 就是它的性能问题 。 性能问题的话 , 就是我们做了很多的测试 , 呃 ,其实 , 呃 , 我们并没有说 , 呃 , 更改或者说 , 呃 , 修改那个 hypervisor 的代码 , 然后让它 , 呃 , 达到一个非常非常优化的一个 ,但我我们目前还是希望能够用更加通用的手段来解决用户的问题 。
然后然后, 呃 , 就刚才说的一个启动 , 呃 , 启动一个 container, 呃 , 的所所所给予的时间大概在 300 毫秒 , 这个 , 呃 , 跟 Docker 相比呢 , 呃 , 基本上没差太多 , 然后, 呃 , 性能上面这这这是这点 , 然后另外就是 CPU 跟冗余上面基本 , 呃 , 相似 , 呃 , 可能很大的一个问题呢 , 就是在网络 IO 以及 storage 的 IO 上面可能会有有会受限于 , 呃 ,hypervisor 它的性能 ,因为你像 , 呃 ,9P 或者是
像直接的 block device, 它都毕竟要经过多层的传递 。
对 。
然后可能会达不到很好的效果 ,但是我们其实也也在目前也在解决这个问题 , 就是用因为 , 呃 ,block device 它其实还是传的那个 , 呃 ,storage 协议 , 比如 SCSI 协议 , 直接 SCSI 协议怎么能够传递 , 或者怎么能够更减少它的矿业的层次 , 就是一些 kernel bypass 的技术吧 。
OK, 所以总结一下, 就是说因为 Hyper 还是一个基于 , 呃 , 虚拟机的一个技术嘛 。
对 。
所以传统的虚拟机的一些缺陷 , 它可能还是就是起码在现阶段还是免不了的 。
对 。
刚才你提到了几个问题 , 就是说它可能 , 呃 ,但就是我们现在现在现代 CPU 哈 , 特别是像 Intel 的一些服务器的 CPU, 它对这个硬件虚拟化的一些支持是非常好的 。
嗯 。
所以在运算这一块的这个损耗其实可以几乎可以忽略不计吧 , 我觉得 。
对对 。
对 , 然后但是像这个 IO 层面 ,因为它还是就需要依赖于这个硬件的支持和软那个内核的支持 。
对 。
可能还还做不到说一个比较好的一个状态 。 那么我可以大概问一下, 就直观来讲 , 呃 , 比如说我我我网络吧 , 我 1GB 的这个这个 , 呃 , 物就物理网卡的这么一个吞吐量 , 传到这个 Hyper 这个虚拟机里面之后, 大概会损耗到多少 ?
嗯 , 这个这个我们之前确实是做过做过调查 ,但是我现在没有没有手手头没有没有这种资料 。
OK, 呃 , 这个是就是说你刚才提到最主要问题就是 IO 的损耗是最快嘛 。
对对对 。
特别好奇 。
对 。
但如果之后如果你有资料的话 , 我们可以补到这个 shownotes 里面 。
哦 , 对 , 然后但其实这个在我们的官网上其实是有更详细的资料的 , 然后 。
OK。
对 ,因为这个这部分我没有参与测试 , 所以具体细节不是特别清楚 。
OK, 没问题没问题 。 所以这个这也说到这个 IO 这一块 , 所以我顺便插话问一句 , 刚才你也提到有一些叫叫叫就是能够绕过 ,因为 IO 最麻烦的问题是这 ,因为是虚拟 , 就是叫 GuestOS 和这个 HostOS 之间 , 它是要互相这个复制数据嘛 , 对吧 ?
对 。
这个是导致性能损耗最主要的一个一个原因 。 那么你你刚才提也提到一些一些就是 bypass, 就是能够绕过这个复制的一些机制 , 可以大概介绍一下你们目前在考虑的 , 或者说以后可能会采用的一些方法是什么呢 ?
呃 ,其实我们目前已经采用了 Water IO, 呃 ,Night 的一个模块 , 然后它其它其实就是将网络的 IO, 呃 ,bypass, 呃 , 相当于 , 呃 , 跨过了 , 呃 ,hypervisor 底层的一个数据传输 ,但是 high, 呃 ,houseOS 它的一个 TCIP 协协议站是没办法跨越的 , 所以 。
OK。
所以这个技术应该是可应该是 , 呃 , 跨越了 hypervisor 的一个 TCIP 协议站 , 它就是减少了它的层数 。 然后另外呢 ,其实我们也在基于 block device 去做一些 , 呃 , 操作 ,因为 block device 的话 , 它 , 呃 , 它毕竟还是块设备的传输 , 更偏向于它的 IO 协议本身 。
对 。
所以这样的话能比网络层的优化 , 呃 , 呃 ,不能能能够比文件系统级的优化效果会更好 , 我们也在关注这这些点 。
OK, 呃 , 刚才你提到两个用例哈 , 一个就是对对于一个经典的这个网络层的一个有传输的优化 , 还有一个是对这个文件系统传输层的这个这个这个存储层的一个优化 。
那我们提一个就是就就着刚才那个网络层的这个情况来讲哈 ,因为大家可能最常用的还是用来部署一个这个基于 Web 的一个 server 或者就服务器之类的应用嘛 。
对对对 。
所以举一个例子 , 比如说在一个经典的这个 Hyper 的部署情况下, 就是说底下有个还有这个 hostOS 上面跑一个假设 KVM, 然后在 Hyper 再管理一个 VM 里面再跑一个 Docker image 的这种情况下, 一个数据包从这个 , 啊 , 这个最里面的这个假设是一个 NGINX 的服务器里面传出来 , 一直传到这个 hostOS 硬件的网卡之间 , 大概需要经过哪些步骤 , 可以给我们描述一下吗 ?
呃 , 目前的话咱们先说正正常的话 , 它 , 呃 , 它肯定是经过 hypervisor 的 TCIP 协议站 , 然后然后, 呃 , 经过 hypervisor 它的一个 ,但是这个这个就要分它是硬件模拟还是就是就全全模全虚拟化还是半虚拟化 。
这个的话就涉及到了 QMIL 的一些知识 , 就是因为 QMIL 的话 , 如果是 QMIL 全虚拟全全全虚拟化的话呢 , 它就是相当于完全硬件虚拟虚拟化 , 就是 。
嗯 。
它就是 。
网卡都是虚拟出来的 。
对对对对 , 所以它它走的路是跟 hypervisor, 呃 ,是跟 houseOS 是完全一致的 。 大家也可以也可以查一下资料 , 就可能走 TCPIP 协议站 , 然后再走那个 , 呃 ,driver, 再走 NIC 的 driver, 然后再再往下走 firmware 这这些东西 。
呃 , 然后呢 , 如果要是半虚拟化的话呢 , 它就它就可以用那个 Water IO, 呃 ,Night Water IO 吧 , 反正就就是 , 呃 , 相当于 Night Walk kernel bypass 一个技术 , 就是将将 hypervisor 里面的那个网络包的数据直接给到 NIC 的 driver, 然后用 NIC 的出 , 然后调 , 呃 , 一些 LLTO 命令 , 直接让 IO 包直接发发发送出去 , 然后交给 HyperOS, 然后它它其实在这个的过程中, 我我我如果没记错的话 , 应该是
, 呃 ,hypervisor 里面 , 呃 , 的这个 NIC 的一个虚拟虚拟地址 ,其实是和 HyperOS 里面的这个网卡的地址其实映映射到一起嘛 , 然后这样的话能够缩减很多层 。
就不用复制那么多次了 。
对对对对 ,其实在网络传输过程中, 呃 , 用户态和内核态之间的网络包的复制过程还是比较耗时的 。
对对对 。
对对对 , 然后, 呃 , 另外一个就是它的 , 呃 , 相当于用户态和内核态一个切换过程 ,但是这个的吧 , 这个话其实没有特别好的办法 ,因为你要保证实时性 , 要保证能够它的它的能把这些包全都传送出去 , 所以必须用一些机制来触发 , 所以可能用 LTO 或者是用其他方式去触发吧 ,但是这个东西我们目前也是用过现有的机制 , 没有没有特别就目前还没有 , 呃 ,
设给这方面的去去这这方面的动动作 。
竞品对比33:41
OK, 明白 。 呃 , 接着那个 Hyper 那个那套工具讲哈 , 你也提到了就是 Hyper 它会提供一个非常轻量级的这个 GuestOS 的 VM 在在那里去运行里面的 Docker image, 然后这里面就可能要跟现有的一些其他的 , 呃 , 想做同类事情的工具相比了哈 , 比如说比较著名的现在 , 呃 , 比较火的像那个 CoreOS 啊 , 还有像一个上次好像 Intel 也出了一个吧 ,是专门跑这个 Docker image 的这么一个极极度精简
的 , 呃 , 这个 Linux 的 OS, 就是相比起来就是你们比他们的区别在哪里 , 就是精简了什么东西 。
哦 , 呃 ,是是这样的 , 就是 Intel 出的那个叫 Clear Linux, 那它的出现对我们来说还还是周围很很震惊的 ,但是其实也是验证了我们的方向是正确的 ,因为大大厂都跟进这件事情了 。
哈哈哈 。
对 , 所以我们既兴奋又担心 , 还还还有点惊讶 。
OK。
对 , 然后它 , 呃 , 它和 CoreOS 其实应该是 , 呃 , 应该是属于类似的东西 ,但是他们的目的可能不太一样 , 就是我们自己的分析 ,因为 。
OK。
呃 ,Clear Linux 它的一个硬 , 它其实是为了验证 , 呃 ,Intel 的硬件 ,因为 Intel 嘛 , 它它虽然说是开源技术中心做出来的 ,但也不能说一帮人没什么意义去做这个东西 ,因为我我我们分析它应该是为了体现他们的他们的硬件足够的快 , 可以达到启动一个 Linux, 呃 , 的 GuestOS, 呃 , 能够非常非常非常快 , 几十毫秒级的 。
然后, 呃 , 当然也有很多人基于这个东西去做了很多的 ,因为 Docker 目前的形式非常火 , 所以很多人基于 Clear Linux 去做了一些贡献吧 , 然后就是把它改造了一下, 之前还有一个 PR 专门给 Docker 的 , 呃 , 相当于 Docker 的那个 upstream, 然后去提了一个 PR, 就是希望能够用这个 Clear Linux 来运行 , 呃 ,Docker image,但是这个没有被被接受 ,因为可能觉得 , 呃 , 可能做的不太好吧 , 或者说它它它的
它的性能 , 或者说 , 呃 , 整体的一个运作方式跟 Docker 的不太一不太一样 。
OK。
对 , 所以 , 呃 , 我们 , 呃 ,也也关注了它很长时间 , 它目前也也在不断的维护吧 , 然后 。
嗯 。
呃 , 它跟 CoreOS, 呃 , 就是就提到 CoreOS,CoreOS 其实它是在 CoreOS 里面 , 它给你做了足够多的配置 , 然后让你直接去运行一个 Docker 的 demon 或者说 Docker 的 container, 然后你直接 , 呃 , 呃 ,Clear Linux 是可是不可以装在一个 , 呃 ,environmental 的一个机器上面 ,而 CoreOS 是可以的 , 它可以装在那个 environmental 的机器上, 然后这样的话配置到一个机房就可以运行 , 就就可以直接你装一个 OS, 你可以直接运行 Docker 的 demon,Docker 的任何命令你都可以去
直接运行 ,而且它可以优化 , 所以它可能的场景不太一样 。 所以说我我们的 Hyper 其实跟他们其实其实不是特别一样 ,因为我们其实虽然说也提供一个 GuestOS,但是我们这用的 GuestOS 呢 , 它其实是为了 , 呃 ,在 VM 里面跟外边的 Hyper demon 去配合 , 然后去 , 呃 , 运行 Docker 的 image,其实我们是一个一个整套的一个环境吧 ,其实就是就是 , 呃 , 跟 Docker 平行的一个另外一套的环境 。
所以如果我这样理解没错的话 , 就是 CoreOS 和这个 Intel 出的这个 Clear Linux, 它们还是依赖于这个 Docker demon 本身 。
对 ,是的 。
而这个 Hyper 是可以完全替代掉它的 。
对对对 ,是 。
那所以其实从我个人角度来讲 , 肯定是少一层比多一层简单嘛 。
对对对 , 这个也是看大家的应用场景吧 , 可能关注点不太一样 ,但是也不能也不能 , 呃 , 太太太推销我们的东西 。
应用场景37:56
哎 , 没错 , 这里就提到这个应用场景 , 这个这个非常非常重要哈 。 所以在你们的这个定位里面 , 这个是在什么场景下适用于比较 , 呃 , 就是适用用这个 Hyper 会比较好 。
呃 ,其实我们 , 呃 ,是希望 , 呃 ,是我我们的一个 , 呃 , 做的这个这个这个 Hyper 这个目的呢 ,是希望 , 呃 ,有 , 呃 ,有想法用 Docker 部 , 呃 , 做 , 呃 , 构建一个共用云的一个厂商 , 就 , 呃 , 当然可能目前已经有了 , 就比如到什么 Docker Cloud 点到到到的 IO,他们其实就是声称是 , 呃 , 用了 , 呃 ,Docker 做一个去构建的一个公有云 ,但是我不确定 , 呃 ,他们内部是怎么搭建的来保证用户
的安全性 。
OK, 这个就涉及到刚才我们讲的那个问题了哈 。 如果说因为你没有内核隔离的话 ,其实是 Docker 本身的那个 , 呃 ,container 隔离是无法保证安全性的 。
对 。
然后如果你跑的是一个公有云 , 就所谓公有云就是说你的这个两个客户之间是可能不是一一一家或者一个人。
对 。
然后你也没法保证你运行的应用的这个这个这个就是这个性质 , 或者是它是否是一个恶意程序 , 你是无法保证的 。
对 。
就是可能是公有云和私有云最大的区别 。
对 。
所以这种情况下是必须采用 VM 隔离才可以实现 , 呃 , 我们可以接受的安全性嘛 。
对 ,因为目前就我们所知 , 一般的公有云厂商一般都是用这种方式 , 就是底层还是用 , 呃 ,hypervisor 去或者说 VM 去做隔离 。
嗯 。
对 , 然后可能没有用用用容器直接去做隔离 ,不太靠谱吧 。
哈哈哈 。OK, 所以 Hyper 的一个主要应用场景就是说给那些有志于提供这个公有云的厂商这么一套基础的 , 呃 , 工具 , 使得他们可以比较快速的 , 呃 , 这个启动或者是关闭一个 , 啊 , 这个虚拟机 , 然后这个虚拟机上是可以 ,但是它面向就暴露给这个用户的 , 它确实确实一个 , 呃 , 叫什么来着 ,是类似于这个 container 那种那种的 API, 对吧 ?
对 。
OK, 所以这个这个就是牵涉到另外一个问题了 , 就是说因为我们现在大部分的这个像 Linux 也好 , 啊 ,AWS 也好 , 啊 , 还有现在比较火的这种 Digital Cloud 也好 ,他们都是采用这个传统的虚拟机这种方式 , 这种暴露出传统虚拟机这么一个单元 , 然后由由用户再去管理其中的这个 , 呃 , 这个是否跑 Docker, 啊 ,是否跑什么跑什么这个 GuestOS 的事情 。
呃 , 那么刚才我们讲的你直接暴露给用户一套基于这个 container 的 API 的好处 , 相比于现在这个暴露给用户一个基于 VM 的 API 的好处是什么呢 ?
呃 , 暴露 , 呃 ,其实我觉得还还是另外从一个应用场景上面来来来来分析吧 , 就是 , 呃 , 如果要是 , 呃 , 就是就比如说 , 呃 , 用户他想他已经已经在本地他一个那个开发环境 ,他本地的话他可以部署 ,他可以配置任何 Docker 的一个 image, 然后去上上传到自己的 private 或者是 public 的一个 hub 上面 , 然后, 呃 ,他再去运运行 , 然后如果他要是像 , 呃 , 直接拿到一个 VM 的一个一个环
境的话 , 那他完全他要在自己搭 Docker, 然后再给里面去直接再部署下来 , 再下来再再去运行 , 或者是对 , 然后但是我们这种方式你直接可以 , 呃 , 将你的 , 呃 ,Docker 的 image 直接下载下来 , 我们你只要填一些你所想要想要的东西 , 直接全都给你部署在后端了 , 就是不需要你去做任何的配置 , 你只要填 , 呃 , 我们这有一个叫 JSON, 就是输入文件 , 就是
JSON file,JSON file 里面可以定义你的所有的这个上面运行的东西 , 比如 container 运行那个 container, 啊 , 从哪运行 , 从从哪下载 , 然后以及那个 , 呃 ,port 那端口映射 , 然后以及 storage 等等等等 , 你都可以去自己去配置 , 然后所以就是简化用户的操作吧 , 我觉得 。
OK, 所以这个其实还其实挺切中我的这个个人的一个痛点嘛 , 比如说自己在运营着这个 IPN 的这个服务 , 还有一些帮朋友管的一些其他的一些服务 , 然后他们就是每次要新增一个服务或者是管 , 对 , 特别是新增的时候会有一个问题 , 就是说给我的这个虚拟机新开的一个虚拟机是空白的 , 我得到重新搭一套 , 比如说建管理对应的这个账号 , 对吧 ?
对 。
对应的这个要安装对应的软件 ,但这个可能有一部分是可以通过 Docker 本那个 image 本身打包来实现的 ,但是刚才你提到一个很重要的点 , 就是 Docker 这个 demon 这个守护进程本身还是需要配置和安装的 。
对对对 。
所以其实我觉得还是一个就是抽象层次层次的一个飞跃吧 , 你们其实是通过 Hyper 这套基于 container 的 API, 同时再加上这个 , 呃 , 呃 ,VM 的安全性 , 使得我们不用再去操心我当面这个 container, 呃 ,其实我是可以在逻辑上按照 container 来做这个部署了 , 只只是说我不用再操心 , 呃 , 像传统 Docker 这种 container 之间无法 , 呃 , 内核级隔离的不安全的隐患 。
对对 。
没错 。
对 。
存储方案43:14
啊 , 对 , 然后我们下面就要进入到一个很关键的一个问题的讨论哈 , 就是说因为基于因为 Docker 其实本身到我觉得到目前为止吧 ,也没有并并没有很好的解决这个问题 , 就是这个存储空间的问题 。
嗯 。
因为过去的话就照我的理解 , 它 Docker 的因为它是提倡的叫做 , 嗯 , 应用是那个那个 image container 是不可变的嘛 , 就 immutable 的 container。
嗯 。
那么比如说你作为一个应用层应用服务器本身可能这个倒也没什么 , 你你那个你多起几个应用就可以提高你的这个并发数 , 对吧 ?
嗯 。
那当然是好的 ,但是我们做作为大部分的这个网站也好 , 还是这个什么服务也好 , 它还是必须要考虑这个数据持久化的问题嘛 。
嗯 。
就说这个你从这个客户那里拿到了这个数据 , 那你存到哪里 ?
啊 。
过去 Docker 的一个提倡的一个概念就是说那你再建一个就存单纯拿来做这个存储的一个 image 来做这件事情 。 所以我不知道这件事情 , 呃 ,在 Hyper 里面是一个什么样的一个值得鼓就是什么样的做法是值得鼓励的 。
哦 , 我们我们目前 , 呃 ,是 , 呃 ,有一个单独的 walking 的一个一个一个一个模块 , 然后它是可以你可以在在针对某个 container 或者说 , 呃 , 针对几个 container 去去配置 , 然后 。
嗯 。
呃 , 我你可以自己添加 , 呃 , 你想加入的 walking 这个 walking 呢 , 既可以是文件或者或者是目录 , 然后也可以是 block device,block device 就支持非常多的形式或者就是然后用户可以自由配置 , 然后你可以把这个多大多 , 呃 , 多少你都可以自己配置 , 然后指定给哪个用户都可以自己配置 , 然后这样的话呢 , 你加入到一个 container 里面 , 呃 , 你可能运行的时候你可以指定我将数据存到这个人家这
个 , 呃 , 那个 block device 或者说是文件 , 呃 , 目录里面 , 呃 , 这样的话 , 嗯 , 目前我们是支持本地的以及加 , 呃 ,safe 或者说或者说你用 safe 当然也可能也可能配直接配 storage server 都可以 。
OK, 所以我理解一下这个大概的一个做法就是说我把 , 呃 , 就是这个 Hyper 它会允允许我虚拟出一块这个 block device, 就是一个快存储器 。
对 。
然后这个快存储器我可以直接挂载进我的某一个这个 Hyper 的虚拟机里面 , 成为一个文件系统也好 , 一个什么目录也好 , 然后, 呃 , 使得但这样的话就是这个 Hyper 这个虚拟机里面本身跑的应用它还是一个 immutable, 就是不可变的 。
对 。
然后它的写入的数据是通过这个刚才那个挂载进去的这个 block device 持久化到其他地方的 , 对吧 ?
对 。
然后这个持久化是要么你可以在本机就是同一台这个 host 机器上执行 , 或者是通过这个 sci 这种网络的这个存储的协议写到另外一台这个一个文件 , 比如说一个文件服务器上 。
对 , 没错 。
是这样 。
对 。
OK, 所以那这里就牵涉到一个一个一个效率的问题了哈 , 刚才我们也在提前面也提到 , 就是说通过这种方式挂载进去的这个就是 disk IO 的这个效率会有很大的这个损耗吗 ?
还是说是什么样的情况 ?
呃 ,其实这个主要还是说 , 呃 ,hypervisor 本身的嘛 , 就是因为我们我们如果你要是挂本机的 , 呃 , 呃 ,block device 的话 , 那么它其实还是涉及到一个 , 呃 ,IO 命令的一个传递的一个转换 , 然后这个的话 , 呃 , 消耗应该不大 ,但是如果你要是文件级别就目录的话 , 目录的话它其实是走的 , 呃 , 它是通过 hypervisor 的 share 的 share share file 来来来 share 或者 share directory 来做的 。
所以这个过程中就我们之前测过 , 就是不管是 VMware 或者说 Waterbox 或者是 Tumul, 它的就 share 的目录的性能都不是特别好 , 所以我们特别建议用那个 block device 级别的去操作 。
另外就像刚才另外一种方式 , 呃 , 还有第三种方式 , 就比如我要是远远端的或者说 sorry server 的话 , 那这个的话它因为可以是 , 呃 , 暴露给 , 呃 ,hypervisor 一个 block device, 所以它这个的性能可能是除了依赖于 hypervisorblock device 的支持 , 还有的话就是网 , 呃 , 这个用的第三方工具的性能了 。
OK。
对 , 所以 , 呃 ,share 的目录的话这个 , 哎 , 这这确实是一个硬上没有特别好的办法 ,因为 hyper hyper 的本身它他们做的也不是太好 ,因为它是想达到更加用户 , 就是说 , 呃 , 普通用户级别的使用 ,而不是说我用这个来做企业级或者说做工业级应用可能不太一样 。
嗯 。 OK, 所以那么就牵涉到一个问题了哈 , 就是说在实际大规模部署的时候 , 这种比如说类似于 , 呃 ,Google 或者是 Amazon 这种级别的用户 ,他们会一般会采用什么样的方式去部署这个 , 呃 , 这种这个这个存储的这个方案呢 ?
呃 , 啊 , 关于存储的方案 , 呃 , 这这我还真不确定他们怎么部署的 。
OK, 没关系 , 那我们进入这个下一个话题啊 , 就是说刚才也提到这个文件存储可能是效率上是一个硬伤 , 这个 , 啊 , 这个确实在目前的技术条件下好像没有特别好的解决的方案 。
对对 。
然后刚才之前我们也提到了这个网络这块 ,因为也涉及到 IO 嘛 。
嗯 。
也是一个比较尴尬的一个状态 , 这个其实这个都说的是在 , 啊 , 刚才我们大概假设的一个场景都是说在一个 Linux 的 host OS 上跑 , 啊 , 这个一个应用的场景 。
那我现在就问一下, 如果在开发者在就是想假设听众朋友们对这个 Hyper 比较感兴趣 ,他想去试一下 ,他在哪些其他系统上可以 , 呃 , 去去玩这个 Hyper 呢 ?
跨平台支持49:10
哦 。
因为我们知道像那个 Docker 它可以通过这个一些虚拟机的方式在像 OS X 上也可以跑 ,Hyper 呢 ?
啊 ,Hyper, 呃 , 当然也也支持 Mac OS, 然后 。
OK。
呃 , 这个东西 , 呃 , 这这这个这个 , 呃 ,Hyper 对于 Mac OS 的支持大概是在这个月应该是这个这个月月月初完成的 , 然后我们也在不断的去完善 , 然后 。
嗯哼 。
呃 , 目前呢 , 那个在 Hyper, 呃 ,在 Mac OS 上面的 , 呃 , 的 Hyper 只能用 Waterbox 一种 hypervisor。
OK。
对 , 然后如果你要是在 Linux 上面 , 当然你可以用 , 呃 ,Qmil KVM, 呃 ,Zen 以及 Waterbox 都可以用 。 但但但但是因因为 , 呃 ,Mac OS 上面 , 呃 , 没有说 Qmil KVM 或者说 Zen 的这些 , 呃 , 虚拟化的工具 , 所以就没有特别好的办法 。
OK,因为 VirtualBox 的其实从这个它的稳定可靠性 , 还有它的这个性能来讲就是不算特别好 , 特别是在 , 啊 , 这个 , 呃 , 就是 OS X 上面 , 然后经常会遇到什么用开了它然后就死机的一个情况也是有发生 。
对对对 。
啊 , 啊 , 就其实最近那个我们知道好像是从那个 OS X 是 10.9 还是 10.10 开始 , 它有一个 , 呃 , 就苹果开发了一套这个 firmware 叫做 hypervisor.firmware。
对 。
这套其实它可以在 OS X 上实现类似于 KVM 的功能 。
嗯 。
所以我不知道你们后续有什么计划会用到它吗 ?
呃 ,其实我们也在非常关注这个这个点 , 然后目前呢 ,有一个开源的工具就是 Xive, 就是 。
嗯 。
对对对 , 我你应该也关注过这个 , 非常就是之前在 Hyper News 上面发出来过 , 非常火 , 然后关注度也非常高 。
对 。
呃 。
哦 , 我 。
就它那个的历史还是要追踪到那个 Solarity 上面去 , 对吧 ? 因为它的前身是一个 , 它是基于它是一个 BHive 的 port。
对 , 然后 。
哎 ,BHive 是在 Solarity 还是在 BSD 上面 ?
呃 ,FreeBSD。
FreeBSD。
对对对 。
OK。
所以 Solarity 上面应该是没有的 。
OK。
所以这个目前来说就是我们还是跟那个像就是那个 Docker 的方案一样 ,在 OS X 上测试开发的时候是通过这个 VirtualBox 这个虚拟机 , 啊 ,在里面直接在跑一些 , 呃 ,是跑的这个是 Hyper 的虚拟机了 , 对吧 ?
呃 , 这个就是我们的一个费了好多好多心思去做的这个这个东西 , 就是我们这个 Hyper 在 Mac 上面的运行和 。
OK。
Boot2Docker 的运行是不太一样的 。Boot2Docker 呢 , 它其实就是一个 Docker 的可按端 , 然后, 呃 , 它把它把它的 demon 设成了 VM 的 , 呃 ,Waterbox 的 , 呃 , 地址 , 然后这个在 Waterbox 里面去运行 Docker demon。
嗯哼 。
然后它其实相当于通过网络 , 然后将这个数据全部显示给 Docker 可按的 , 用户以为它这是本地运行的 。
其实是在所有的东西是在那个 VirtualBox 的那个虚拟机里面运行 。
对对对 ,是的 。 而对 。
OK, 那你们的方案是怎么样 ?
我们的方面 , 我我们的方案其实是跟 Linux 是它的设计机制是完全一致的 , 就是相当于我们的 Hyper demon 是在 Mac OS 上面 , 然后, 呃 , 我们的 Hyper 可按的也在 Mac OS 上面 ,而运行的 , 呃 ,Docker 的 image 是在 Waterbox 里面去运行的 。
它它它整个的一个设计思路是完全和 , 啊 ,Linux 上面的 Hyper 设计思路是一致的 。
所以其实 , 呃 , 我理解哈 , 就是说在这种情况下, 我比如说我在 OS X 上跑一个这个 , 啊 , 这个这个 Hyper 之后, 它的这个管理层是管理层的命令行工具都是在 OS X 的原生的东西 , 然后它是控制 VirtualBox 这个 hypervisor 去里面新建一个虚拟机 , 然后虚拟机内核跑的是你们这个 Hyper 定制的这个轻量级的这个 guest OS。
对对 。
然后里面再跑的一个 , 呃 , 或者是多个这个 Docker 的 image。
对对对 ,是的 。
OK, 我明白 , 这个还真的和那个 boot2docker 的方式非常不一样 。
对 ,因为 boot2docker 你创建一个 container。
嗯哼 。
它是一个 Waterbox, 它是一个 VM, 然后你创建两个 , 它也是 , 创建三个 , 它也是 , 它创建的 container 都是在 VM 里面 。
而而我们这种方式呢 , 就是你创建一个 container 或者说 。
就多一个 VM。
对对对 , 多一个 VM, 这个可能会受限于 , 呃 , 开发者的一个机器的一个环境配置 ,因为你多个 VM 它毕竟要占 CPU, 占 memory, 这个这个这个是一个是一个 ,但但它做了很好的一个隔离性 , 对吧 ?
OK, 呃 , 所以这里我要问一个很好很好玩的问题啊 , 就是说那你们为了实现这个踩了多少 VirtualBox 的坑 ?
呃 , 这个我我我我想你你应该也会知道 Waterbox 的坑就是太多太多了 , 就是 。
哈哈哈 。
就是 , 呃 , 它的 API 很难在 Mac 上面 ,因为我们是用 Go 开发的嘛 , 所以它的 。
对 。
Waterbox 的 API 很难跟 Go 去结合到一起 , 所以就没办法 , 只能调命令行 , 调命令行的一个另外一个问题就是没办法监测它的一个输出的一个结果 , 所以就是用一些很很很无奈的办法去直接截截截它的输出 , 啊 , 这这些办法 。
另外呢 , 就是 , 呃 ,不局限于 , 呃 ,Waterbox 的问题 , 还有就是 Mac OS 的问题 ,因为因为众所周知 ,因为 Docker 它的它用了 , 呃 ,layered FS。
啊哈 。
对 , 然后它用这个来做 layered image, 然后 。
对 。
来保证 , 呃 , 足够的快 , 然后不至于说直接的拷贝 , 然后造成很很大的是一个时时间 。 然后呢 , 我们在 Mac OS 上面其实也想了很多很多办法 , 就怎么能够达到 , 呃 ,layered 这种效果 , 所以 。
嗯 。
居然让我们找到了 Waterbox 居然能有这种机制 , 就是 Waterbox 其实是可以做 , 呃 ,layered disk, 就是 , 呃 , 它 。
啊 ,是通过那个 snapshot 那个机制吗 ?
呃 ,其实它 , 呃 ,不太一样 ,但是也差不多类类似实验机制 , 它是 。
OK。
通过 pirate parent disk 其实就是 snapshot, 我觉得 。
OK。
对 , 然后呢 , 通过这种方式就可以实现一个 layered 的 , 呃 ,disk。
啊 , 你们是这么做 , 哎 , 好机智啊 , 这个办法 。
嗯 。
哎 , 那出来的这个实际的就执行效率怎么样 ? 因为这个可能其实因为除非你部署吧 ,其实大部分开发者可能还是在像这个 OS X 里面用 VirtualBox 的方式来开发 , 对吧 ?
对 , 然后我们目前这种方式的话 , 大概 , 呃 ,在运运行一个 WoW2 的 , 呃 ,Docker image 就整整个下来之后, 你你下载之后, 呃 。
嗯哼 。
运行大概在两分钟 。
就是就从那个 VirtualBox 虚拟机创建到开始启动 。
对 , 就直接你可以直接操作了 , 两分钟 ,不到两分钟 , 呃 。
不到两分钟 。
对 ,1.1900 多毫秒吧 。
OK, 那如这这个中间两分钟呢 , 主要主要的花在哪里 ?
呃 , 主要花在了其实一部分是 , 呃 ,Waterbox 本身的 , 呃 , 设备的一个虚拟化 , 就是它的它的硬硬件的 device 的一个虚拟化 ,因为它 。
就是叫配置一个 VirtualBox 的虚拟机出来 。
呃 , 对 , 它这这是一部分 , 然后另外一部分它就是一些硬件的虚拟化 , 就是比如我要是创建 SATA 的盘 。
嗯哼 。
那我只能创建 SATA 的 device,而且 。
嗯哼 。
而且 Waterbox 只能是用 SATA 作为 hot plug 的 device disk。
嗯哼 。
而呢 , 呃 , 用 SATA 作为 hot plug 的 disk 的话 , 就创建就时间会会会比较漫长 , 就稍微稍微比 , 哎 , 稍微比 SaaS 的要要 , 就是因为 SaaS 它不支持 hot plug, 所以它的机制可能会简单好多 。
啊 。
对 , 所以就损耗在这些方面就比较无奈 , 然后另外另外一个就是 , 呃 , 当然也是有 , 啊 ,Guest OS 去运行 ,但是这个时间没办法 , 就我们已经极致的去优化了 ,但是但是相比这个还是会短短一些 。
OK, 所以其实 , 啊 , 就是说如果是在 , 啊 ,OS X 上开发的话 , 啊 , 用 Hyper 最最主要的开销就是在创建那一块 , 然后就是创建好了之后的启动那个某一个 Hyper 的虚拟机 , 呃 , 还是要比在就是 Linux 上原生就部署的时候那个效能比如 0.3 秒要慢一些 。
对对对 。
是是这样 。
对 ,因为它本身的 , 呃 ,Waterbox 的的的的的机制没办没办法 。
OK, 所以这个真的要可能要逼得你们去研究那个新的 hypervisor framework 去解决这个问题啊 。
对 , 我们也在时时刻刻关注这个东西 ,因为这个东西我就最近的最近的观察来看 , 就是原作者可能不太忙别的 , 然后不太开发 ,不太不太不太上心这这件事情了 , 然后我们也也在去关注 , 希望能够 , 呃 , 能够去做一些贡献吧 , 然后但是 。
哎 , 你是说那个 xhyve 的那个原作者吧 ?
对 。
啊 , 所以现在我们大概就了解了这个 Hyper 的一个整个它是什么 , 然后它相对于一些我们就是已经熟知的一些工具的这么一个 , 呃 , 技术对比 , 它的优劣势在哪里了哈 。
嗯 。
就是说我们其实可能就还在回到一个最关键的问题 , 就是说 , 啊 , 为什么我作为一个这个网络管理员或者这个机房的这个这个一个公有云的运营者 , 我要选择 Hyper。
商业模式59:16
啊 , 对 , 所以所以你刚才说的一点非常非常关键的一点 , 就是作为公有云的管理者 ,而当然作为一个相当相当于说我就内部一个运营或者说测试环境 , 我用 Docker 一点问题没有啊 ,但是你要是用公有云的话 , 你必须要考虑它的安全性问题 , 对吧 ?
嗯哼 。
然后, 呃 , 所以就是考虑到安全性的问题呢 , 你就必须要要考虑 , 呃 ,Docker 它是否能怎怎么能够跟 , 呃 ,VM 去结合 , 能够最大效率的去利用 benchmark 的机制 , 所以 。
嗯哼 。
为什么不去尝试 Hyper 呢 ?Hyper 其实就是为你添为为个为个这种公有云的 , 呃 , 运营商添上去解决这个问题 。
你又想用 Docker, 又又想提供这种基于 container 的一个管理方式 , 那个租户的管理方式 , 然后 。
对 。
可以用 Docker image, 然后跟 Docker 的使用完全没有没有异样 ,但是它的安全性会非常非常好 。 那么所以这个就是一个很很好的一个机会 , 然后去尝试 。
OK。
所以有有 Hyper 其实我们就可以达到一个安全的共有的 ,其实一个 CaaS,CaaS 就是 container as a service as a service, 所以我们我我我我们目前也在提这个概念 。
OK。
对 。
所以这里就很自然的过渡到我们的下一个话题了哈 , 就是说你们的主要的客户其实并不是说 , 当然你说这个要大家熟悉这套方方式 API 肯定还是要教育用户的 。
对 。
但是说从你们这个 customer 就是谁为你们付钱这件事情来讲 , 可能还是一些这个刚才讲的这个公有云的管理者 , 对吧 ?
对 。
那这就牵涉到这个一个所谓的商业模式的问题了 , 就是说你们这个 Hyper 这个项目 , 你们目前打算是怎么去盈利呢 ?
呃 , 我们目前其实 Hyper 这个项目主要还是 , 呃 , 作为开源项目为主 , 这样的话也是希望希望吸引能够吸引 , 呃 , 更吸引更多的 Hyper 或者说一些 contributor 来参与到我们这个项目 , 来共同打造一个基于 container 的一个或者是基于 pod 的一个社区 。
OK。
然然后我们也是希望能够跟一些 , 呃 , 一些机房或者说一些类似于这这种的厂商去合作 , 希望能够帮助他们去提供更好的解决方案 。
也就是目前我们我们成立大概半年多的时间 ,其实像国外一个比较著名的一个也是创业公司吧 , 叫 Packet, 然后它其实就是已经推出了基于 Hyper 的一个产品 。
对 。
对 , 现现在已经出过 , 大家也可以去体验 , 当然可能要绑定信用卡就比较比较麻烦 。
哈哈哈 , 对 , 那就相信对于这个我们这个有足够这个长仙精神的开发者来说 , 这不是一个特别大的难题了哈 。
对 , 当当当然你可以自己在自己的自己的 , 呃 , 平台上面去部署或者是去去体验 , 当然也可以 。 然后除此之外就是跟这种 , 呃 , 这种厂商去合作之外, 我们也在自己也在做基于容器的公有云 , 就刚才说的 CaaS。
就你们自己要运营一个一个公有云 。
对对对 ,其实我们这个目前提的一个方式叫叫 HyperStack。
啊 。
对 ,HyperStack 就它其实是构建于 , 呃 ,Hyper 的基础上, 然后结合目前非常流行的 Kubernetes, 然后, 呃 ,OpenStack 里边的一些组件 , 比如像 Cinder、Notion 以及 Keystone, 然后将这些将这几个组件结组成到结合到一起 , 然后形成一个自己的 Stack, 呃 ,也是希望能够打造这个整套整个的生态链 , 然后这个我们已经提了这个 proposal, 然后目前也在去组织人手去打造 。
OK, 啊 , 这里就涉及到最开始的一个问题啊 , 就是说因为当时我看你们这个 Hyper dot sh 的这个网站上也有 , 就是说因为只有一个英文的介绍嘛 ,并没有这个中文的任何介绍 , 这跟你们这个商业模型和这个客户选择有关系吗 ?
对对对 , 我们目前的 , 呃 , 的一个打算呢 , 就是希望能够吸引更多 , 呃 , 呃 , 国外的厂商 , 然后去跟他们去去竞争或者说去 , 呃 , 去合作 。
然后之前的一个考虑呢 , 就是国内 , 呃 , 对于开源项目的支持或者说合作不是特别大胆或者不是特别明显 , 所以就是就是也也也考虑到这些问题吧 , 就是在前期作为一个创业公司可能 , 呃 , 用一种最保险或者说最最最妥善的办法吧 。
嗯 ,OK, 所以就是其实就很面临刚才我们这个一个很尴尬的一个情况啊 , 就是中国这个网络技术设施其实并并不如美国好 , 就是从这个就是这个叫做机房啊 。
对 。
云的建设这块是比较落后的嘛 。
对对 。
那同时在我们能够数得出来的哈 , 国内的一些公有云的运营者也就那么几家 。
对 。
吧 , 像什么阿里云 、 腾讯云 , 还有什么 ?
美团 、 青云 。
美团 、 青云以前还有 , 那京东云好像也有 , 现在还在吗 ?
呃 , 现在现在好像关闭了 。
关掉了 。
对对对 , 好像 。
然后他们其实并没有说 , 呃 , 到了那个足够大胆尝试这种新技术的时候 。
对 。
OK, 所以你们选择先去开拓这个海外市场 。
对 。
然后等这个在这个验证好这个模式和这个技术成熟之后, 再想办法能不能够国内的这些云厂商也能够或者说出一些新的这个小的云厂商也能够采用这个 Hyper 这个技术 。
对对对 。
哎 , 没错 。 所以你们在海外的目前的一些合作伙伴 , 就刚你提到除了那个 Packet, 一个这个也是一个比较新和比较酷的 。
对 。
这个公有云的运营商之外, 还有哪些是你们在目前是在有这个深度合作的 ?
呃 , 我们现在比较合作比较多的像 Zen Zen 的 Zen 的 devel, 呃 ,Mentor, 呃 ,Mentor 和 developer 我们都有非常多的接触 , 然后之前参加了 Zen 的 developer summit, 然后去跟他们去交流 , 呃 ,他们也非常支持 Hyper 对 Zen 的一个支持 , 呃 , 希望能够去 , 呃 , 共同探讨能够把这个性能啊或者说 , 呃 , 体验做到足够的好 。
所以 Zen 还是说是是是我们一个非常非常重要的一个 partner, 然后他们对我们在底层技术上面的一个再或者说在 HyperOS 上面的支持还是挺多的 。
OK。
对 。
明白 , 就所以就还是一个非常值得激让人让人激动的一个合作哈 。
对 。
因为 Zen 是我们一个很非常传统的这个 , 呃 , 虚拟机的这个 hypervisor。 好 , 我记得好像 AWS 就是基于 Zen 做的吧 ?
啊 , 对 。
好 , 现在是一个也是非常好的技术 。
对对对 。
OK, 啊 , 刚才我们讲完了这个 Hyper 这个产品 , 还有包括你们的商业模式啊 ,其实现在我们聊到这 ,其实我觉得我个人来说最关心的方这个一个领域就是这个团队 。
团队介绍1:06:38
嗯 。
呃 , 那个 Simon 你可以大概介绍一下你们现在做这个 Hyper 这个 team 大概什么样的情况吗 ?
呃 , 我们现在的开发者是五个人, 然后 。
五个人 ?
五个人。
这么小 。
哎 , 所以就是每天还是挺忙碌的 。
OK。
然后, 呃 , 一个人主要负责 HyperStack 相关的东西 , 然后另外就是主要集中在 Hyper 的这个核心产品 , 然后足够就是嗯新的 feature 的开发以及 fix 一些 bug, 然后因为毕竟开源代码也是希望能够让代码质量足够的优质 。
嗯哼 。
对 , 然后另外有 , 呃 ,有三个人主要是负责 BD 相关的东西 , 然后, 呃 , 做一些因为毕竟是海海外市场 , 所以我们有一些 , 呃 , 国外的朋友 , 然后去去帮忙推或者支持这些东西 。
啊 , 所以整个团队其实加起来也不超过十个人吧 ?
对对对 。
应该听非常非常小 , 然后精悍的一个团队哈 。
但是我们的团队还是对战斗力还是挺强的 , 对 。
OK, 所以当初你是怎么加入到这个团队里面去的 ?
呃 ,因为当时其实还是 Docker 还是挺火的 , 我也对 , 呃 , 虚呃 , 虚拟化 ,因为我我毕竟之前是做存储的 ,但是我对虚拟化的这块还是比较感兴趣 , 所以希望能够 , 呃 , 进入到这个领域吧 , 然后看到 , 呃 , 网上有一个招聘吧 , 然后大大概的可能一个想做一个基于虚拟化或者基于一个容器的一个 OS, 然后也想深入的去了解一下, 大概就后来就认识了 , 然
后就就聊聊聊 , 后来当然随着谈谈 , 随随着随着社区的变化或者说现在的变化 , 可能当时的想法慢慢在调整 , 然后也做出了现在的产品 , 对 。
所以你是在哪里看到他们的招聘广告的 ?
哈哈 ,是在 v2X。
啊 ,OK, 啊 ,v2X 跟我们节目的关系还是挺密切的 ,因为我们每期节目都会上面发我们的这个节目介绍和链接 , 然后这个 v2X 的这个 Livia 也非常 , 呃 , 很 nice 的给我免费在那个 podcast 那个分类里面加了一个测量的广 , 呃 , 广告 ,也非常感谢他们 。
哦哦 。
对 ,v2X 也是就国内一个比较啊好的这个程序员和开发者的一个社区嘛 。
对对对 。
所以其实你在上面能能找到他们也是其实也是意料意料之内吧 。
对 , 然后其实之前就一直在关注 , 没想到没想到就在那去结缘了 。
哈哈哈 , 这这个还是挺机缘巧合的事 。
对对对 。
大家是多混这个社区会比较好哈 。
对 ,其实这圈子还是挺小的 。
OK, 所以你们现在这么一个小五个人的这个开发团队啊 , 你们这个工作模式大概怎么样子的呢 ?
呃 , 我们现在的工作模式大概就是相当于我们五个人五个开发 , 五个 developer, 然后分布在 , 呃 , 南京 、 上海 、 北京 , 然后其实是一个相当于 remote work 的一个工作方式 , 大家平常沟通就是 , 呃 ,Telegram 以及 Traino 的一个一种方式 。
啊 , 所以其实你们五个人并不是在一个地方的 。
对 ,不是在一个地方 。
然后你们都是在那 , 那你们会在家里工作吗 ? 还是去到哪里办公 ?
主要还是在家里办公 , 然后这样的话节省一些交通上的成那那时间的成本吧 。
啊 , 对对对 , 这个好爽的 ,因为其实我知道每个人的可能最高效的时段是不一样的 , 然后浪费在交通上真的是一件非常让人不爽的事情 。
对对对 , 尤尤其像我在北京这种城市这么大 , 然后人挤人的这种哈哈哈 , 真是有点难受 。
所有的这个写代码的灵感和激情都磨灭在了公交车上了 。
对对对对 , 所以 , 呃 , 当然远远程办公其实是当然也是比较吸引我的一种方式 , 大家希望能够更更高效的去利用时间吧 。
OK, 那所以你们五个人在这个远程工作中, 你刚才提到了有这个 Telegram, 这个用来是是这个是群组聊天 , 对吧 ?
对 。
然后还有一样那个是 , 哎 ,是用那个什么工具来着 ?
呃 ,Traino。
Trailo 啊 ,Trailo 做那个协作 。
对 , 协作 。
对 , 所以那你们像代码管理啊 , 还有其他一些工具大概是会用到哪些呢 ?
呃 , 代码管理的话就是 GitHub。
OK。
对 , 然后我们之前是 , 呃 , 发布之前是 private repo, 然后现在是公开了 , 大家也可以去我们的官网上以及去 GitHub 的网页上面去关注我们的项目 , 多多点赞 。
OK,OK, 那个那个项目的地址 , 还有包括 GitHub 的地址 , 我们会稍后会放到这个 shownotes 里面 , 大家就可以看哈 。
嗯 。
这里可以其实可以接着聊一下, 就是你们这个这个在 GitHub 上面协作的模式 , 你们是一个会是一个大概是一种什么样的过程呢 ?
可以大概描述一下吗 ?
呃 , 嗯 , 目前的过程呢 , 就是相当于已经过往之前的封闭开发的一个过程 , 所以现在的 , 呃 , 进进进 patch 的模式呢 , 还是跟 , 呃 , 比较比较正就比较正规吧 , 然后有个 patch 的话是 TPR, 然后, 呃 , 两一到两个人去 review, 如果没问题的话才可以墨指 , 这样的话就保证了质量以及 , 呃 , 效率 , 然后会有一些第三方的工具 , 呃 , 就就是我们会写写了一些脚本
, 当然没有也也在不断的完善过程中, 希望能够在 , 呃 ,有 PR 的时候 , 呃 , 触发一些自动化的检测等这些工具 。
OK, 所以就大致来说就还是一个标准的一个 GitHub 开源项目的流程 。
对对对对 。
通过 PR 驱动这个这个 feature, 还有 bugfix, 然后进行 , 呃 , 呃 , 呃 , 就比经典的这个 code review, 然后再 merge 这样 。
对 。
QA 这块你说你们是还没有做完全自动化的 QA 是吧 ?
对 , 还没有做完全自动化的 QA,但是就是手动化的测试都会都会做 , 这是标配 , 然后, 呃 ,因为 Go 本身做过一它它有 unit test, 所以这个的话因为当时开发时间比较紧 , 然后我们这个有的一些 component 可能没有太完善 , 所以这个也在不断完善 。
嗯哼 。
嗯 。
就这个可能需要也就你们一个一方面你们自己努力哈 , 另一方面就是看能不能开源社区能贡献一些喽 。
对对对对 ,因为我我我们的人手实在是太少了 。
哈哈哈 ,有意思 ,有意思 。 哎 , 这里刚才你也提到了哈 , 这个 Hyper 跟 Docker 一样都是基于用 Go 语言开发的嘛 。
嗯 。
就当初你们为什么选择用 Go 语言呢 ?
呃 , 我们之前选择 Go 语言其实 , 呃 ,也是也是考虑到了 , 呃 , 跟 Docker 的一个关系 ,因为 , 呃 , 就抛抛抛开 Go 语言本身的一些特性 , 比如并发呀 , 它的高效的开发等等一些一些特性 , 另外一方面就是 , 呃 , 我们其实最开始的版本是基于 Docker Demon 来做的 , 然后因为 , 呃 ,Docker Demon 会因为我我们用到 Docker Demon 去铺它的 , 呃 ,Docker 的 image 来来下铺下来 , 然后去把这个 , 呃 ,
文件全全部传给 Hypervisor, 然后这个过程中呢 , 可能用 Go 语言直接跟 Docker Demon 去交互 , 这样的话是更省事更简单 。
啊 , 这样 。
对 , 所以但是随着后来我们移除了 Docker 的 Demon 的一个依赖 。
嗯 。
呃 ,其实用用用其他语言当然也可以 , 就是就是可能也历史原因问题 , 就是我们继续沿沿用了这个 Go 语言 。
OK, 那所以其实你们在这个使用 Go 写这个 Hyper 过程中, 你们遇到了什么样的问题或者有什么心得可以分享吗 ?
呃 ,其实 Go 语言还是以从语法上还是有些坑的 。
有 , 比如说呢 ?
比如说写写 Go 写时间长啊 , 写 C 都不加分号 。
哈哈哈 , 这个是好事 。
呃 , 好吧 。
哈哈哈 。
呃 , 然后另外一些可能就是 , 呃 , 本身 Go 语言因为它刚最近刚发布的是 1.6 吧 , 还是之前是 1.5。
1.1.5 应该是 。
啊 , 对 ,1.5。
对 。
然后 1.5 的一个版本 , 它其实有一些东西还是做的不够完善的 , 然后我们这过程中也是踩了不少坑 , 然后用其他方式去转换 ,但是可能效率上面不如那个有优势 ,但是这个可能就是 OS 相关的东西啊 , 比如在 Mac 上面的的一些特性 , 它 Go 语言 。
是调用内核的一些东西还是什么 ?
呃 ,SysSyscall 的东西 。
OK。
支持的不够完整 。
OK。
然后所以就必须用其他一种更加 , 呃 ,tricky 的方式去做 。
啊 , 明白明白 。
对对对 。
哎 , 所以其实像 Hyper 除了用 Go 语言写大部分 Java, 你还你们还用到其他语言去编写其他一些小部分的功能吗 ?
还是说是一个纯 Go 的一个项目 ?
呃 , 我们在 GetOS 里面是 CC 的东西 。
哦 , 那部分是就需要做的哪些工作是要用 C 来必须要用 C 来完成的 ?
呃 ,其实也不是说必须要用 C 来完成 , 只不过用 C 可能效率更快一点 。GetOS 里面它其实就是一个 , 嗯 , 增就是 , 呃 , 相当于修改过的 Init Init 的程序 , 然后它它是可以解析 JSON 格式 ,因为它这样这样的话是通过 JSON 的文那个信息消息来跟 , 呃 ,HyperDemon 去交互 。
啊 。
这样的达到一个传输数据或者是通信的效果 。
哎 , 这个有点意思啊 , 就是你们这个 GuestOS 里面还有一个自己定义的 Init 程序 , 这个好像现在啊 , 好像比较常见的是用那个 system system D 对吧 ?
对 。
稍微比较重吗 ? 还是什么原因 ?
呃 , 对 , 可能速度比较快吧 。 不不 , 对对对 , 就是速度比那个就比较重 , 然后我们这样用启动速度会很很慢 , 然后 。
OK。
呃 , 呃 , 我们当时测的时候大概十几兆或二二应该是二十几兆的那个空的 memory 就够了 。
OK。
对 , 所以就足够的精简 , 足够的小 。
就是现在一个 Hyper 的 GuestVM 用你们自定义这套东西就一二十兆就可以起一个了 , 对吧 ?
对 , 应该是二十多兆 , 二十多兆 , 一十十一兆是不够的 。
对 , 相对于很多这个什么 , 特别是他跑他们 Tomcat 啊 , 这些加完以后一上来都一两个 G 的内存占用 。
呃 , 对 , 这这这个当然我们说的是一个最最最简模式 。
对对对 , 如果如果 。
这是一个就是说就我就说这种一二十兆的开销基本上可以在现代机上可以忽略了吧 。
对对对 。
那还是挺好的 , 挺好的 。
嗯 。
最最后补充的就是希望大家有志于加入我们 Hyper 项目的 , 能够多多为我们提 , 呃 ,PR, 我们也会非常也会非常积极的反馈 。
如果 , 呃 ,有同学提 PR 或者说被我们接受的话 , 我们在初期前 100 人应该会提供 T 恤作为奖励 , 就是我我就是之前 Rio 之前在推特上面穿过的那个 T 恤 。
哈哈哈 , 对 , 那个之前我在北京跟 , 呃 , 跟 Simon 就是见面面聊过哈 , 然后非常厚颜无耻的要了一件 。
哈哈哈 , 没没没 , 这个这个也也也是感感谢 Rio 帮我们去大力的宣传 , 然后也是希望能更多的开发者去接触到开源社区 , 接触到开源项目 , 然后更多更更就是怎么说呢 , 就是一个提升一个自身素质 , 加上一个 , 呃 , 写代码功力的一个水平吧 。
啊 , 对对 , 非常感谢 。 就是其实因为这次我邀请 Simon 来做这节目 ,也是因为我觉得 Hyper 是我见过的 , 就是国人, 呃 , 做的这个开源项目里面还比较让我惊艳的一个嘛 , 所以我也希望借这个机会啊 , 让邀请到就是让他让更多人了解他 , 知道他 , 然后能够去参与到这个开发 ,也让我们这个中国的开源项目能够有一个啊 , 好的这么一个 , 呃 , 这个
上涨的趋势吧 。
对 , 然后另外一点 , 如果大家不不觉得提 PR 不爽的话 ,也是非常希望大家能够加入到我们的团队 , 我们团队也是拥有非常多的牛人, 然后多年的 Corner 的工程师以及特别资深的 consultant 都都都在我们团队 , 所以如果大家有一技之长或者说 , 呃 ,有志于做 Hyperstack Hyper 项目的 , 希望大家能够积极给我们提 , 呃 , 提 PR 或者是发奖励 , 谢谢 。
哈哈哈 , 想不到毕节目还做了一个猎头的工作 。
哈哈哈 , 非常非常好玩 。
嗯 。
OK, 今天的节目就先到这里 , 感谢收听 IPN Podcast 网络旗下的 IT 技术主题娱乐节目 《 内核恐慌 》。 我们号称 hardcore,但也没有干货 ,但是这期干货还是满满的 。
想听的人听 ,不想听的人就别听 。 您可以为本节目捐款 , 捐款地址是 ipn.li/kernelpanic/donate, 捐款金额随意 , 只要是能被 8 整除的正整数就可以 。
捐款不会给你带来什么 ,不捐也不会让你失去什么 。 我们的口号是 Hyper is Hyper awesome。 如果您有任何反馈 , 可以发电子邮件到 kernelpanic@ipn.li。
同时也欢迎您收听 IPN 旗下其他几档节目 :《IT 公论 》、《 未知道 》、《 太一来了 》、《 流行通信 》、《Hi story》、《 薄雾志 》、《 选美 》。
我们下期再会 。