你可能不知道,微信的服务器今天才彻底搬到云上( 二 )

你可能不知道,微信的服务器今天才彻底搬到云上
文章图片
图源:微信官方Yard是四个英文单词的首字母缩写 , 分别是Yet , Another , Resource和Dispatcher , 合在一起即“仅仅是另一个资源分发系统” 。 或者称之为一套容器管理体系 , Yard利用容器技术对微信服务器CPU做了精细化隔离后 , 可以实现在同一台服务器上分割部署多个功能模块 。 这意味着在线与离线有了更有效率的混布方式 , 在线上了突发流量需求时 , 离线任务可以迅速腾出服务器资源 , Yard下微信集群CPU资源的使用率达到了40%以上 。 这种办法奏效了 , Yard托住了微信的下一个爆发期 。 2016年年底 , 微信和WeChat合并月活跃用户数达到8.89亿 , 那一年我国网民规模达只有7.31亿 。 但当微信走完了用户增长的最重要一程 , 开始把更多注意力放在业务宽度上时 , Yard的劣势也开始出现 。 2014年初的微信离第一个小程序的上线还有三年 , 甚至还没有微信支付 。 那扇接纳天下宾客的平台之门还未打开 , Yard在研发时也并未过多考虑与外部技术工具的兼容性 。 事实上 , Yard出生所被赋予的目标非常具体 , 针对服务器的CPU和存储做虚拟化的灵活调度以降本增效 , 换句话说 , Yard是为了解决一个指向性非常明确 , 与微信原有基础架构强关联的需求而诞生的 。 但随着更多业务的涌入 , 不开源的Yard像一个非标品 , 微信的业务在几年内迅速拉开宽度 , 业务涉及的领域变多 , 每个团队所依赖的技术工具各有偏好 , 定制化的要求带来很多不必要的工作量 。 大数据相关的业务主流上更偏向Hadoop或者Spark技术;做AI训练的团队则倾向于Tensorflow或者Pytorch , 但这些框架在第一次接入Yard时都要人工重新进行适配 , 甚至在每一次框架升级后 , 同样的事情又要再做一遍 。 越多新的技术工具引入 , Yard在开放性上的局限就越暴露出来 。 930变革后 , 剥离物理机成为上云的开始 , 但这只是第一步 。 基础架构整体搬上云端 , 微信这次势必要走到一个开源的环境里 , Kubernetes系统看起来是最合适的路 。 风向Yard真正开始在微信内部落地是2013、2014年前后 , 这也是微信上云的开始 。 这一年全球的开源潮流也终于开始向暖 。 彼时北半球的另一只企鹅Linux风头正劲 , 2014年当选微软新任CEO的纳德拉在上位后随即高举“微软爱Linux”;同一年 , 上线满六年已托管了超过1000万个存储库的GitHub逐渐成为微软、谷歌等硅谷巨头科技公司的码农客厅 。 你可能不知道,微信的服务器今天才彻底搬到云上
文章图片
图源:TheVerge一切早有迹象 , 2013年中旬白宫的一份“公开数据政策”(OpenDataPolicy)草案被发布在GitHub上 。 在此之前 , 将一份政府政策文件托管在在一家私人公司的服务器上从未有过 。 虽然这份文档并不能被二次操作或者衍生出任何代码项目 , 但它仍然具有极重要的象征意义 。 GitHub以及背后的开源思想 , 随着克里斯·万斯克拉斯而登堂入室 。 此前微软或者说整个科技主流声音直站在开源的反面 , 正如Windows与Linux长时间在安全性上的对峙立场一样 。 但技术的迷人处也在这里 , 开源的优越性在这个一切场景都趋向于虚拟化的时代显露无疑 , 一旦达成了共识 , 转变在一瞬间 。 从巨头到独立开发者们 , 开源的思想显然热起来了 。 让代码协作起来 , 甚至让写代码这件事本身社区化 , 正在成为信息世界新的项目管理方式 。 同样在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的争锋中胜出 , 成为行业标准 。