【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

从 Docker 运维看知乎容器平台的优雅整合

  • 2016-07-26
  • 本文字数:4051 字

    阅读完需:约 13 分钟

传统的部署是安装、配置和运行;而 Docker 的出现革命性地改变了传统模式,部署被简化为复制和运行两个步骤。因此,越来越多企业使用 Docker 提高分布式应用的构建与交付;但是与此同时,Docker 带来了很多不可避免的挑战,其中运维需要克服的挑战尤为突出。知乎曾经在 QCon 上与大家首次分享 Docker 架构和经验,也即将在 CNUTCon 全球容器技术大会详细讲述容器平台的实战历程。本次 InfoQ 就在 Docker 整合入原有架构过程中,如何实现的 Docker 运维对知乎两位专家进行了采访。

受访嘉宾介绍

林晓峰:知乎技术平台团队负责人。负责建设知乎各类基础设施平台、抽象各个基础设施的服务,以及为业务开发提供统一的基础设施平台接入。高性能 Linux 网络协议栈实现 Fastsocket 协议作者。

张阜兴:知乎平台架构工程师。负责知乎内部弹性计算平台,以及知乎容器平台搭建实施和各业务容器化进程。在高性能网络流量处理和分布式存储系统方面有过多年实践经验,目前致力于构建统一资源调度框架,分布式系统设计等方向。

InfoQ:可以简要介绍下知乎现在的 Docker 研发及使用情况吗?

林晓峰:知乎平台架构团队,采取研发和运维一体的 DevOps 模式;其中容器平台项目组目前的人数是 2.5 人。知乎几乎全部业务和服务(100+)都运行在容器平台(Bay)上,服务器资源申请已经对业务部门关闭。在业务峰值时段,平台整体容器数量会动态扩容到接近万个。

InfoQ:是在怎样的情况下,知乎选择了 Docker?它是否帮你们实现了所有的预期目标呢?为什么知乎认为使用容器方案是“重要决策”?

林晓峰:随着知乎业务的增长和微服务化的演进,越来越迫切的需要解决三个问题:

1. 环境隔离:在物理机时代,由于每个业务依赖的系统环境不同,服务器之间无法通用,服务器负载也各不相同;各个业务都需要独立管理服务器容量,处理服务器故障,对业务开发造成较大负担。
2. 精细资源隔离: 服务隔离要求按照服务接口对进程物理隔离,防止因为某一个接口而影响整体服务的问题,同时也需要根据不同接口的特性,设置不同的进程数、CPU 和内存配置,实现更加精细的资源管理。
3. 资源动态调整: 业务需要快速自动适应流量负载的变化。在负载高峰期快速增加资源,保证业务服务质量;在负载低峰期释放资源给其它服务,提高集群资源利用率。

上述问题抽象出来,其实需要一套高效的资源管理和调度系统

容器技术可以帮助我们实现应用环境的封装隔离以及 CPU、内存等资源限制;结合集群管理方案,能够实现资源的统一调度和动态调整:由此解决上述三个问题。从而实现业务开发人员可以专注开发业务逻辑,而资源调度和管理、负载监控、服务器故障等处理统一交于平台自动处理或者在必要时人工干预。

知乎容器平台(Bay)建设和实践到现在,从最初“邀请”业务迁移到容器平台,到现在业务要求使用容器平台,间接证明容器平台实现了预期目标。总体来说,容器平台有力的支撑了知乎的微服务化和迅速增大的业务规模,已经成为知乎基础架构的重量级组成。

InfoQ:能否介绍下知乎在搭建 Docker 平台架构时,是怎样考虑 Docker 运维模块的?

林晓峰:在搭建 Docker 平台时,我们的一个主要理念是 DevOps,通过这种模式来解决各个层面的运维效率问题。

  1. 对业务用户层面,容器平台明确业务开发能够完成的工作都由业务开发人员来操作,如日常的服务发布、配置变更。通过这种方式,既充分满足业务开发人员操作的便捷性,同时也减轻平台维护人员的日常工作量。
  2. 对平台内部层面,也是通过开发的思路来解决运维问题,即日常的处理尽量自动化完成。 以下面三类情况举例说明:
  • 容器集群扩容:在新服务器安装系统时,会运行 Salt 配置、安装并运行 Docker 相关后台进程和 Mesos-Slave 节点,这样机器就自动加入到了容器集群。
  • 服务运行的容器数量:可以通过预定义的指标实现自动的伸缩,业务流量增长和正常的流量波动无须人工调整资源。
  • 个别容器或者服务器故障:我们认为它是一种日常的、节点级别的“正常现象”,对其进行自动处理,而不是作为异常情况报警等待人工干预。相对的,容器组和集群整体的健康情况才是平台维护人员的关注对象,具体细节可以参考 QCon 北京 2016 知乎关于容器云平台分享的 Slides 和视频。

