阿里搜索业务容器化中的一些经验和思考

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:  从个人对容器的发展来看。大会上几位问到一些隔离的问题,分享嘉宾都说这个比较复杂,要么说这块他们没有解决,确实经常出问题,要么说私下来讨论;其实我们在接入和调度容器的时候,也发现了目前的容器技术在隔离上还欠缺很多,如果要能更好的提高物理机的资源利用率,降低成本,单机隔离和单机弹性将是一大关键技术和核心竞争力。

概要

参加了上一次CNUTCON 大会,有来自coreos的李响,分享了很多关于etcd的事情,以及关于k8s包括自己和coreos公司的一些观点;还有来自mesos的tim chen, 他分享了很多mesos的思路以及一些接入容器过程中踩过的一些坑;swarm kit的负责人陈东洛也分享了swarm的思路,这方面由于刚出来没多久以及分享的同学也只有他,所以东西并不多;总的来说,感触很深。

关于容器和编排,想到开源和创业

  从会议分享者来看。相比去年,容器技术有了更大的发展;docker很热,每一个主题都在涉及docker。且基本上大家都认同docker的镜像。对于容器,虽然也有其他的一些选择,比如rkt,lxc等,但对于runtime以及接口,大家基本趋于一致,短期也不会期望有大的变化,大家开始从更高层次思考容器的应用,比如直接提供给用户编排的工具,服务或系统,而不是一个容器。swarmkit的发布就有这个意思,大家开始把重心转移到编排和调度。
  从个人对容器的发展来看。大会上几位问到一些隔离的问题,分享嘉宾都说这个比较复杂,要么说这块他们没有解决,确实经常出问题,要么说私下来讨论;其实我们在接入和调度容器的时候,也发现了目前的容器技术在隔离上还欠缺很多,如果要能更好的提高物理机的资源利用率,降低成本,单机隔离和单机弹性将是一大关键技术和核心竞争力。

     我们采用了跟mesos一样的架构和思路,因此我重点听了mesos相关的topic,希望是能够吸取到好的经验,能实际实施到我们的系统中,然后听了更多的k8s的topic。整体个人感觉,在开源解决方案中,k8s目前要热过mesos,k8s在web service这方面确实占据了很大的市场,吸引了很多开发者,但在有状态服务的应用特别是大数据上面目前并没有很好的解决方案,社区也一直在讨论和抽象当中。相反mesos在大数据服务场景下能够很好的解决,并在集群规模上也有很好的优势,但拿到mesos是不能直接解决用户的需求,需要用户写一个scheduler。swarm的思路则是另外一种哲学,或是另一个极端,跟docker的思路是同承一脉的,把更多的东西集成进系统里,提供给用户简单统一的接口,装好docker就可以编排调度了,这方面后续发展如何,很难说,暂且不论。总的来说,这一开源领域目前仍是K8s、Swarm、Mesos三足鼎立,近期也看不到谁会完全胜出。它们的功能比较如下图所示。

orchestrators
  无论mesos这种2次调度,扩展性强的哲学,还是swarm kit这种集装箱式的哲学,其次是k8s先取其中,优先发展自己优势的思路。国外这种开源以及项目创业的一些共性值得我们思考和学习,这里举一个例子, coreos公司他们把他们的目标和使命定义为"secure the internet", 在zookeeper的发展满足不了他们需求的时候,他们能做出这么大的决定重新build一个如此大的项目,并且成功了,成为容器界基本都依赖的一个项目,这个勇气和思路值得学习。

   我们的项目前身是hippo,跟google borg相似,采用自建的方式,借鉴了很多mesos的思路,但确没有使用mesos开源版本进行改进,与社区缺乏交流,不能共享mesos社区新的feature,也不能对开源进行影响;另外我们系统暂时也不能对国内技术全产生很大的影响,吸收群体的智慧有限,这是一大遗憾。都说开源是有利益目的的,你认同吗? 

从mesos接入docker,想到hippo接入docker

  为什么想到这个,实际上我们在接入的过程当中踩到了相同的坑,有的mesos解决的好,有的还没有解,可以作为后续改进的一个参考。

mesos和hippo容器化之路 (Containerizer)

