【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

  • 2015-04-07
  • 本文字数:4431 字

    阅读完需:约 15 分钟

去年的双十一过后,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-04-07 21:294807
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

秘乐魔方短视频系统开发简介

获客I3O6O643Z97

短视频挖矿

超好玩:使用 Erda 构建部署应用是什么体验?

尔达Erda

开源 DevOps 云原生 PaaS Go 语言

微信朋友圈的高性能复杂度分析

tjudream

架构 高性能 朋友圈

Vue进阶(四十三):Vuex之Mutations详解

No Silver Bullet

Vue 7月日更 mutations

Python OpenCV 图像开闭操作,图像处理取经之旅第 39 篇

梦想橡皮擦

7月日更

ACM金牌选手算法讲解《线性表》

编程熊

算法 LeetCode 线性表 数据结构与算法

微信朋友圈高性能分析

十二万伏特皮卡丘

架构训练营

产研效率提升-工具篇-消息中心

循环智能

效率 方法 工具 流程 消息

DAPP系统源码模式开发定制

获客I3O6O643Z97

DAPP智能合约交易系统开发 DAPP系统开发

模块2作业G20210698020270

哆啦A萌

架构训练营模块二作业

以吻封笺

Netty浅析

CodeWithBuff

Java Netty 源码剖析 I/O

Pandas高级教程之:window操作

程序那些事

Python 数据分析 pandas 程序那些事

在线教育,百鬼夜行?

白洞计划

模块二作业

秀聪

架构实战营

架构实战营模块二作业

A-领悟 Lifetruth‖

#架构实战营

白林学院校友会小程序前端和后台管理系统设计方案

CC同学

校友录小程序 校友会小程序 同学录小程序

架构实战营模块 2 作业

zlz

Rust从0到1-并发-状态共享

rust 并发 Concurrency 状态共享 Shared-State

带你了解两种线性规划的方法:稀疏矩阵存储和预处理

华为云开发者联盟

矩阵 存储 线性规划 稀疏矩阵 预处理

Go语言,并发控制神器之Context

微客鸟窝

Go 语言

史上最全关于苹果开发者账号及上架APPStore总结

孙叫兽

苹果 APP开发 appstore app上架

【Flutter 专题】82 初识 Flutter Stream (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

PHA挖矿系统源码开发介绍

获客I3O6O643Z97

PHA矿机挖矿 PHA质押挖矿

模块二作业 微信朋友圈高性能复杂度分析

君子意如何

「架构师训练营第 1 期」

手写插入排序算法

实力程序员

程序员 算法 排序 实力

WICC 2021即将召开 荔枝将揭秘高音质体验之关键技术

融云 RongCloud

调研字节码插桩技术,用于互联网分布式系统监控设计和实现!

小傅哥

Java asm javaagent 字节码增强 系统监控

【LeetCode】最高频元素的频数Java题解

Albert

算法 LeetCode 7月日更

Vue进阶(九十七):对象动态添加属性和值

No Silver Bullet

Vue set 7月日更

浪潮云洲走进包头 展示特色产业“触网”路径

浪潮云

工业互联网

京东私有云建设:挑战与应对之道_QCon_臧秀涛_InfoQ精选文章