免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

看京东如何玩转云数据库

  • 2015-11-25
  • 本文字数:2911 字

    阅读完需:约 10 分钟

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

受访嘉宾

张成远,京东资深架构师,《Mariadb 原理与实现》作者,开源项目 speedy 作者。2012 年加入京东云数据库技术团队,擅长高性能服务器开发、分布式数据库、分布式存储 / 缓存等大规模分布式系统架构,主导了京东分布式数据库系统及容器系统的架构与开发工作。在 ArchSummit 北京 2015 全球架构师峰会上,张成远将作为专题讲师为大家带来《京东云数据库支撑百亿级数据量业务的探索与实践》

云数据库服务是一项基础性的云服务,解决用户自己搭建数据库时需要考虑的各种问题,让用户在使用时可以按需申请数据库资源,保证整个数据库服务的稳定性及数据的可靠性,同时提供弹性伸缩等的支持,尽可能的降低用户在使用云数据库时的成本。

本主题主要是分享京东私有云分布式数据库集群的实现,包括如何支撑上亿级数据量的业务,如何保证数据高可靠、服务高可用以及在线集群扩容等机制。另外还会分享京东公有云数据库的架构与设计,如何实现一个稳定、可靠、可弹性伸缩的公有云数据库服务,涉及到备份、恢复、监控、迁移、高可用切换等一整套方案。

京东内部有大量业务的数据是存放在 Oracle 中的,为了完成京东内部去 O 的过程,我们为此打造了一套私有云分布式数据库集群,这套私有云分布式数据库集群目前支撑着京东大量拥有上百亿级数据量的业务,本主题中会重点介绍去 O 过程中遇到的难点同时详细介绍在内部数据库云化以及在支撑大规模业务过程中积累的经验,包括如何打造一套高性能的私有云分布式数据库集群服务,如何在支撑京东上百亿级别数据量业务正常服务的情况下做到在线无缝集群扩容,分享来自京东生产一线的经验。

云服务最重要的是要做到可弹性伸缩可按需获取资源,让用户可以尽可能的花最少的代价满足业务的需求。用户使用云数据库时面临当业务量增长时申请的资源不够,需要做到快速的扩张现有资源,当业务量降低时需要快速缩小现有资源。当数据库实例甚至整个机房发生故障时,要做到用户在云数据库中的数据是安全的可靠的,可以第一时间恢复云数据库服务,包括跨机房恢复等,保证云上的用户业务是不受影响的,这些都是云服务尤其是云数据库服务需要解决的事情,本主题也会介绍京东公有云数据库是怎么解决这些问题的以及在解决这些问题时积累的经验。

精彩内容敬请期待,以下是 InfoQ 记者对京东资深架构师张成远的专访:

InfoQ:请成远简单介绍一些京东云数据库服务。

张成远:京东云数据库主要包括公有云数据库服务和私有云数据库服务两部分。公有云数据库主要是面向外部用户,定位是中小型公司;私有云数据库主要针对公司内部业务,有时候甚至会特殊业务特殊对待,会针对业务的特点来具体问题具体分析,数据量较大的业务我们会建议业务使用我们私有云分布式数据库集群,将数据进行拆分等。这两项服务在京东都是由同一个团队来提供支持,京东云数据库的总体做法是将私有云数据库中积累的经验逐步的输出到公有云数据库上。

InfoQ:云数据库集群服务和 N 个数据库同时提供服务有何区别?

张成远:云数据库集群服务主要是指分布式数据库集群,用户在使用这个集群的时候可以像使用单台数据库一样去使用,在业务层面不用关心集群中的数据是如何分布的,对用户来说后端的数据库实例是不可见的或者不需要关心的,在使用层面来说心智负担会大大降低。

N 个数据库同时提供服务一般是指 N 个数据库服务多个不同的业务,或者是某个业务同时使用了 N 个数据库,但是业务对这些数据库是有感知的,换句话说这 N 个数据库对业务都是可见的。

InfoQ:云数据库技术相对于普通的数据库技术的挑战在哪?

张成远:云数据库服务其实也可以理解为将传统的数据库服务搬到云上,但是云数据库服务尤其是公有云数据库和传统的数据库确实是有区别的,最大的挑战在于不仅仅要提供数据库服务,还需要与用户的私有网络及云主机甚至包括云存储等各项云服务相互配合提供高可用的服务、保证数据的高可靠,是一整套云服务中的一项。传统的数据库技术更多关注的是数据库本身的,网络及主机等问题一般会比较简单。

InfoQ:京东云数据库的架构是怎么样的?这样的架构有何优势?

张成远:京东公有云数据库的架构都是基于私有云数据库的实践经验所得,在实际输出的时候考虑到安全及弹性伸缩等的考虑,公有云上采用基于虚机部署的方式,结合云主机云存储以及云数据库系统自身相配套的信息采集系统再整合公司的监控系统等各项服务,对外提供可伸缩高可用及高可靠的公有云数据库服务。

私有云中的分布式数据库集群架构主要是采用引入中间件的方式来支撑业务,中间件本身完全兼容 mysql 协议,在内部业务使用的时候可以像使用原生数据库一样简单。

