写点什么

京东私有云建设:挑战与应对之道

2015 年 4 月 07 日

去年的双十一过后,InfoQ 曾经采访过京东云平台首席架构师刘海锋。刘海锋,2013 年加入京东,担任云平台首席架构师、系统技术部负责人,主持建设存储、中间件、弹性计算等私有云技术体系。

3 月 31 日,在华为 ICT 巡展北京站的活动中,刘海锋分享了《京东基础云服务技术演进》。

基础云服务支撑着京东很多业务的发展。它可以分为三个层次,包括底层的存储服务,核心的中间件以及上层的弹性计算云,通过 API 以服务的形式支撑其他业务单元。下面我们分别来看一下。

存储是互联网公司最基础的东西。这也是开发团队花精力最多,持续迭代的一个技术方向。

挑战 1:非结构化存储

京东每天有千万级的商家上传图片,用户浏览完图片后会产生交易订单,需要很多文本来描述这些订单。另外京东有自己的库房,任何一份订单经过拆分,经过库房的流转,每一分订单又会产生几十份非结构化的数据,涉及商品的入库、出库、调拨等。商品送到客户手中之后,还有签单信息、银行小票,未来这些信息的电子化、和银行对账,又是很多非结构化的数据。

非结构化的数据越来越多,如何存储这些数据?商家的图片、交易的订单、库房的记录、电子签收的信息,这些数据都是非常关键的,而且这些数据有一个特点,量比较大,但每份数据一般都比较小。

JFS:Jingdong Filesystem

京东针对非结构化数据开发了大规模分布式存储系统 JFS(Jingdong Filesystem),支持 BLOBs/files/blocks。现在这个系统已经到了 3.0 版本,可以统一管理小的对象、大的文件以及私有云中可持久化的块设备。

技术方面,因为数据不能丢失,所以从一开始就讲究强一致的复制,使用了 Paxos 复制;在存储引擎以及各种数据模型上采用了统一的存储管理;随着规模的增大,到了几 PB 数据的时候,采用了 Reed-solomon 码来降低存储成本;元数据的管理和 Hadoop 的集成方面,目前也有不错的进展和落地的应用。

目前该系统已经在支撑京东商城的如下服务:

  • 图片服务
  • 订单履约
  • 物流数据交换
  • 电子签收
  • 内部云存储服务
  • 虚拟机与容器卷存储

挑战 2:越来越多的缓存

为保证快速响应,很多数据都会放到内存里,比如商品的价格,搜索推荐的结果等。越来越多的缓存,越来越多的大内存机器,不同的业务,如何管理它们也是很大的挑战。最早,很多小规模的公司可能会采用 Memcached、Redis 等,但当到了很大规模的时候,技术也会发生质变。

Jimdb:分布式缓存与高速 NoSQL

Jimdb 是京东研发的企业级 NoSQL 服务,能够统一做分布式的缓存,也能做高速的键值存储,完全兼容 Redis 的协议。与 Redis 相比,它有如下特性:

  • 精确故障检测与自动切换
  • RAM/SSD 混合存储
  • 在线横向扩容
  • 异步、同步、局部复制
  • 全自动化接入与管理

其中“全自动化接入与管理”这一点是最近半年的主要工作,目的是降低维护成本。

Jimdb 在京东部署了 3000 多台机器,都是大内存 + 固态硬盘的,支撑了京东的商品详情页、搜索、推荐、广告点击等很核心数据的快速访问。

下一代新存储平台

刘海锋的团队最近在做的事情是,更多考虑多数据中心的复制,让数据更加可靠,并且希望做统一的存储服务,实现 One Jingdong One Stroage,用一个系统抽象出文件、对象、表甚至缓存,能够在分布式的多个数据中心实现统一的复制存储底层的数据,在主 IDC 做缓存,甚至全量内存加速;向上支持在线服务、Hadoop,支持私有云内部的容器卷的管理等。

底层存储的上面就是各种中间件。

挑战:越来越多的消息传递

