京东作为中国电子商务领域的重要一员,已经被广为熟知。但是,京东也是不折不扣的技术型公司,通过技术为用户带来便捷用户体验。例如,针对电商业务中海量小文件、大文件等数据分布式存储与管理的实际需求,京东从2013年7月开始着手自主研发分布式文件系统JFS,以及分布式的缓存与高速键值存储服务JIMDB,目前已经取得了阶段性的成果。

  寻根问源:什么是JIMDB?

  据袁航现场介绍,JIMDB从缓存发展而来, 目前服务于京东的几乎所有的业务系统,包括很多重要的业务系统,例如, 前台的商品详情页, 交易平台, 广告,搜索, 即时通讯…… , 后台的订单履约, 库存管理, 派送和物流……。

  JIMDB发展历程主要有三个阶段

  阶段1、JIMDB 1.0

  主要采用官方Redis作为单节点服务; 客户端一致性Hash + Presharding技术; 管理,监控和报警。

  阶段2、JIMDB 2.0

  功能包括:故障检测和自动切换;平滑纵向扩容和平滑横向扩容;基于内存+SSD的两级存储结构和自主研发存储引擎。

  阶段3、JIMDB 3.0

  包括了:自助接入和自动部署;容器化;全自动弹性调度。

  JIMDB功能特性

  1、支持大容量缓存

  将缓存数据分摊到多个分片(每个分片上具有相同的构成,比如:都是一主一从两个节点)上,从而可以创建出大容量的缓存。

  2、数据的高可用性

  支持异步复制和同步复制,目前可以达到等同于Mysql级别的数据可用性。

  3、支持多种I/O策略

  针对读操作可分为“主优先”、“从优先”、“随意挑选”等方式;不同的I/O策略,对数据一致性的影响也不同,应用可以根据自身对数据一致性的需求,选择不同的I/O策略。

  4、哨兵服务和故障自动切换

  通过选举算法实现的哨兵服务能够自动判断实例的不存活状态,通知 Failover服务进行主从自动切换, 切换时间在秒级,以保证缓存服务的7 *24小时不间断运行。

  5、支持动态扩容

  可通过多种途径实现动态扩容:

  第一种形式,通过在单个节点上预留内存,然后需要扩容时直接使用预留内存的方法达到扩容的目的。

  第二种形式,通过数据迁移来实现扩容。(平滑纵向扩容)

  第三种形式,通过增加分片数来实现扩容。(平滑横向扩容)

  JIMDB技术的应用体现在:

  1、数据查询和维护

  提供类似于redis命令窗口的web控制台,禁止危险命令,严格控制写命令和一些运维相关命令,适当放开查询命令。

  将缓存数据分摊到多个分片(每个分片上具有相同的构成,比如:都是一主一从两个节点)上,从而可以创建出大容量的缓存。

     2、监控与报警

  Pains(痛点)

  例如:网络不佳的情况下可能发生误判; Redis单线程执行,在进行长任务时可能发生误判。

  Solution(解决方案)

  比如:在机房中不同区域部署多个Failure Detector;多个Failure Detector之间采用分布式选举算法,判断Redis实例的死活;连接健康度不佳时, 验证端口是否通畅。

  3、迁移与扩容

  Scaling Up – 纵向扩容

  首先,在内存不够, 需要增加内存时首先考虑的是纵向扩容,即增加每个分片的主、从节点的内存。

  其次,纵向扩容时如果Redis实例所在计算机物理内存不够,就需要进行数据迁移。

  再就是,数据迁移的同时,服务不能暂停

  Scaling Out – 横向扩容

  首先,单一分片的内存是不能无限扩容(纵向)的, 太大了会影响复制的效率;其次,在纵向扩容无法进行的情况下(单一分片内存已经很大,或者流量压力很大),就需要进行横向扩容,即增加集群的分片数。再有,横向扩容的同时,服务不能暂停。

纵向扩容

  横向扩容

  Pains(痛点)

  首先,纵向扩容并不增加分片数,简单修改JIMDB实例运行时参数可提高该实例可用内存上限,但在机器内存吃紧时,若要提高该分片内存上限,需要将该实例平滑迁移至一台内存资源更加充沛的机器。

  其次,流量打满或者出现热点时, 需要加分片分散压力。 机器内存不够时, 有时也需要加分片

  再次,Pre-sharding的方式, 在不影响服务的情况下增加分片有难度。

  还有,可以通过定制开发引入bucket来进行横向扩容, 但线上还有2.4, 2.6, 2.8等既有版本,也有加分片的需求。

  再有,避免主从数据不一致。

  最后,服务不能暂停,平滑不影响业务。

  Solution(解决方案)

  首先,通过Filtered replication, 实现某个结点的分裂(split)

  其次,开发一个支持Hold和Split的Proxy, 并通过一个流程控制器来协调客户端,服务结点,Proxy, 等相关各方。

  横向扩容

  对于水平扩容,则是依赖于bucket来解决的。每个JIMDB实例内部都含有若干个buckets,和上述第一类扩容相似,水平扩容也是通过对数据进行平滑迁移来实现的,但迁移的粒度不再是整个实例,而是针对集群中的这些buckets。扩容前后如下图所示:

  4、冷热数据及二级存储

  Pains

  比如,Redis完全依赖于内存,往往内存不够使用;Redis启动时需要把全部数据加载到内存,在数据量大时启动速度慢; 规划总是赶不上业务发展, 内存总量不断被突破, 不断陷入扩容, 再扩容…的梦魇。

  Solution

  引入RAM + SSD两级存储,在内存中存储热点数据, 冷数据被自动交换到磁盘,解决了内存不足的问题;启动时并不把所有数据加载入内存,而是在运行时根据需要加载,解决了启动速度慢的问题; 因为引入了二级存储, 存储容量通常比较大, 所以不需要频繁的扩容了。

  京东私有云技术体系包括:

  1、存储

  JFS:京东文件系统,提供统一的文件/对象/块存储服务

  JIMDB:京东分布式缓存与高速KV存储,兼容Redis协议

  2、中间件

  SAF:服务框架,SOA之基石

  JMQ:消息队列,The Datacenter Pipes!

  3、弹性计算

  JDOS:软件定义数据中心 = 软件定义计算单元(VM & Container)+ 软件定义网络(自研SDN)+ 软件定义存储(JFS & JIMDB)。

  CAP: 弹性计算云 = 软件定义数据中心 + 自动化容器集群调度。

  小结

  技术为驱动已经成为互联网公司的重要决策,京东在技术上正在做更多的努力,借助技术的力量,提升用户的体验已经成为当下最为重要的工作,这一点可以从我们浏览图片、下单等整个流程都可以感受到。

