2016-11-24  来源:阿里技术 作者:林轩


林昊(毕玄),阿里巴巴研究员,平台架构部负责人,淘宝服务框架(HSF)作者,异地多活项目负责人,目前致力于资源统一管理调度系统建设。

12月6日-7日,由阿里巴巴集团、阿里巴巴技术发展部、阿里云云栖社区联合主办,以“2016双11技术创新”为主题的阿里巴巴技术论坛(Alibaba Technology Forum,ATF)将在线举办。12月7日晚20:00,毕玄将在在线论坛上发表《阿里超大规模Docker化之路》的演讲。

众所周知Docker技术这几年大热,但是过去相当长的一段时间内,阿里内部技术人员只能自己私下玩玩,没法在阿里内部生产环境使用Docker,因为Docker要求的OS版本和内核版本都比较高,阿里内部的AliOS5u7和AliKernel2.6.32内核是在CentOS-5.7和linux-2.6.32内核基础上做了很多定制而来,没法运行Docker。如果将内部OS从5u、6u升级到7u,将内核从2.6.32升级到Docker官方推荐的3.10,除了之前众多的内核、OS补丁需要和高版本做合并和功能对齐之外,还必须和上层应用经过足够多的磨合,这可不是一朝一夕就能完成的事情。阿里的应用数量庞大,种类众多,光兼容性的验证没个1、2年的时间没人敢把核心应用放上去。因此虽然Docker能给研发和运维带来的好处,作为技术人员大家都心领神会,但是面对Docker浪潮却只能是坐观弄潮者,徒有羡鱼情。

所幸的是,这个状况在去年7月份有了改变,这事要从阿里内部的容器技术产品T4说起。T4是阿里在2011年的时候基于Linux Container(LXC)开发的容器技术基础设施。从12年到15年3年时间里用的应用越来越多,实际上已经覆盖了电商领域大部分App。相比Docker的模式和理念,T4其实更适合阿里内部的运维现状。T4是从阿里内部的资源管理和日常运维中土生土长出来的产品,在诞生的第一天就针对内部基础设施、运维工具甚至是运维习惯做了很多特别的设计。T4在LXC容器的基础上,对容器资源和各种统计的可见性做了很多卓有成效的隔离,使得在容器内部看到的资源就是分配给这个容器的资源,内部看到的负载就是这个容器的负载等等。同时在LXC之外还做了容器的磁盘空间配额限制和隔离,容器内看到的那块磁盘大小就是创建容器时分配给他的磁盘配额大小。这样在CPU、网络、内存、磁盘等资源使用和统计监控上做到了容器内和物理机上基本没有区别。原来跑在物理机,或者KVM、Xen中的应用,能够平滑无感知的迁移到T4中。当年从Xen、Kvm迁移到T4的过程中,很多应用的开发者和Owner确实不知道什么时候完成迁移的,可能在某次常规的应用发布中,后台工具系统已经自动做完迁移了。甚至直到去年在和一个应用研发的沟通中,他坚信自己的应用是跑在KVM中的,我们到后台查了一下,其实已经在T4上了。

于是我们从去年6月份开始对Docker和T4都做了一些修改整合后,将两者融合为了一个产品,相当于既让T4具备了Docker的镜像能力,又让Docker具备了T4对内部运维体系的友好性,并且能够运行在内部的AliOS5u7和2.6.32内核上。这个产品在内部称为AliDocker,在去年8月份推出了第一个雏形版本。另外这个版本还解决了Docker当时很严重的一个问题,就是Daemon退出其上所有的容器都会退出,这一点在真正生产环境大规模部署时是无法接受的。Docker官方直到1.10版本才开始部分解决这个问题。我们当时的Docker版本从1.5一直跟进到后来大规模部署的1.9版本,通过Docker的Daemon管控进程和容器的解耦,Daemon重启后对之前运行容器的自动识别和重新接管,解决了这个问。这样Docker在阿里内部大规模应用就有了可能。