京东跟很多互联网公司不一样的地方是,除了北京和江苏的核心机房,在全国各地还有很多商品的库房,每个库房会有几十台服务器,相当于一个小型的数据中心,消息队列不仅要串联核心机房里的业务,还要驱动库房里的订单生产环节,跟业务存在很强的依赖关系。从订单管道,到核心机房,再到仓储库房,普遍是用消息队列驱动业务流程的。日均消息数超过百亿。

JMQ:Jingdong Message Queues

面对业务挑战,京东的消息队列系统经过了三代演进,于去年双十一之前上线了 JMQ 并完成切换。

JMQ 有如下特点:

  • 机房断电不丢消息

因为库房的网络环境是不稳定的,所以必须保证不丢消息。

  • 组提交技术

引入了数据库中经典的 group commit 技术,提高同步刷磁盘的写的性能。

  • 透明压缩
  • 灵活复制

挑战:越来越多的在线服务

电商系统内有很多服务。这些服务内部会互相调用,对外也要开放一些接口,供商家或者合作伙伴使用。

JSF:Jingdong Service Framework

京东在这方面的解决方案是 JSF 。可以做到运行时服务质量分析,提供了完善的服务治理功能。目前在京东已经接入了几万台服务器,更好地支持了内部的 SOA 化以及对外的服务开放。

弹性计算云是目前的主要工作。

挑战:越来越多的机器

任何一个高速发展的互联网公司,机器数量都是在成倍增加的。随着业务规模的增长,机器的数量也在不断增加。现在就要面对这样的场景:有很多数据中心,而每个数据中心内的机器又会被划分给不同的业务,比如有的机器处理交易,有的处理订单履约,有的处理搜索,有的处理图片等等,面对这么多机器,应该怎样管理,让研发团队的效率更高呢?

弹性计算云

该项目的愿景是在 IDC 的资源和业务系统之间建立一个桥梁,让业务与机器完全解耦,做到真正自动化维护,缩短产品开发到上线的流程,让工程师的精力更多放在产品的设计和研发上,而不必关注如何申请资源、如何上线;提高资源利用率和服务质量,让研发团队的生活更美好。

从公司整体来看,希望能够提高资源的利用率。因为很多机器是分散的,由各个业务团队使用,必然有很多机器是空闲的,统一管理必然能提高资源的利用率。

弹性计算云的整体架构如下图所示,分拆两层服务。底层是基础服务,实现软件定义数据中心。通过 OpenStack 和 Docker 的结合,实现容器化。JFS 实现可靠的存储。上层是平台服务,希望通过集成部署,实现资源的统一分配,业务不用关注自己到底部署到哪台机器上,并由平台根据业务量实现自动伸缩。

现在这个系统已经在部分业务中落地,大规模落地会在今年年完成。具体而言,像商品详情页、图片系统,就是弹性计算云支撑的,用户的每一次浏览,都有这个系统在做贡献,能够按访问流量自动调度资源。在流量高峰的时候,这两个服务会自动扩容。

做为总结,刘海锋总结了两点:

1. 业务发展推动基础架构的演进;

2. 技术的关键是团队。

在演讲之后,InfoQ 采访了刘海锋。

InfoQ:最近两年,容器技术,特别是 Docker 在业界非常火,可以介绍一下京东在这方面的实践经验吗?

刘海锋:刚才我在演讲中提到,我们希望在 IDC 的资源和业务系统之间建立一个桥梁,让业务与机器完全解耦,这是一个很复杂的工程,不是一个容器或者 Docker 就能解决的。弹性计算云分为两个层面,底层的基础服务更多是把机器做一个统一的虚拟化、容器化,上层的平台服务更多地要考虑怎么样去配合京东的业务,跟应用能够更顺畅地融合在一起。