容器接入的接口设计

  我们团队关注docker很早,在hippo启动前就开始就关注docker。
  14年我们直接用cgroup和namespace等标准的os feature完成了引擎进容器的demo,证明了隔离的可行性。
  一直想完善我们的隔离,docker开始崭露头角,但docker在2.6.32内核上要跑到生产还不行,而t4在阿里在生产已经跑了一段时间,因此我们14年为了让混布,提高资源利用率,节省成本,选择了t4进行落地。
  跟mesos一样,在容器技术没有完全统一的情况下,我们当时在设计的时候也考虑了支持不同的容器以及不同的隔离策略,以实现用户的定制需求和可插入性,或者可配置性。
  mesos在最开始的时候,为了支持External Containerizer,定义了一套回调的脚本接口,用户可以在脚本里完成各个阶段的工作。但docker非常火,连k8s也在学习docker的接口设计理念,而且External Containerizer变得很难用,最终这种方式被废弃掉。
  hippo是自建方案,有一个好处我们不需要考虑太多其他人的兼容性,这样我们在设计实现的时候,相对的在接口设计方面做得直接些,没有过度设计,从t4到docker基本上,对主体结构代码没有太多的侵入性。createInstance,destoryInstance,checkInstance几个简单的接口不论是什么容器,都适用。

 现在的mesos,对docker是native integration。没有额外的setup。只需要docker daemon和docker client。可以说在这方面和hippo是殊途同归了。

容器接入踩了很多坑,还有很多未解决的

  真的就是3个接口那么简单吗?mesos在接入docker的时候,在处理日志,recovery, tag containers, cgroup资源更新等等踩了很多坑。以docker update为例,docker在1.2以前是一直不支持的,且后续版本也支持的不够。

 更能说明这个问题的是如果mesos自己跑在容器里,如何去更新其他容器的资源,因为这个时候已经chroot。mesos采用了一个跑在宿主机的docker exectute的代理(如图2)。这个方案我觉得比我们做的好,我们的pouch(阿里自研容器产品)把很多的逻辑直接做在了docker daemon,这样侵入性太高,跟踪最新的docker版本成本很高,无法及时享受修复的bug以及新的feature。

docker

还讲到一些cgroup的坑,我们最近在升级7u的过程也踩到过。主要是systemd+docker+mesos。这三者都会涉及cgroup节点。在7u中,systemd管控了整个系统的资源。https://issues.apache.org/jira/browse/MESOS-3009 ,他们踩到一些坑复现后发现是docker创建的容器,systemd有在干预它的cgroup。hippo也踩到了这样的坑,对应的内存,cpu限制不住,我们的实际做法是通过采用cgroup driver为systemd,并在pouch里面通过systemd api来控制cgroup来避开这些冲突。

systemd

还有很多解决了的坑,暂且不论,还有很多我们未解决的坑,这些可能每一个都需要开一个topic去讨论,这里有兴趣的可以私下讨论。

docker会妨碍我们的容器发展吗?

  mesos的经验,docker相对比较重,在一台机器上跑很多的docker容器是会带来额外很多问题。
  hippo希望做的更强大,希望能支持更多的离线和在线job,来提供资源利用率,最终降低成本。但有的场景需要很轻量级的容器,有的需要更强的隔离。比如,随着图像处理需求的增强,AR/VR的发展,对GPU的隔离需求会越来越强烈,如果我们一直等docker来提供这些feature来解决这些问题,肯定是不行的,这是一个很大的问题。因此,和mesos一样,hippo也需要考虑解决这个问题,因此可能如何支持不同级别的隔离是未来需要思考的。
screenshot

容器里面跑容器

  这个在集群调度中心群也集中讨论过这个问题,当时是为了解决case的资源问题,据部分同学说docker不支持这个。但mesos表态要支持这个,他们举了几个需求,这里讲一个。

一个是在跑CI(Jenkins)时,希望jenkins申请一个大的资源,然后jenkins分给跑在上面的case,tim说这样做是为了设计简单,感觉没有说到点子上,但估计他对这块不是很熟,但我们的场景有一点很明确,就是各二层测试的时候,需要部署hippo一层来创建出各类的异常case。这个时候就需要二层起的hippo跑在容器的容器里。

还有一个很重要的需求其实来源于pod。需要容器里跑容器,来进行更细粒度的资源控制,以及更灵活的调度。

How to solve utilization, fairness and performance when