从这个版本发布到能够替换T4大规模部署还走了很长的路,首先T4和Docker毕竟是两个不同的产品,除了大家耳熟能详的容器机制之外,其实还有非常多的细节和特性。为了让应用在迁移中无感知,AliDocker对原先T4容器的细节功能做了全面的兼容,同时对上层的运维系统做了大量改造,使其支持Docker场景下的发布和运维模式,从Docker镜像构建到分发启停、扩容迁移都做了完备的工具和流程支持。其次在T4到AliDocker切换的过程中,我们做了2者混跑的支持,也就是说同一台物理机上可以同时跑原来的T4容器和新的AliDocker容器,互不干扰并且能统一运维。因为众多应用的实例是交错部署在众多物理机上,同一个物理机上往往有十几个不同应用的实例混跑。这种兼容机制就保证了不同应用可以按各自的节奏逐步完成Docker化,而不需要在某个时间和空间做一刀切,避免了大规模升级Docker的过程中不必要的应用腾挪和迁移。然后在我们将AliDocker和T4功能完全对齐,从实例级别到应用级别做了足够的灰度后,推送了一个开关,使得从那一刻开始创建新T4实例时会自动创建为AliDocker实例,从而完成了增量实例的切换。对于存量的T4实例,我们选择了一个完整的深圳交易单元,分批次做了批量切换,在切换期间如果发生大的问题,可以把深圳单元的流量全部切换到上海。这一保障要得益于阿里的异地多活灾备架构,对于这类底层基础设施的升级能够提供理想的兜底方案,使我们敢于放开手脚去做,而又能有效的控制风险。所幸在整个升级洗牌的过程中,没有动用到这个大杀器的功能,虽然出了一些小问题但都能及时修复,影响不大,也让我们的系统更加健壮,让各个部门的人对交易核心流量切换到AliDocker这件事情更有信心。

但是仅仅将运行容器从T4切换到Docker其实对我们带来的改变并不大。Docker真正的核心价值在于镜像机制,以及镜像机制带来的研发与运维模式的变革。应用镜像化大致来说有2种方式,一种是比较保守的方式,镜像中只包含基础环境,容器起来后,再登录到容器中部署应用包。这种方式和原先的T4类似,镜像化上不够彻底。为了彻底根治环境不一致的沉疴,从机制上杜绝非标准变更,让每个环境改变都沉淀下来,我们采取了另一种更激进的方式:镜像中除了包含基础环境外,还包含应用程序。应用新版本发布时,直接销毁原有的容器,用新版本的镜像启动新的容器提供服务。这样任何在上一个容器中做的小动作都会随着下一次发布全部清洗掉,如果想要保留下来,就必须固化到应用的Dockerfile中。一个应用镜像就代表了应用的所有依赖环境和当前版本。任何时间任何地点将应用最新镜像拉起,都能得到和线上其他实例一致的服务和行为。我们在推广AliDocker的过程中,一直和所有的应用方强调这个理念,也获得了大家的认同。

于是在今年5月底,我们成立了专门的项目组,快速推进这个事情,目标是把双十一流量覆盖的核心应用全部升级为镜像化模式的Docker应用。由于我们做到了运行态与T4保持一致,改造过程比较顺利,但实际上线中也遇到了许许多多即在意料之外又在情理之中的问题。这些问题会在毕玄的《在线ATF-阿里超大规模Docker化之路》中做详细分享,您将可以从中了解到阿里集团从AliDocker引擎到上层运维部署体系经历了怎样的大改造,如何在电商交易级别的大规模应用中来表现。

原文链接

