Linux 之父出席、干货分享、圆桌讨论,精彩尽在 OpenCloudOS 社区开放日,报名戳 了解详情
写点什么

京东 618:Docker 扛大旗,弹性伸缩成重点

  • 2015 年 6 月 17 日
  • 本文字数:2912 字

    阅读完需:约 10 分钟

不知不觉中,年中的 618 和年终的 11.11 已经成为中国电商的两大促销日,当然,这两天也是一年中系统访问压力最大的两天。对于京东而言,618 更是这一年中最大的一次考试,考点是系统的扩展性、稳定性、容灾能力、运维能力、紧急故障处理能力。弹性计算云是京东 2015 年研发部战略项目,它基于 Docker 简化了应用的部署和扩容,提高了系统的伸缩能力。目前京东的图片系统、单品页、频道页、风控系统、缓存、登录、团购、O2O、无线、拍拍等业务都已经运行在弹性计算云系统中。

过去的一段时间里,弹性计算云项目在京东内部获得了广泛应用,并且日趋稳定成熟。一方面,这个项目可以更有效地管理机器资源,提高资源利用率;另外还能大幅提高生产效率,让原来的申请机器上线扩容逐渐过渡到全自动维护。京东弹性计算云项目将深刻影响京东未来几年的基础架构。

受访嘉宾介绍

刘海锋,京东云平台首席架构师、系统技术部负责人。系统技术部专注于基础服务的自主研发与持续建设,包括分布式存储、以内存为中心的 NoSQL 服务、图片源站、内容分发网络、消息队列、内部 SOA 化、弹性计算云等核心系统,均大规模部署以支撑京东集团的众多业务。

InfoQ:能否介绍下京东弹性计算云项目的情况,你们什么时候开始使用 Docker 的?目前有多大的规模?

刘海锋:弹性计算云项目在去年第四季度开始研发,今年春节后正式启动推广应用。经过半年多的发展,逐渐做到了一定规模。截至 6 月 17 日,我们线上运行了 9853 个 Docker 实例(注:无任何夸大)以及几百个 KVM 虚拟机。京东主要的一些核心应用比如商品详情页、图片展现、秒杀、配送员订单详情等等都部署在弹性云中。弹性计算云项目也作为今年 618 的扩容与灾备资源池,这估计是国内甚至世界上最大规模的 Docker 应用之一。随着业务的发展以及 IDC 的增加,预计今年年底规模会翻两番,京东大部分应用程序都会通过容器技术来发布和管理。

系统架构可以这样简洁定义:弹性计算云 = 软件定义数据中心 + 容器集群调度。整个项目分成两层架构,底层为基础平台,系统名 JDOS,通过『OpenStack married with Docker』来实现基础设施资源的软件管理,Docker 取代 VM 成为一等公民,但这个系统目标是统一生产物理机、虚拟机与轻量容器;上层为应用平台,系统名 CAP,集成部署监控日志等工具链,实现『无需申请服务器,直接上线』,并进行业务特定的、数据驱动的容器集群调度与弹性伸缩。

InfoQ:能否谈谈你们的 Docker 使用场景?在 618 这样的大促中,Docker 这样的容器有什么优势?618 中有哪些业务跑到 Docker 中?

刘海锋:目前主要有两类场景:无状态的应用程序,和缓存实例。这两类场景规模最大也最有收益。不同的场景具体需求不同,因此技术方案也不相同。内部我们称呼为“胖容器”与“瘦容器”技术。从资源抽象角度,前者带独立 IP 以及基础工具链如同一台主机,后者可以理解为物理机上面直接启动 cgroup 做资源控制加上镜像机制。

618 这样的大促备战,弹性计算云具备很多优势:非常便捷的上线部署、半自动或全自动的扩容。Docker 这样的操作系统级虚拟化技术,启动速度快,资源消耗低,非常适合私有云建设。