InfoQ:这套服务是如何做性能监控的?如何找到服务中的慢查询等问题?

张成远:公司内部有一套完整的统一的监控系统,云数据库自身还有一套信息采集系统,采集系统会采集数据库实例上的相关信息包括慢查询以及机器负载等信息,这些采集的信息经分析处理以后如果如果发现有异常比如有慢查询或者机器负载较高,会通过统一的监控系统触发报警,做到及时发现问题及时处理问题。

在私有云分布式数据库集群中的性能监控主要是两部分构成,一部分是分布式数据库中间件会对查询做一些统计信息,这些统计信息中有超过某些阈值的情况就会触发报警,另外一部分是数据库本身的完善的监控系统。

InfoQ:在弹性伸缩部署方面,京东有哪些独创的技术?

张成远:京东公有云数据库目前是部署在虚拟机里的,基于虚拟机的快速创建我们可以做到公有云数据库实例的较快的创建。私有云数据库目前有很大一部分已经将数据库实例放到容器里,在创建部署方面将更加的便捷,当内部验证以后后续我们也会考虑输出到公有云上。

InfoQ:在双十一等活动中,百亿级数据量业务给了云数据库服务什么样的压力?技术上是如何保证整个架构能够扛得住这么大压力的?

张成远:私有云数据库在重大活动中确实有很大的压力,这些方面没有捷径,我们能做的是在活动之前做好预案,包括提前演练压测等以及各种异常情况的应对方案。

将数据库放到容器里解决了我们较大的一个问题,可以快速的创建需要的数据库实例资源,另外我们也针对内部业务的特点开发了一套私有云分布式数据库中间件系统,让压力分散到多个实例上,降低每个数据库实例的压力。

InfoQ:在技术演进过程中,有没有哪些你印象特别深刻的故事跟我们分享一下?

张成远:京东的业务发展非常的迅猛,所以在很大程度上来说京东的技术都在被业务驱动着往前跑,很多业务早期数据可能是放在 Oracle 或者 Sqlserver 中的,等到业务量比较庞大的时候再着手将数据从原来的数据库迁移到 mysql 里的时候就会比较痛苦,一般都需要业务方和数据库团队紧密配合才能真正的完整的迁移出来,但是也正是因为有这些实际的业务需求驱使着京东的技术不断的提升。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

2015-11-25 18:002751

评论

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

使用雪花 id 或 uuid 作为 MySQL 主键,被老板怼了一顿!

Java小咖秀

MySQL 数据库 雪花算法 uuid 雪花id

软件工程笔记:学习方法

风翱

软件工程 笔记 3月日更

Redis - AOF

insight

redis 3月日更

极客时间·产品训练营·第八周作业

二大爷

极客大学产品经理训练营

程序思维与架构思维

Simon

架构实战营

区块链如何助力中小企业解决融资难题

CECBC

区块链

火爆全网!2021年最新发布Java面试清单(九大技术点)

比伯

Java 程序员 架构 程序人生 架构师

设计与思考,关于资源和生命周期(三)

程序员架构进阶

设计模式 架构设计 28天写作 3月日更 池化技术

初识Golang之条件语句

Kylin

基础语法 3月日更 Go 语言

畅玩国服LOL?MacBook M1 Windows虚拟机体验

Zhendong

arm MacBook m1

MySQL-技术专题-知识点介绍

洛神灬殇

MySQL

管理者如何才能不亲力亲为?

石云升

项目管理 28天写作 职场经验 管理经验 3月日更

Wireshark数据包分析学习笔记Day24

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

Go Modules 常见使用陷阱

Rayjun

go modules Go 语言

阿里二面,面试官居然把 TCP 三次握手问的这么细致

鞋子特大号

面试 TCP 三次握手 四次挥手

架构师知识笔记2

felix徐

LeetCode链表专题01: 反转链表

小马哥

Java 链表 LeetCode 数据结构与算法 七日更

蚂蚁开源增强版 SpringBoot,都有高级特性?

Java小咖秀

开源 springboot 蚂蚁金服 SOFA

Kubernetes 弃用 Docker 后如何切换到 Containerd

倪朋飞

Docker Kubernetes 微服务

Vue3源码 | 如何挂载组件元素?

梁龙先森

源码分析 大前端 Vue3

Go语言的初体验

Phoenix

Go 语言

Python OpenCV 图像标记,取经之旅第 12 天

梦想橡皮擦

3月日更

K8s各节点常用命令

happlyfox

学习 k8s 3月日更

一束光的旅程

脑极体

Redis - RDB

insight

redis 3月日更

一篇文章让你彻彻底底理解 I/O 多路复用

Java 程序员 架构 面试 计算机

Redis 内存碎片清理

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

go-admin开源项目分析-1[安装、配置、启动]

happlyfox

学习 3月日更 Go 语言 go-admin

那些不得不知的缓存知识

Java 缓存 程序员 面试

10年后端开发程序员精心整理「C/C++ Linux服务器」 成长路线(附思维导图)

Linux服务器开发

Linux 后端 C/C++ Linux服务器开发 Linux后台开发

mysql 检索分享上篇

new life

看京东如何玩转云数据库_服务革新_龙永昕_InfoQ精选文章