【访谈】阿里超大规模Docker化之路相关推荐

  1. Docker学习总结(18)——阿里超大规模Docker化之路

    12月6-7日,由阿里巴巴集团.阿里巴巴技术发展部.阿里云云栖社区联合主办,以"2016双11技术创新"为主题的阿里巴巴技术论坛上,阿里巴巴研究员林昊分享了阿里超大规模Docker ...

  2. 可执行镜像——开发环境的Docker化之路

    每位开发者都经历过软件不兼容之痛.当我们需要同时开发几个使用不同Java运行时版本的项目时,这些问题会急剧爆发,特别是在OsX平台上.为此,Ruby使用自己的版本管理工具.我的两个同事曾用了几小时来调 ...

  3. CI Weekly #9 | 揭秘阿里 Docker 化实践之路

    2017年悄然而至,对 flow.ci 你有什么新的期待呢?新的一年,flow.ci会越来越强大好用,希望继续得到你的支持与反馈.最近,我们做了如下的「功能优化」与「问题修复」,看看有没有你想要的: ...

  4. Docker学习之路02:阿里云镜像加速器

    阿里云镜像加速器 Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学习之路03:Docker的常用命令 Docker ...

  5. 容器化技术与微服务结合---结合springcloud微服务框架进行部署(含切换成阿里云docker仓库)(五)

    目录 系列 更换成阿里云仓库 开通阿里云镜像服务 创建仓库 本地k8s切换成阿里云的镜像仓库 测试阿里云镜像 准备简单的微服务 eureka 应用配置 k8s配置: demo-a 应用配置 k8s配置 ...

  6. 国内最具影响力科技创投媒体36Kr的容器化之路

    本文由1月19日晚36Kr运维开发工程师田翰明在Rancher技术交流群的技术分享整理而成.微信搜索rancher2,添加Rancher小助手为好友,加入技术群,实时参加下一次分享~ 田翰明,36Kr ...

  7. “双11”后顶级运维和容器盛宴,议题涵盖腾讯游戏运维、阿里云Docker、京东大促、微票儿...

    自动化运维已经成为当下越来越多的IT团队重视的问题,伴随着以Docker为代表的容器技术的出现,让我们的运维人员从新的角度重新审视自动化运维,诚然,Docker的思想很好,但是Docker在运维实践过 ...

  8. “双11”后顶级运维和容器盛宴,议题涵盖腾讯移动游戏、京东大促、阿里云Docker、微票儿...

    自动化运维已经成为当下越来越多的IT团队重视的问题,伴随着以Docker为代表的容器技术的出现,让我们的运维人员从新的角度重新审视自动化运维,诚然,Docker的思想很好,但是Docker在运维实践过 ...

  9. docker化你的java应用(上)

    前言 在各种技术大会(互联网架构,云计算等等),哪都少不了docker的身影.docker为啥这么火?因为它解决了大部分企业的痛点:快速的持续集成,服务的弹性伸缩,部署简单,方便了运维,而且为企业节省 ...

最新文章

  1. 惠普发布软件定义存储 助力提升虚拟化能力
  2. C++ 异常处理Demo - win32 版
  3. 约数个数定理约数和定理
  4. Python django-restframework 前后端分离实现在线教育课程平台
  5. centos5.5中安装mysql5.5.3
  6. 深入理解C#:编程技巧总结(二)
  7. linux语言 翻译工具,Linux文本转语音工具eSpeak介绍
  8. VisualVM提示检测不到本地JAVA程序
  9. Upload LABS Pass-11
  10. 【毕设】ASP.NET基于.NET的城市公交查询系统的设计与实现(源代码+论文)
  11. EXCHANGE服务器一些常用的邮件限制方法笔记
  12. Hadoop HDFS原理
  13. 陕西2020行政区划调整_陕西省最新行政区划,厉害了大陕西
  14. 微信Bscroll事件
  15. 是时候适配 Swift 3 了吗——专访 LINE iOS 开发工程师王巍
  16. nrcellcu和nrcelldu_华为5G常用MML命令(现场版本)
  17. 小议车辆环境视觉基础前视感知
  18. matlab 自激振荡,基于Simulink的非线性系统自激振荡的仿真
  19. ffmpeg实现画中画
  20. AirTag被不法分子滥用为恶意追踪工具?苹果:即将更新解决

热门文章

  1. Ubuntu20.04安装docker简易教程
  2. 逆天的chitgpt
  3. 黑马程序员,黑马论坛---JavaEE第4期,毕业7天,34人就业平均薪资7308
  4. 2017网易游戏雷火盘古实习生招聘笔试:字符串编码
  5. MG-BERT:利用无监督原子表征学习进行分子性质预测
  6. redis 主从哨兵01
  7. 内核地址消毒剂(KASAN)
  8. 任务悬赏平台API接口对接流程
  9. 盘点微信吐槽点,你中了几个?
  10. PCB过孔和焊盘大小标准