今年 618,是京东弹性计算云第一次大促亮相,支持了有很多业务的流量。比如图片展现 80% 流量、单品页 50% 流量、秒杀风控 85% 流量、虚拟风控 50% 流量,还有三级列表页、频道页、团购页、手机订单详情、配送员主页等等,还有全球购、O2O 等新业务。特别是,今年 618 作战指挥室大屏监控系统都是部署在弹性云上的。

InfoQ:你们是如何结合 Docker 和 OpenStack 的?网络问题是如何解决的?

刘海锋:我们深度定制 OpenStack,持续维护自己的分支,称之为 JDOS(the Jingdong Datacenter Operating System)。JDOS 目标很明确:统一管理和分配 Docker、VM、Bare Metal,保证稳定高性能。网络方面不玩复杂的,线上生产环境划分 VLANs + Open vSwitch。SDN 目前没有显著需求所以暂不投入应用。我们以『研以致用』为原则来指导技术选择和开发投入。

InfoQ:能否谈谈你们目前基于 Docker 的 workflow?

刘海锋:弹性计算平台集成了京东研发的统一工作平台(编译测试打包上线审批等)、自动部署、统一监控、统一日志、负载均衡、数据库授权,实现了应用一键部署,并且全流程处理应用接入,扩容、缩容、下线等操作。支持半自动与全自动。

InfoQ:这么多的容器,你们是如何调度的?

刘海锋:容器的调度由自主研发的 CAP(Cloud Application Platform)来控制,并会根据应用配置的策略来进行调度;在创建容器的时候,会根据规格、镜像、机房和交换机等策略来进行创建;创建完容器后,又会根据数据库策略、负载策略、监控策略等来进行注册;在弹性调度中,除了根据容器的资源情况,如 CPU 和连接数,还会接合应用的 TPS 性能等等来综合考虑,进行弹性伸缩。

目前已经针对两大类在线应用实现自动弹性调度,一是 Web 类应用,二是接入内部 SOA 框架的服务程序。大规模容器的自动化智能调度,我们仍在进一步做研究与开发。

InfoQ:目前主要有哪些业务使用了 Docker?业务的选择方面有什么建议?

刘海锋:目前有 1000 个应用已经接入弹性云,涵盖京东各个业务线,包括很多核心应用。目前我们主要支持计算类业务,存储类应用主要应用到了缓存。数据库云服务也将通过 Docker 进行部署和管理。

特别强调的是,业务场景不同,技术方案就有差别。另外,有些对隔离和安全比较敏感的业务就分配 VM。技术无所谓优劣和新旧,技术以解决问题和创造业务价值为目的。

InfoQ:你们的缓存组件也跑在 Docker 中,这样做有什么好处?IO 什么的没有问题吗?有什么好的经验可以分享?

刘海锋:我们团队负责一个系统叫 JIMDB,京东统一的缓存与高速 NoSQL 服务,兼容 Redis 协议,后台保证高可用与横向扩展。系统规模增长到现在的三千多台大内存机器,日常的部署操作、版本管理成为最大痛点。通过引入 Docker,一键完成容器环境的缓存集群的全自动化搭建,大幅提升了系统运维效率。

技术上,缓存容器化的平台并不基于 OpenStack,而是基于 JIMDB 自身逻辑来开发。具体说来,系统会根据需求所描述的容量、副本数、机房、机架、权限等约束创建缓存容器集群,并同时在配置中心注册集群相关元数据描述信息,通过邮件形式向运维人员发出构建流水详单,并通知用户集群环境构建完成。调度方面,不仅会考虑容器内进程,容器所在机器以及容器本身当前的实时状况,还会对它们的历史状况进行考察。一旦缓存实例触发内存过大流量过高等扩容条件,系统会立即执行扩容任务创建新的容器分摊容量和流量,为保证服务质量,缓存实例只有在过去一段时间指标要求持续保持低位的情况下才会缩容。在弹性伸缩的过程中,会采用 Linux TC 相关技术保证缓存数据迁移速度。

InfoQ:使用过程中有哪些坑?你们有做哪些重点改进?