举个例子,从最简单的部署角度来说。以前部署是这样的,一打好包了,在部署界面上选,选了三个机器,三个机器的 IP 分别是多少,然后部署。部署完成检查一遍就成功了。而接下来整个系统会做成这样,一个程序要上线了,要部署,点部署,系统给部署完成之后告诉开发者成功了,然后再说部署在哪里。不需要关心之前的那些环节,不需要层层的领导审批和运营部门审批。而是直接部署,部署位置由平台来统一控制。一开始分配很少的机器,随着流量的增大自动扩容。需要的量小的话,再自动缩容,节省出的机器再统一调度。这样可以提高公司的资源利用率,数据中心中都是公司的机器,而不再分你的我的。

我们用 Docker,更多的是考虑它比较适合公司内部的私有云环境,而且比较轻量。我们底层的平台,简单的理解是 Docker 和 OpenStack 的嫁接。我们用 OpenStack 去管理 Docker,比如给它分配一个独立的 IP 等。但是除了两个第三方平台,我们的底层平台要做到简单、可控、稳定,所以上面还有一个很强大的完全自研的一套平台和服务,能够统一的调度和控制,实现管理、监控和部署。

Docker 在这里面发挥了很重要的作用。另外我们也稍微做了一些改造,去掉了很多用不到的特性,让它稳定简单。

网络方面,用 Open vSwitch 给每个 Docker 容器分配一个 IP,这样每个容器看上去跟虚拟机或者物理机没什么区别,迁移业务的时候大家更容易接受,过渡更为平滑。

InfoQ:刚才您提到了 OpenStack 和 Docker 的嫁接,可以具体介绍一下其结构吗?

刘海锋:基础服务层面,核心有三点:OpenStack、Docker 和自研的 JFS 存储。OpenStack 和 Docker 在这里都是非常重要的组件。

先说 OpenStack。因为 OpenStack 变化比较快,我们没有那么多精力一直跟随。我们从 OpenStack 拆出了一个分支,经过定制,做了一个内部的分支,叫做 Jingdong Data Center OS。这方面的工作有两点。一方面是让它能跟 Docker 更好地配合;另一方面,我们加入了很多故障处理功能,应对物理机故障和容器故障。物理机故障的时候快速检测出来,快速报警,快速迁移上面的容器。

再说 Docker。网络和存储上都有些改造,比如可以支持 JFS mount 过来的目录。我们会把故障当成常态,物理机的硬件故障,像磁盘、内存和硬件方面的问题,所以对 OpenStack 做的改造主要是更好地应对故障,快速响应。

InfoQ:Docker 或者 OpenStack 方面的工作,会向开源社区反馈吗?

刘海锋:其实我们也有考虑。我们计划在今年年底或者明年年初的时候有些动作,目前还是希望把当前的工作做好。

InfoQ:社区的版本更新比较快,这方面如何 merge 自己的特性和新版本的特性呢?

刘海锋:外面比较好的我们也会吸收。实际上 OpenStack 更多是面向公有云设计的,从我们的需求来看,它比较臃肿,不是很好控制。所以我们做了裁剪,砍掉了很多公有云的功能。

InfoQ:这个会不会像你们的文件系统那样,在定制的过程中走向自研了?

刘海锋:这是有可能的。像 Docker 这样的项目,设计的时候考虑的是更为通用的目标,功能非常多,这会引入过多的复杂性,也引入一些问题,所以要做减法。而且就互联网公司的开发团队而言,基础架构是在业务的推动下不断演进的,而不是满足某种通用的需求。

InfoQ:现在弹性计算云的落地情况如何呢?

刘海锋:现在弹性计算云已经在支撑很多业务,像图片服务。很多边缘系统也在用。根据研发战略,我们希望今年大规模落地。

InfoQ:可以介绍一下公司其他业务在向私有云迁移的过程中都有哪些挑战吗?

刘海锋:挑战很多,我们很多精力也放在这上面。我们做了一个基础设施,会面对两类用户,像新的用户和新的产品,直接选择它就可以了;但像老的服务,可能占用的是物理机,资源利用率很低。迁移其实不仅是技术层面的问题。所以我们会有专门的项目经理团队去推动。另外我们有一些工具,方便旧业务的迁移。