running all of these services at scale?

 这才是最根本的问题,tee选择离开mesos,选择创业,需求也来源于此。
 这个我们还在探索当中,大师从谷歌带回来的消息是,他们的cpu利用率超乎你的想象,我们还在探索当中,这里暂且不论。

其他

一口气写了这么多,零零碎碎,仅仅作为容器大会的一次观后作业。 整个2天下来,东西很多,对国内的这么大的分享也是第一次参加,会前并不太会选topic,所以会场里面的topic,有收获的,也有纯粹看热闹了,总体感觉国外请过来的嘉宾干货多,国内的广告多;国内张磊workshop专场讲k8s技术点以及发展还不错,ppt都在上面,大家可以下载下来看看,http://ppt.geekbang.org/cnutcon

 另外阿里新一代基础设施调度系统sigma正在如火如荼的统一所有资源池,后面我们也会在这方面分享对应的技术和思考。
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
搜索推荐 Cloud Native 算法框架/工具
都闪开,这才是最牛x技术搜索引擎【云原生】
都闪开,这才是最牛x技术搜索引擎【云原生】
|
7月前
|
机器学习/深度学习 搜索推荐 算法
搜索场景下的智能推荐演变之路:从基础到个性化
本篇详细介绍了搜索场景下智能推荐技术的演变历程,从基础的协同过滤算法到个性化推荐的深度学习实现。通过代码示例,读者可以了解不同阶段推荐算法的原理和实际应用,以及如何评估推荐效果。文章旨在帮助读者深入理解智能推荐的发展趋势,为构建更智能、个性化的推荐系统提供有益的指导。
1083 0
|
10月前
|
数据处理 数据库
ChatGPT学习企业产品、服务内容、往期方案,处理所输入的客户需求,定制化生成解决方案
ChatGPT学习企业产品、服务内容、往期方案,处理所输入的客户需求,定制化生成解决方案
119 0
《开放搜索在智能化行业搜索和业务增长领域的应用实践》电子版地址
《开放搜索在智能化行业搜索和业务增长领域的应用实践》PDF
124 0
《开放搜索在智能化行业搜索和业务增长领域的应用实践》电子版地址
|
机器学习/深度学习 自然语言处理 达摩院
文娱行业搜索最佳实践
本文将详细介绍如何通过“开放搜索(OpenSearch)内容增强版“在文娱垂类场景的应用,提升用户搜索体验,带来更多的业务转化
575 0
|
缓存 自然语言处理 并行计算
架构师之路--搜索业务和技术介绍及容错机制
架构师之路--搜索业务和技术介绍及容错机制
架构师之路--搜索业务和技术介绍及容错机制
|
机器学习/深度学习 自然语言处理 文字识别
算法专家解读 | 开放搜索教育搜题能力和实践
达摩院算法专家--徐光伟(昆卡)聚焦在线教育行业的拍照搜题场景,介绍如何应用开放搜索来构建更高搜索性能及搜题准确率的搜题系统,从而助力在线教育行业客户掌握更高层次用户体验的获客工具。
1278 0
算法专家解读 | 开放搜索教育搜题能力和实践
|
运维 自然语言处理 搜索推荐
社区论坛行业搜索最佳实践
社区内容通常包括UGC和PGC。由于关键词和内容多样性丰富、用词规范程度参差不齐,这就要求搜索引擎对关键词和内容进行智能语义分析,通过机器识别出用户查询的真正意图,找到最全面最相关的结果进行需求满足。本文和大家详细介绍如何通过“开放搜索”在社区论坛场景的应用,带来更多的业务转化,以提升整体业务收入。
772 0
社区论坛行业搜索最佳实践
|
人工智能 自然语言处理 搜索推荐
阿里云开放搜索重磅发布!云时代搜索业务的价值重构
【云栖大会】阿里云开放搜索重磅发布~
6798 0
阿里云开放搜索重磅发布!云时代搜索业务的价值重构
|
移动开发 监控 前端开发
开放下载!《大促背后的前端核心业务实践》
你关心玩法,我关心技术!作为淘系每年重要的大促活动 618 是如何保证平稳进行的?七大章节全方位展示 618 中的前端身影!另附 6000+ 字图文版前端学习秘籍和面试官直达简历投递地址,还不快来get?
20039 0
开放下载!《大促背后的前端核心业务实践》

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版