刘海锋:坑太多了,包括软件、硬件、操作系统内核、业务使用方式等等。底层关键改进印象中有两个方面:第一,Docker 本地存储结构,抛弃 Device Mapper、AUTFS 等选项,自行定制;第二,优化 Open vSwitch 性能。比如,优化 Docker 镜像结构,加入多层合并、压缩、分层 tag 等技术,并采用镜像预分发技术,可以做到秒级创建容器实例;优化 Open vSwitch 转发层,显著提升网络小包延迟。

2015 年 6 月 17 日 17:3414107
用户头像
郭蕾 关注我视频号:极客时间小盖

发布了 219 篇内容, 共 123.3 次阅读, 收获喜欢 175 次。

关注

评论

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

《趣学音视频》这段“朋友圈模版视频”的扛鼎之作是如何诞生的

ucsheep

Python 音视频 ffmpeg Pillow

IT 专业高校大学生就业方向状况调查问卷

架构精进之路

调查报告 4月日更 InfoQ 写作平台 1 周年

Spring Cloud Stream 体系及原理介绍

阿里巴巴云原生

Java 负载均衡 微服务 云原生 中间件

云信技术系列课 | RTC 系统音频弱网对抗技术发展与实践

网易云信

WebRTC 音频

架构实战营模块2作业指导

华仔

架构实战营 #架构实战营

如何把 Caffeine Cache 用得如丝般顺滑?

vivo互联网技术

Java 缓存 服务器 Caffeine

你的企业会讲故事吗?

石云升

团队建设 28天写作 职场经验 管理经验 4月日更

云原生新边界——阿里云边缘计算云原生落地实践

阿里巴巴云原生

云计算 容器 运维 云原生 边缘计算

死亡直播

箭上有毒

生活随想 4月日更

What CANN Can?一辆小车背后的智能故事

脑极体

资讯|WebRTC M90 更新

网易云信

WebRTC

最新、最全、最详细的 Git 学习笔记总结(2021最新版)

民工哥

后端 Git Submodule linux运维 代码管理

百度智能云成中国跳水队独家AI合作伙伴圆梦东京!

百度大脑

百度智能云

赋能制造产业智能化转型 百度大脑开放日福州解密

百度大脑

百度大脑 开放日 智能化

嵌入式硬件开发最新技术

cdhqyj

嵌入式 单片机

字节架构师分享:如何让代码在级别上提升系统性能

Java架构师迁哥

如何验证volatile的可见性

华宇法律科技

ELK 教程 – 高效发现、分析和可视化你的数据

信码由缰

elastic DevOps ELK Elastic Stack ELK Stack

聪明人的训练(二十八)

Changing Lin

4月日更

HDFS文件限额配置

五分钟学大数据

hadoop

如何通过openLooKeng更高效访问HBase?

openLooKeng

Java 大数据 Bigdata MySQL 高可用

智能小车系列-串口设置

波叽波叽啵😮一口盐汽水喷死你

串口 树莓派串口 ttyAMA0

微信小程序登录流程详解

frank-say

Leveldb解读之三:Write

Jowin

leveldb

Alibaba内部培训Spring源码全集分享:脑图+视频+文档

Java架构师迁哥

HDFS NameNode中的FSImage与edits详解

五分钟学大数据

hdfs

HDFS的Java API

五分钟学大数据

hdfs

新一代云网采控之采集架构篇

鲸品堂

架构 部署 场景 云网络 应用

大数据基本导论

五分钟学大数据

大数据

边开飞机边换引擎?我们造了个新功能保障业务流量无损迁移

阿里巴巴云原生

容器 运维 k8s 中间件 弹性计算

排查dubbo接口重复注销问题,我发现了一个巧妙的设计

捉虫大师

dubbo

GPU容器虚拟化:用户态和内核态的技术和实践详解

GPU容器虚拟化:用户态和内核态的技术和实践详解

京东618:Docker扛大旗,弹性伸缩成重点_语言 & 开发_郭蕾_InfoQ精选文章