此外,我们还需要在保证业务稳定的前提下追求规模,因为规模大了才有资源管理方面的优势,所以我们希望做到万台规模。我们每天都很谨慎,很小心,但是还是希望量上来。

在 4 月 23 日~25 日的 QCon 北京 2015 大会上,刘海锋将担任微服务架构专题的出品人。在该专题中,京东云平台高级架构师、JSF(Jingdong Service Framework)项目的负责人李鑫将分享京东的服务化框架实战。

2015 年 4 月 07 日 21:294286
用户头像
臧秀涛 极客邦科技技术会议负责人

发布了 300 篇内容, 共 114.2 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
  • webpack 实现 SSR 打包(上)

    2019 年 6 月 27 日

  • 京东 618:容器技法日趋娴熟,数个项目即将开源回馈社区

    容器技术火遍技术界,很多公司包括传统行业企业都已经从观望者转变为采用者。作为最早期采用容器技术的一批先锋者,京东从2015年的9千多实例扩大到如今容器作为业务上线默认选项,支撑全部业务运行以及中间件、数据库等。此外,在经历了从OpenStack到Kubernetes的迁移转变之后,京东容器引擎平台已经了从1.0迭代到2.0版本,并且于今年陆续开源数个项目。

  • 互联网产品 + 大数据产品 = 大数据平台

    如何才能弥补这互联网和大数据系统之间的差异呢?解决方案就是将面向用户的互联网产品和后台的大数据系统整合起来,也就是今天我要讲的构建一个大数据平台。

    2018 年 12 月 27 日

  • Re:从 0 开始的微服务架构:(五)代码给你,看如何用 Docker 支撑微服务

    《Re:从 0 开始的微服务架构》专题的第五篇文章,我们来看如何用 Docker 支撑微服务。

  • 京东 618:15 万个 Docker 实例,所有业务全部容器化

    在2015年的618大促中,京东大胆启用了基于Docker的容器技术来承载大促的关键业务(图片展现、单品页、团购页),当时基于Docker容器的弹性云项目已经有近万个Docker容器在线上环境运行,并且经受住了大流量的考验。而今年618,弹性云项目更是担当重任,全部应用系统和大部分的DB服务都跑在Docker上。像618大促这样的流量高峰期,弹性云可以自动管理资源,做到弹性扩展,而在流量低谷期,又可以进行资源回收,在提升资源利用率的同时确保了运维系统的稳定性。据官方估计,本次大促活动中,京东线上将会启动近15万个Docker容器,从数量上来看,京东是全球范围内Docker的应用大户之一。

  • 第 194 讲 | 刘俊强:2019 年云计算趋势对技术人员的影响

    学会有条理的梳理工作、对数据安全敏感、持续学习等良好的工作习惯,相信面对云计算带来的挑战也将游刃有余。

    2019 年 3 月 27 日

  • Mesos container 在 360 广告系统的应用(上)

    大家好!container在360商业广告部门的应用。我是一名SRE工程师,我们负责管理与维护360商业广告平台,说起SRE工程师大家可能会想到谷歌公司,因为SRE毕竟是谷歌提出的概念。

  • 看京东如何玩转云数据库

    作为支撑百亿级数据量业务的基础服务,京东云数据库在可用性及高性能方面有极高的要求。本期我们的采访嘉宾是京东资深架构师张成远,本文根据采访整理而成。

  • 企业私有云的换位再思考

    一个企业私有云的建设是在企业整体技术下的行为,各个方面都有影响,故而不仅仅是个技术的问题,从纯云技术以外的系统架构、管理、运维、开发等角度去讨论一下这话题,也会有更多新收获。

  • 闭门会:企业的容器化改造之道

    容器技术作为目前一项炙手可热的新技术,具有很多的优势,比如轻量化、简单易用、稳定性高,同时,它也微服务、DevOps等流行的理念也不谋而合,受到越来越多的公司的关注。那Docker等技术到底使用于怎么样的场景?对于不同的行业,在容器化之前,需要考虑哪些因素?要做好哪些准备?

  • 网易蜂巢基于万节点 kubernetes 支撑大规模云应用实践

    本文分享了网易蜂巢为了支撑大规模云应用从IaaS、PaaS、CaaS以及应用层所做的优化和最佳实践,还有大规模Kubernates集群支持高并发集群的运维实践,希望能给各位带来一些新的思考。

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

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

  • 可扩展架构案例(一):电商平台架构是如何演变的?

    这一讲,我会针对最近十几年电商平台的架构变化过程,具体说明为了支持业务的快速发展,架构是如何一步步演进的。

    2020 年 2 月 28 日

  • 携程万台规模容器云平台运维管理实践

    本文转载自公众号携程技术(ID:ctriptech)。

  • 京东 11.11:电商狂欢背后的云基础设施服务

    每年的11.11促销,都是对几大电商的软硬件平台服务能力的一次大考。在系统升级改造的过程中,京东商城引入了自己的云平台,将交易、订单、仓储、搜索等核心系统需要的一些基础设施抽象了出来,以服务的形式提供。面对峰值负载,很多压力都会传导到底层的云设施。京东的云平台是如何准备来应对云存储的呢?为此InfoQ采访了京东商城技术研发体系云平台首席架构师刘海峰。

  • 打造一个运维友好的存储系统

    演讲嘉宾苏锐,Juicedata合伙人内容介绍存储系统几乎存在于每一个业务系统,存储系统的可用性,可靠性,安全性等都是运维工作必不可少,却又非常繁琐无聊的地方。这个话题就围绕存储系统运维四个常见的痛点:空间管理、监控报警、备份恢复和性能分析进行讨论,介绍常见的解决方式及优缺点,也分享我们在打造 JuiceFS 的时候在这4个方面的解决方案。内容大纲 云时代,容量规划是必须么? 存储系统的监控要点; 备份不做,日子别过。有备份,就真的安心了么? 存储系统是黑盒么?性能分析让存储系统与应用配合的更完美; JuiceFS 架构设计介绍。

    2018 年 12 月 26 日

  • 阿里百川:全架构 PaaS TAE 2.0 的 Docker 实践

    随着Docker及容器技术的火热发展,PaaS进入了新时代,最近一些传统PaaS开始基于Docker及类似技术进行升级改造,也出现了一些专门提供容器托管的平台。淘宝应用引擎TAE是国内较早规模化使用Docker的PaaS平台.

  • 支持 100+ 业务线、累计发布 17 万次|宜信容器云的 A 点与 B 点(下)

    本次分享主要介绍宜信容器云平台的背景、主要功能、落地实践及未来规划。

  • 机器学习在苏宁搜索平台中的实践

    演讲嘉宾李春生,苏宁易购 IT总部搜索研发中心技术总监内容介绍搜索引擎作为网站的主要流量入口,搜索的用户体验对整个网站起到至关重要的作用,优化搜索、提升用户体验,首先需要大量的数据,用户行为数据、商品专家数据以及海量的用户输入表达数据。其次需要机器学习算法针对既有的数据进行学习与组织数据,建立合理的模型,用数据去理解用户创建用户画像,同时还需要及时识别各种异常情况,对异常行为数据进行相应的惩处措施,在充分了解用户行为与商品模型的前提下为用户提供更优的搜索体验。本次分享主要基于多年搜索实践经验,讲述搜索如何利用机器学习在商品排序、用户意图识别、商品异常检测、异常流量检测、架构优化等方面的应用。内容大纲 搜索系统总体介绍 (1)苏宁易购搜索系统范围 (2)苏宁易购搜索系统架构演变 搜索系统面临哪些难题 (1)用户意图的理解 (2)如何智能纠正与扩展用户query (3)商品乱挂现象影响搜索排序 (4)作弊给搜索带来的影响 如何利用机器学习技术解决搜索难点 (1)基于CRF的中心词识别模型 (2)基于知识图谱的query扩展 (3)基于CNN与Naive Bayes实现图片与文本类别识别 (4)基于常用分类器实现的黑白分类检测作弊行为 问答式内容搜索系统试水 (1)搜索的召回更加丰富性 (2)基于NLP技术对query进行处理 (3)基于知识图谱进行查询推导 (4)问答式搜索适用场景与用户

    2019 年 1 月 7 日

  • JIMDB:一个大规模分布式内存存储的演进之路

    在2014年的QCon上海大会上,京东云平台首席架构师刘海锋介绍了京东分布式内存存储平台(RAM store platform)。经过两年多的演进,这套系统已经支撑起京东几乎所有的在线业务。近日,InfoQ采访了刘海峰,再探这个分布式内存存储平台的全貌。