InfoQ:Docker 的使用都给知乎运维带来了哪些挑战?可否介绍下针对这些挑战,知乎采取了怎样的措施?

张阜兴:总结而言有三大挑战:

  • 容器平台的工作负担加重
  • 系统的整体复杂性增加
  • 某些异常情况出现

首先,原本由业务本身负责的系统运维工作转交给了容器平台(如业务资源变更,物理机异常处理等),加重了容器平台的工作负担。对此知乎的解决方案是:一方面通过设计集群的容错机制,自动处理物理机故障,避免人工响应;另一方面,总结业务通用的需求,例如业务容量的动态调整,开发新的平台功能来满足。

其次,Docker 集群方案引入了一些其他系统组件,如 Consul,HAProxy,Cadvisor,Graphite 等,增加了系统的整体复杂性。同时 Docker 本身还在快速发展,存在各种不稳定因素,相比于成熟的物理机运行环境需要处理的异常更多。为了解决此问题,知乎采用的措施是:针对容器平台的特点,合理使用这些系统组件,简化调用方式,例如在使用 Consul 做服务发现时,使用了 Consul 的 kv 功能来实现实例的批量注册和反注册对于 Docker 自身的问题,一方面借助社区力量修复 BUG,另一方面通过开发一些工具来处理。例如 Docker 网络方案在使用 Iptables 时会存在配置清理失败的情况,我们分析原因后,定制了 Iptables 系统包,避免了这种情况。

最后,随着容器平台集群规模的增大,某些异常情况出现的概率大大增加,某些组件的性能瓶颈逐渐暴露。对此,知乎的解决方案包含三个部分:一是在设计阶段尽量避免性能单点,如 Docker Registry 默认为单机版,我们改用 HDFS 作为其存储后端,实现了 Registry 的分布式水平扩展。二是在预估的集群规模下进行充分的压力测试,例如验证单机能够容纳的容器数以及启动速度;三是监控集群性能,在接近性能瓶颈时及早报警发现。

InfoQ:现有 Docker 几个监控开源方案,比如 Prometheus、Sysdig、cAdvisor,你们有研究或使用过吗?如果有,可否评论下这些开源方案?

张阜兴:在使用容器前,知乎已经有了一套比较完善的监控系统,采用的是 Statsd(采集)+ Graphite(存储)+ Grafana(图表展示)+ Halo(自研报警系统)。这套系统已经能较好的满足知乎业务运维需求,因此容器平台监控主要是采集指标与这些已有的系统进行整合

对于这三个监控开源方案:

  • Prometheus 的指标存储,展示,报警等功能与知乎已有系统重合,整体替换风险较大,所以未做考虑。
  • Sysdig 是一个将各种调试工具集成在一起快速诊断应用行为的方案,但是不适合做常规指标监控使用。
  • 我们采用了 cAdvisor 作为容器指标收集工具,并根据业务需求对 cAdvisor 进行了定制开发,实现了容器指标与已有监控系统的整合。

InfoQ:知乎是如何实现的 Docker 及 Docker 集群的监控呢?

张阜兴:我们使用 cAdvisor 收集容器指标,存入 Graphite,前端使用 Grafana 展示,通过自研报警系统 Halo 发送报警。

具体监控指标分为如下几类:

  1. 业务容器实例监控:容器的 CPU、内存、网络、磁盘;
  2. 业务容器组监控:容器组内容器重启次数,容器组内健康容器比例等指标;
  3. 平台层面监控:Mesos 集群指标,Docker 进程及附属组件状态等监控;
  4. 服务器层面监控:服务器的 CPU、内存、硬盘、网络等指标。

监控的意义在于及早发现问题,要避免和减少监控对服务的影响。作为一个 DevOps 式的平台,应该将合适的监控报警发送至合适的人员,比如业务层面的指标会通知业务开发人员处理;而平台和服务器层面的报警发给平台维护人员,同时还应该设置合适的报警阈值,避免无效报警带来的干扰。

InfoQ:能否说明当一个 Docker 容器服务发生故障时,平台的处理流程?

张阜兴:对于在线调用的 RPC 服务,一个容器发生故障时,服务反向代理 HAPrxoy 会通过健康检查发现该容器故障,并将流量转发到其它容器;同时 Mesos 探测到容器故障后会在服务发现上解注册该容器,并在集群中重新启动该容器:整个过程都是自动完成的。

InfoQ:自动扩容的流程又是怎样的呢?

张阜兴:用户开启了自动扩容功能后,监管进程会定时采集应用容器指标,如 CPU 利用率,根据一定算法设置合适容器数目,进而完成自动扩容或者缩容。在实际应用中,为了避免定时间隔的滞后效应和负载的震荡,一方面我们会控制定时间隔,另一方面我们采用了“快增慢减”的策略,在负载升高时快速的增加容器,在负载降低时缓慢的减少容器。

