不知不觉中,年中的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,集成部署监控日志等工具链,实现『无需申请服务器,直接上线』,并进行业务特定的、数据驱动的容器集群调度与弹性伸缩。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参考文章:http://blog.sina.com.cn/s/blog_88d451810102vkxr.html

京东618:Docker扛大旗,弹性伸缩成重点 (2015-06-23)的更多相关文章

  1. 在阿里云上进行Docker集群的自动弹性伸缩

    摘要: 在刚刚结束的云栖大会上,阿里云容器服务演示了容器的自动弹性伸缩,能够从容应对互联网应用的峰值流量.阿里云容器服务不仅支持容器级别的自动弹性伸缩,也支持集群节点级别的自动弹性伸缩.从而真正做到从 ...

  2. 如何实现Docker应用的自定义弹性伸缩

    简介 现在有很多客户很关心应用的自动弹性伸缩,有些客户也有自己的监控框架,并希望能跟阿里云容器服务进行集成.阿里云容器服务提供了服务弹性伸缩触发器,并能够跟监控框架集成来实现自定义的服务自动弹性伸缩. ...

  3. Docker(三):利用Kubernetes实现容器的弹性伸缩

    一.前言 前两章有的介绍docker与Kubernetes.docker是项目运行的容器,Kubernetes则是随着微服务架构的演变docker容器增多而进行其编排的重要工具.Kubernetes不 ...

  4. 基于Raft构建弹性伸缩的存储系统的一些实践

    基于Raft构建弹性伸缩的存储系统的一些实践 原创 2016-07-18 黄东旭 聊聊架构 最近几年来,越来越多的文章介绍了 Raft 或者 Paxos 这样的分布式一致性算法,但主要集中在算法细节和 ...

  5. Windows Azure功能更新:弹性伸缩(autoscale)、监控报警、移动服务及网站服务商用、新的虚拟机镜像

    Windows Azure功能又更新了.此次更新包括1项重要更新和两个功能更新: 重要更新:云服务.网站支持按策略进行弹性伸缩 功能更新:两个预览版的服务(网站和移动)进入商用,虚拟机服务支持SQL ...

  6. Kubernetes 弹性伸缩全场景解析 (四)- 让核心组件充满弹性

    前言 在本系列的前三篇中,我们介绍了弹性伸缩的整体布局以及HPA的一些原理,HPA的部分还遗留了一些内容需要进行详细解析.在准备这部分内容的期间,会穿插几篇弹性伸缩组件的最佳实践.今天我们要讲解的是 ...

  7. DCOS中监控和弹性伸缩方案经验

    监控的选型 我们的DCOS 主要是面向2种业务形态:互联网应用,NFV组件和相关的数据库.2种不同的业务虽然说都是跑在容器内部,但是其实需要监控的信息和指标都是各不相同.因此在选择监控方案的时候我们更 ...

  8. Kubernetes 弹性伸缩全场景解读(二)- HPA 的原理与演进

    前言 在上一篇文章 Kubernetes 弹性伸缩全场景解析 (一):概念延伸与组件布局中,我们介绍了在 Kubernetes 在处理弹性伸缩时的设计理念以及相关组件的布局,在今天这篇文章中,会为大家 ...

  9. Serverless 与容器决战在即?有了弹性伸缩就不一样了

    作者 | 阿里云容器技术专家 莫源  本文整理自莫源于 8 月 31 日 K8s & cloudnative meetup 深圳场的演讲内容.****关注"阿里巴巴云原生" ...

随机推荐

  1. Linux Apache配置https访问

    配置https访问 该环境是rh254课程配套的一个环境,不过配置方法步骤相同. 要求: 使用虚拟主机技术部署两个网站: 网站1: 绑定域名 www0.example.com 目录在 /srv/www ...

  2. H5(ionic2+VScode) 环境安装

    一:node.js.npm.cnpm.cordova环境安装 介绍下概念 node.js 非阻塞异步的Ajax 操作基础框架. npm 国外的node.js 包管理器 cnpm 国内淘宝的node.j ...

  3. Android 如何避免运行时奔溃

    奔溃问题 android运行的时候难免会有一些空指针(NullPointerException)或者下标越界(IndexOutOfBoundsException),用户使用的过程操作某一个按钮的时候, ...

  4. sliding window:"Marginalization","Schur complement","First estimate jacobin"

    [1]知行合一2 SLAM中的marginalization 和 Schur complement SLAM的Bundle Adjustment上,随着时间的推移,路标特征点(landmark)和相机 ...

  5. How to decode input data from a contract transaction without ABI?

    1 I've found some libraries which decode input from transaction, but all of them require ABI of cont ...

  6. Kubernetes helm配置国内镜像源

    1.删除默认的源 helm repo remove stable 2.增加新的国内镜像源 helm repo add stable https://burdenbear.github.io/kube- ...

  7. mysql启动服务

    mysql.server start 启动mysql服务mysql.server stop 停止mysql服务 mysql密码:123456Az_

  8. .Net 配置的简陋解决方案

    公司是做CS产品的, 最近分配给我一个活, 要求:     1. 公司程序启动时, 检测是否有配置文件, 没有的话则按默认值创建一个     2. 配置文件要加密, 不能让客户随便看到里面的参数   ...

  9. JAVA多线程之线程间的通信方式

    (转发) 收藏 记 周日,北京的天阳光明媚,9月,北京的秋格外肃穆透彻,望望窗外的湛蓝的天,心似透过栏杆,沐浴在这透亮清澈的蓝天里,那朵朵白云如同一朵棉絮,心意畅想....思绪外扬, 鱼和熊掌不可兼得 ...

  10. 面试简单整理之IO

    1.字节流,字符流 整个Java IO体系都是基于字节流(InputStream/OutputStream) 和 字符流(Reader/Writer)作为基类,根据不同的数据载体或功能派生出来的. 2 ...