发现更多内容

二十多岁的年纪是怎么成功四面字节跳动,最终拿到offer的?

Java架构之路

Java 程序员 架构 面试 编程语言

姐夫半夜不睡觉,竟躲在厕所看这“57道Redis面试题”?

Java架构之路

Java 程序员 架构 面试 编程语言

面试官:Android事件分发机制及设计思路,跳槽薪资翻倍

欢喜学安卓

android 程序员 面试 移动开发

扫地阿姨看完都学会了!万字长文总结Android多进程,满满干货指导

欢喜学安卓

android 程序员 面试 移动开发

冰河又一MySQL力作出版(文末送书)!!

冰河

MySQL 高可用 高并发 高性能 MySQL架构

突破2.8万美元关口,比特币为何“疯涨”? ​

CECBC区块链专委会

比特币 比特币数字货币

支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型

阿里巴巴云原生

云计算 阿里云 开源 微服务 云原生

在wildfly 21中搭建cluster集群

程序那些事

程序那些事 wildfly wildfly21 集群部署 集群架构

JAVA并发编程原理与实战

Geek_53983e

原理 java 并发 实战

Java岗四面字节跳动成功之前,我都刷了那些面试题以及做了那些准备!

Java架构之路

Java 程序员 架构 面试 编程语言

架构大作业一

