你觉得微信是如何走出来的?( 三 )


同样在2013年 , Docker项目的第一个版本被上传到了GitHub , 以Apache2.0授权协议开源并在GitHub进行维护 。Docker拉开了容器作为一种虚拟化技术的历史 , 在此之前 , 随着硬件性能的发展 , 硬件性能过剩成为一种愈发显眼的问题 , 而硬件虚拟化成为最先出来的解决方法 。传统虚拟机技术是虚拟出一套硬件后 , 在其上运行一个完整操作系统(GuestOS) , 在该系统上再运行所需应用进程 。但GuestOS本身就是一个非常占内存且需要在所有虚拟机上重复安装的系统 , 这种方式显得很重 。相比之下 , 打包进容器内的应用进程可以直接在宿主内核中运行 , 而容器内没有自己的内核 , 也不必要进行硬件虚拟 , 这种封装隔离的逻辑显得更轻 , 也有更好的扩容弹性 。
由于容器的出现 , 使得硬件虚拟化 , 也就是虚拟机与大内存的GuestOS , 不再是实现资源有效配置的必要条件 。但容器更偏向一种技术方法 , 这种技术最终要解决应用程序端的问题 , 因此在庞大的容器基础架构集群之上 , 需要一种更高维度的调度工具 。
2017年10月的欧洲DockerCon大会上 , Docker公司CTOSolomonHykes宣布下一个版本的Docker除了支持自有的调度引擎Swarm外 , 将会首次支持一个外部的调度平台——谷歌的Kubernetes 。
Kubernetes也被叫做K8S(由于一共8个字母) , 是一个针对容器应用 , 进行自动部署 , 弹性伸缩 , 和管理的开源系统 。主要功能是生产环境的容器编排 。2014年6月谷歌云计算专家埃里克·布鲁尔(EricBrewer)在旧金山的发布会为这款新的开源工具揭牌 , 2015年7月22日迭代到v1.0后 , k8s正式对外公布 。
率先提出容器概念的Docker在三年后主动靠近K8S , 这一举动给业界带来的震荡不亚于那句“微软爱Linux” 。这意味着在容器调度工具的市场中 , K8S在与Swarm和Mesos的争锋中胜出 , 成为行业标准 。
你觉得微信是如何走出来的?
文章图片

文章图片

图源:TheNewStack
某种程度上 , 微信Yard与Windows有些相似处 , 两者都曾是技术至上但完全向内的闭源作品 。当时不同往日 , 在微信长成一个平台 , 连接起的业务越发复杂后 , 一场改闭源为开源的革新已经不可避免 。巧合的是 , 微软在2018年以75亿美元的价格收购了Github , 微信在这一年决定开始从Yard开始转向K8S 。
这个过程并非一蹴而就 , 向K8S迁移需要硬件环境的必要支持 , 腾讯负责云环境搭建的团队从2018年开始着手建立 。与此同时 , 以930变革为界 , 腾讯内部开始改变服务器的提供模式 , 从原来提供物理机 , 改为提供CVM虚拟机 。
前面已经提到 , 虚拟机在性能上对比物理机并没有优势 , 摆脱物理机的价值在于降低成本 。没有折旧 , 不需要购买实体服务器或者特别布置机房 , 这将节省出一笔上亿的开支 。这个步骤在2020年走完 。也是从那时候开始 , 一个完全运行在云端的Yard , 开始向K8S迁移 。
转向K8S
2014年Yard开始成型的时候K8S还没有出现 , 当时设计的时候微信内部对于yard的定位就是只满足自己的需求 , 没有做更通用化、或者进一步云化的需求 。从两个看上去有些脱节的系统中带着一大堆复杂的功能做转换 , 兼容性就成了这个迁移过程中最重要的问题 。
一个最典型的冲突是 , 以K8S的架构在一台服务器上部署两个功能模块 , 这两个功能模块是要完全隔离的 , 这是K8S或者当下云平台从安全性角度形成的一个基本假设 。但是在早期Yard的设计里并没有特别强调这一点 , Yard的分核部署逻辑完全服务于微信 , 一台机器中的两个功能模块是可以通过共享内存等一些方式互相通信的 。