InfoQ:对于 Docker 日志处理,你们采用的是什么技术栈呢?

张阜兴:Docker 日志处理分为两部分:

  1. 业务日志由进程直接写入 Kafka,其他组件通过订阅 Kafka 实现更丰富的日志处理。例如,使用 Flume 订阅 Kafka,并将日志写入 HDFS 和 ElasticSearch。
  2. 容器的标准输入输出则通过 json 文件写到本地磁盘,从而在进程异常时候,能够通过 Mesos 提供的 url 获取故障信息。Mesos 可以定时帮助我们清除过期容器日志,不用担心磁盘空间占用的问题。

InfoQ:在整个 Docker 平台的实践中,两位有什么感触最深的经验或者建议可以分享给其他的 Docker 使用者们?

林晓峰:Docker 作为一种容器技术,为企业提高产品研发效率和改善基础设施提供了新的思路和方向,应该是作为一个组件融入到企业整体的研发体系中,而不是“革现有研发体系的命”;引入 Docker 让某个解决方案变得优雅,而不是为了 Docker 而 Docker。实践 Docker,应该在充分理解业务需求和现有基础设施后,找到适合自己的 Docker 的使用姿势,这样才能真正让 Docker 技术在企业内落地,并服务于业务,实现 Docker 的价值。

张阜兴:在平台搭建过程中,由于 Docker 本身还在快速发展,不可避免的会存在一些不稳定因素,需要通过上层的容错机制来降低影响

InfoQ:非常谢谢两位接受采访,同时很期待张阜兴在全球容器大会即将带来的分享!


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-07-26 23:059515
用户头像

发布了 58 篇内容, 共 42.6 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

java高级用法之:无所不能的java,本地方法调用实况

程序那些事

Java Netty 程序那些事 3月月更

小程序的第六年,我们还能怎么玩?

知晓云

小程序 微信 小程序生态 小程序运营

selenium操作元素遇到的异常

红毛丹

selenium

Tech Talk 活动预告 | 为什么说 Serverless 是应用开发的未来?

亚马逊云科技 (Amazon Web Services)

Serverless

社区人物志|缪翎:见证开源世界的女性力量

ApacheDoris

大数据 开源 数据分析 OLAP apache doris

如何避免在面试中看走眼

Hockor

个人成长 面试经验

React Draggable 实现拖拽 - 最详细中文教程 - 卡拉云

蒋川

React

appsmith 怎么用?评价如何

蒋川

appsmith

服务器被入侵了?反手溯源出入侵者画像【网络安全】

H

黑客 网络安全

大画 Spark :: 网络(5)-Spark中的server端和client端

dclar

大数据 hadoop spark Spark 源码 大数据开发

Flutter 容器盒子布局模型

岛上码农

flutter ios 安卓 移动端开发 3月月更

12 款最棒 Vue 开源 UI 库测评 - 特别针对国内使用场景推荐

蒋川

Vue vue admin

Web 键盘输入法应用开发指南 (6) —— 开发实战(一)

天择

JavaScript 键盘 实战 输入法 3月月更

关于中国芯片,这些话如鲠在喉

脑极体

python 编辑器提示 do not use bare except

AlwaysBeta

Python vscode 编辑器 pycharm Python PEP

PingCode 全新子产品 Insight 开放内测

PingCode

高精度轻量级目标检测产业应用,实现多类通信塔识别

百度大脑

免费硬件、专属导师、豪华大礼|AI达人创造营第二期项目征集启动啦!

百度大脑

Amazon Graviton2上数据压缩算法性能比较

亚马逊云科技 (Amazon Web Services)

数据 应用性能

Hoo虎符研究院|区块链简报20220307期

区块链前沿News

Hoo 虎符交易所 虎符研究院

springsecurity默认用户生成

急需上岸的小谢

CompusAss校园社团小程序解决方案

CC同学

业内首家!百度智能云智慧金融业务通过ISO37301合规管理体系认证

百度大脑

大咖说|制造业发展趋势:“专精特新”与数字化转型

大咖说

阿里巴巴 阿里云 数字化 中制智库

基于 XuperChain 的区块链项目从 0 到 N(二)

刘旭东

区块链 XuperChain

教你Mac下终端配置iterm2+oh-my-zsh+powerlevel10k

锋享前端

Mac iterm2

2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA

冴羽

JavaScript Vue 前端 vuepress PWA

企业如何快速地制作出电子产品宣传册?

小炮

全网渗透率达80%!“耳朵经济”将成为当下市场的流行趋势

易观分析

耳朵经济 在线音频

安全代码审计-PHP

网络安全学海

网络安全 信息安全 渗透测试 漏洞 代码审计

如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表

蒋川

Vue PDF pdf阅读器

从Docker运维看知乎容器平台的优雅整合_语言 & 开发_木环_InfoQ精选文章