Geek_michael

极客大学架构师训练营

LeetCode题解:剑指 Offer 40. 最小的k个数,快速排序,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

自研ARM芯片,亲手拆掉Wintel联盟,微软这次是认真的吗?

脑极体

重学JS | 找出数组中出现次数最多元素的4种算法

梁龙先森

前端 编程语言

测开之函数进阶· 第4篇《匿名函数》

清菡

测试开发

架构师训练营 - 大作业1

阿甘

手把手教你写!2021年Android工作或更难找,最全的BAT大厂面试题整理

欢喜学安卓

android 程序员 面试 移动开发

架构大作业二

Geek_michael

极客大学架构师训练营

架构师训练营第五周”技术选型一“作业

随秋

极客大学架构师训练营

GitHub标星力推!我掏空了各大搜索引擎,给你整理了188道Java面试题,满满干货记得收藏

Java架构之路

Java 程序员 架构 面试 编程语言

为移动应用产业开辟出海新航路,华为应用市场是如何“破冰”的?

脑极体

专家:区块链底层技术创新是关键

CECBC区块链专委会

区块链

K8S 资源可视化利器:Kubectl-Graph

郭旭东

Kubernetes Kubernetes Plugin

7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format

YourBatman

Spring Framework 类型转换 MessageFormat DateFormat

架构师训练营 - 大作业 2

阿甘

与前端训练营的日子 --Week09

SamGe

学习

甲方日常 76

句子

工作 随笔杂谈 日常

Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?

阿里巴巴云原生

阿里云 容器 开发者 云原生 架构师

SpringBoot,来实现MySQL读写分离技术

Java架构师迁哥

CAP 原理 <笔记>

raox

极客大学架构师训练营

重学JS | 数组去重的7种算法

梁龙先森

前端 编程语言

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

京东私有云建设:挑战与应对之道-InfoQ