解读JIMDB 京东分布式缓存与高速KV存储相关推荐

  1. 【2015DTCC】京东分布式缓存与高速NoSQL服务

    大家好,欢迎做客第120期名人堂,我是主持人皮皮.每年的双11促销,都是对几大电商的软硬件平台服务能力的一次大考.京东每天的库房记录在十亿个数量级,商品图片总共有几十亿张.这些文件基本上都是KB 级别 ...

  2. Apache Ignite——集合分布式缓存、计算、存储的分布式框架

    Apache Ignite内存数据组织平台是一个高性能.集成化.混合式的企业级分布式架构解决方案,核心价值在于可以帮助我们实现分布式架构透明化,开发人员根本不知道分布式技术的存在,可以使分布式缓存.计 ...

  3. 分布式缓存中间件:Redis

    Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyt ...

  4. [读书笔记]大型分布式网站架构设计与实践.分布式缓存

    前言:本书是对分布式系统架构涉及到的相关技术的一本科普书籍.由于很难作为开发参考,只能但求了解.所以通篇浅读,对分布式系统进行大致的了解.因为写的非常好,感觉非常有意思,自己也做不出总结.所谓的读书笔 ...

  5. Redis分布式缓存集群技术

    Redis分布式缓存集群技术(也支持持久化),是关系型数据库的互补产品 特点:追求高性能\高并发,对数据一致性要求比数据库要差一些. # 1. Redis在集群架构中的角色及工作流程     1)内存 ...

  6. 【转】京东云缓存JIMDB建设之路

    [京东技术]声明:本文转载自微信公众号"IPDCHAT",转载务必声明. 缓存的大背景 缓存在软件应用特别是在互联网应用中无处不在,从数据库到应用服务.再到前端的页面每一层都会使用 ...

  7. 京东云缓存JIMDB建设之路

    [京东技术]声明:本文转载自微信公众号"IPDCHAT",转载务必声明. 缓存的大背景 缓存在软件应用特别是在互联网应用中无处不在,从数据库到应用服务.再到前端的页面每一层都会使用 ...

  8. 蚂蚁京东新浪10位架构师424页佳作深入分布式缓存从原理到实践

    前言 最近刷到了一句耐人寻味的话,"解决雪崩问题的最好办法是不发生雪崩". 不论是在硅谷互联网公司里还是在国内的互联网平台上,曾多次遇到过海量规模的交易瞬间吞噬平台的悲惨故事. 核 ...

  9. 第02课:主流分布式缓存方案的解读及比较

    分布式缓存一般被定义为一个数据集合,它将数据分布(或分区)于任意数目的集群节点上.集群中的一个具体节点负责缓存中的一部分数据,整体对外提供统一的访问接口.分布式缓存一般基于冗余备份机制实现数据高可用, ...

最新文章

  1. iphone-命令行编译之--xcodebuild
  2. qt调用import sys库_Python模块之 sys 模块
  3. CentOS7 通过wget下载文件到指定目录
  4. 2.9 穆尔彭罗斯伪逆
  5. 2. 知识图谱-命名实体识别(NER)详解
  6. 关于集异璧实验室(Geblab)
  7. mysql 主键 sql语句_Mysql主键相关的sql语句集锦
  8. 霍尔在光伏发电系统中的应用与产品选型
  9. 人工智能对摄影测量与遥感的影响与挑战——龚健雅院士
  10. 一个简单的条码/二维码扫描App
  11. 在面试时应该如何自我介绍?
  12. Juicer: 辅助基因组组装
  13. Ubuntu 18.04 安装 deepin 微信
  14. 2021年“上海区块链周”参会随感(二)2021-04-12
  15. 地球形状与重力场简述总结
  16. git删除远端分支命令
  17. 【C++习题笔记】谭浩强C++程序设计(第三版)第七章
  18. 抄作业计算机叫,有种尴尬叫“抄作业”,答案是“B”抄成了13,抄错答案哄堂大笑...
  19. webpack转化es6语法
  20. 广西计算机对口升学学校有哪些,广西职高对口升学有哪些专业

热门文章

  1. “箭”指智能家居,卫浴龙头企业箭牌家居即将登陆A股
  2. ubuntu16.04安装gtx1070显卡驱动
  3. 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)DCount The Bits(dp/数位dp)
  4. navigateTo:fail can not navigateTo a tabbar page微信小程序跳转
  5. ITC图形化一 小猫打螃蟹
  6. linux部署lanm服务器
  7. 如何成为一名专业的量化金融分析师?
  8. VS2017 报表控件找不到怎么办?
  9. Python编程基础——序列:字符串、列表和元组
  10. SpringBoot配置文件扫描