资讯专栏INFORMATION COLUMN

腾讯重磅开源分布式NoSQL存储系统DCache

JowayYoung / 2775人阅读

摘要:腾讯最近开源了一个分布式存储系统,它的典型应用场景就在分布式缓存。嘉宾介绍山宝银,腾讯后台高级工程师,专注于分布式存储领域的技术研发工作,参与腾讯多个自研存储系统的开发,在分布式系统高可用与高性能服务等领域有较丰富的经验。

当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄;哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿。作为终端用户的我们可能会思考,服务系统是怎么在这样严峻的流量环境中存活下来的。

其实,服务系统的架构中有许多巧妙的设计来应对这样的问题,而在这其中,通常系统都会架设缓存系统,用以缓解海量访问请求与数据带来的冲击,实现高性能访问需求。

同时,随着微服务与云等技术的发展,分布式架构的需求变得越来越普遍,再加上今天 Web 上的数据类型已经不再单一,而且数据量也呈爆发式增长,传统的结构化存储方案已经跟不上脚步,对数据库的 SQL 操作不再满足要求,于是 NoSQL 出现。

将这几种技术方案整合起来,我们可以设计出分布式 NoSQL 缓存系统,当前这一类系统有一些比较强大的开源方案,比如 Memcached 和 Redis,它们对整个服务系统的可用性、可扩展性与性能起到至关重要的作用。

腾讯最近开源了一个分布式 NoSQL 存储系统 DCache,它的典型应用场景就在分布式缓存。

根据官方介绍,DCache 基于 TARS 微服务治理方案,它支持 k-v、k-k-row、list、set 与 zset 多种数据结构,数据基于内存存储,同时支持后接 DB 实现数据持久化。DCache 具备快速水平扩展能力,同时配套有 Web 运维平台实现高效的运维操作。

我们第一时间采访了 DCache 研发团队成员山宝银,希望对项目的研发背景与相关技术细节有进一步了解。

当前开源的分布式缓存系统中,Memcached 与 Redis 是很普遍的选择,腾讯此次为什么要自己造一个系统呢?

山宝银介绍,虽然 Memcached 与 Redis 本身都拥有极其强大的能力,但是存在运维困难、缺乏集群化方案与无法应对微服务趋势带来的挑战等问题。

举个例子,当前微服务是一大趋势,大家都在说要做微服务,它可以让计算与存储之间解耦,实现轻量级通信。微服务不需要管理生命同期,而作为系统组件的 Redis 则不然,“我们做服务架构设计时希望把逻辑层和数据层分离开来,但是如果使用 Redis 做缓存,缓存与DB之间的数据一致性问题,以及缓存不命中如何解决等问题都需要使用者在业务逻辑中做相关处理,这增加了一定的复杂度和难度,也增加了逻辑层和数据层的耦合度。”

另一方面,山宝银介绍,起初面对海量数据和高性能访问需求,腾讯内部各个团队其实都开发了各自的缓存系统,然而这些系统之间协议不统一、服务模型多样化、不具有通用性容错、扩展能力也参差不齐,所以团队就着手研发了 DCache 这一套通用 Cache 系统,希望整体去解决业务、开发、运维和监控面临的各种挑战。

所以也可以看到,目前 DCache 已经应用于腾讯内部多个业务上,包括 QQ 浏览器、应用宝、腾讯地图、腾讯电脑管家、手机管家与腾讯游戏等。

SQL、分布式与 NoSQL 的取舍

SQL 是指数据库的结构化查询语言,它是数据库的操作命令集,传统的关系型数据库都使用标准的SQL语句操作处理数据。分布式是软件系统的一种架构模式,在分布式系统中,多个硬件或软件组件分布在不同计算机上,彼此之间通过消息传递进行通信,对外表现为一个整体,提供统一化的服务。

有一种普遍的观点是,数据库 SQL 与分布式之间存在天然对立性,山宝银的理解是:“分布式系统因为数据分散在不同的节点,所以像 SQL 的联表、事务等操作需要全局的锁保护,这样处理起来比较复杂,并且影响性能。”

SQL 还有与 NoSQL 的取舍问题,NoSQL 是指一类数据库,主要用于高性能处理超海量数据,它的一大特点是数据结构简单,以key-value为主,数据之间非关联,容易做水平扩展。

从字面上看,NoSQL 似乎是与 SQL 对立的,做 NoSQL 似乎就意味着放弃 SQL,然而实际上 NoSQL 本意是 Not Only SQL,它不仅仅是 SQL,那么也就可以包含 SQL 的能力。“NoSQL 也不是一定就得放弃 SQL,其实在代理层可以增加 SQL 的解析、计算逻辑来实现 SQL 操作,但这样会影响性能,所以还是看应用场景和业务需求。”

山宝银为我们简单分析了 DCache “分布式 NoSQL”的意义。在SQL处理方面,分布式似乎存在劣势,然而分布式意味着可以联结更多的廉价计算机,充分运用算力,以低成本的方式应对高强度的并发访问请求,此外分布式架构还有不少优势,比如避免系统单点问题导致的整体故障,实现高可用。而另一方面,山宝银也说到:“DCache 因为主要的目标就是高性能,SQL 操作并不是主要想解决的问题,所以 DCache 没有实现 SQL 的功能。”

DCache 分布式策略与能力

DCache 对外提供服务的粒度是 group,一个 group 负责一部分的数据分片,至于每个 group 服务哪些数据,是根据数据的 key 做 hash 映射后所处的范围来确定的。

DCache 会把数据的 key 通过 hash 算法映射到 0~4294967295 (unsigned int) 范围内,然后把 0~4294967295 范围均匀划分到不同的 group 上。例如有两个 group,key 做 hash 后的值在 0~2147483647 范围就分发到 group1,在 2147483648~4294967295 范围就分发到 group2。

在一个 group 内,采用主备架构,只有主节点接收读写请求,所以数据一致性是可以保证的,而当主机不可用时,会触发主备自动切换,保证服务持续可用。

DCache 架构

我们疑惑 DCache 似乎强依赖于 etcd 与 TARS 等中间件,那它本身的核心特性与能力体现在哪里?

山宝银解释,DCache 并不强依赖 etcd,“etcd 只涉及了路由服务 RouterServer 的选主,如果 RouterServer 部署单点也是可用的,而且 RouterServer 的宕机不会影响到数据的读写访问,因为所有的 Proxy 与 Cache 服务都有本地的路由缓存”,关于 TARS 的采用,他说:“因为 TARS 是一个非常优秀的服务开发框架,它屏蔽了底层的网络通信细节,且自带了名字服务等很多服务化需要的功能,对于 DCache 来说,使用已有的 TARS 框架可以更好地做到服务化,我们没有必要去重复的造轮子。”

至于 DCache 本身的能力,山宝银介绍:“DCache 自身的存储引擎具有很高的性能,而且支持后接 DB,对使用者来说,不需要再关心 DB 和缓存之间的数据一致性,以及缓存不命中带来的一系列问题。”

具体来说,DCache 持久化与 Redis 不一样,后者只是把内存中的数据在本地磁盘做一个备份,保证 Redis 重启之后做数据恢复。

“Redis 持久化主要是为了数据备份。DCache 后端有了 DB 以后,业务的逻辑与后台的数据可以完全隔开,DCache自身会处理缓存与DB之间的数据一致性问题。DCache会不断的将Cache中的数据落地后端DB,如果 Cache 中存储空间不够,会将已经落地DB的冷数据淘汰掉。在数据查询的过程中,如果查询Cache不命中,会从 DB 读取并重新存到 Cache,以此来保证 Cache中数据的热点性和命中率,同时 DB 与 Cache 的穿透问题也得到解决。另外,数据持久化到后端DB的能力对于一些需要做离线数据分析的业务场景也比较方便。总之你完全不用关心数据的东西,只需要把数据写到 Cache,后端的落地由 DCache 处理。”

DCache 特性

此外,DCache 的分布式集群化、异地镜像部署、容灾容错能力在实际线上应用中都会提供非常高的价值。

用武之地

作为一个分布式存储系统,DCache 的应用场景没有限制在缓存上,山宝银介绍,对于有高性能 NoSQL 存储需求的场景,都可以使用 DCache,而且因为 DCache 具备容量淘汰与过期自动清理数据的功能,对于需要存储热点数据(如热门文章)与临时数据(如有时效性的聊天记录)的场景也可以提供很好的支持。
山宝银也提供了 DCache 的性能数据:

目前腾讯内部包括 QQ 浏览器、应用宝、腾讯地图、腾讯电脑管家、手机管家与腾讯游戏在内的近百个业务都接入了 DCache,这些业务的体量之大可以想象,山宝银补充:“除了提供的这一组简单的数据,DCache 在高效可靠地支撑着近百个业务的运转,日均调用量过万亿次,这也从侧面说明了 DCache 在生产环境的性能与稳定性。”

而除了系统本身高性能、高扩展、高可用与数据安全的设计外,Web 可视化的高效运维平台也成了 DCache 不可或缺的重要能力。基于内存的 NoSQL 存储系统在运维上会产生巨大的额外开销,它需要对相关技术进行深入理解,并且在紧要关头果断做出正确决策。

DCache 基于 TARS 开发,所以运维平台将 DCache 与 TARS 的服务管理统一做在了一个模块上,山宝银介绍该运维平台将大大提高效率,同时降低了运维门槛,关于服务的部署、上线、迁移、扩容、监控与配置这些操作都可以轻松实现。

嘉宾介绍

山宝银,腾讯后台高级工程师,专注于分布式 NoSQL 存储领域的技术研发工作,参与腾讯多个自研存储系统的开发,在分布式系统、高可用与高性能服务等领域有较丰富的经验。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38905.html

相关文章

  • 突破、进化,腾讯云数据库2018全年盘点

    摘要:性能全面领先同类,拥有极致性价比作为腾讯云在公司架构调整完成后向外界发布的首款产品,强悍的性能,极致的性价比,使得其无疑成为年度数据库市场的一颗重磅炸弹,可谓不鸣则已一鸣惊人。无疑是腾讯云数据库自主可控最典型的代表。 在企业上云逐渐加速的背景下,云数据库作为企业重要的IT基础设施,其重要性毋庸置疑。各大云计算厂商不惜重金,纷纷在产品和技术层面加大布局,争夺这一重要的云服务市场。纵观国内...

    noONE 评论0 收藏0
  • 为什么CynosDB叫真正的云原生数据库?

    摘要:本文由腾讯云数据库发表注本文摘自年月日腾讯云数据库新品发布会的演讲实录。并且随着客户数据日益增长,也做了相关的调研和分析,推出了腾讯云新一代自研数据库。是腾讯云自研的高性能高可用企业级云数据库,兼容开源数据库和。 本文由腾讯云数据库发表 注:本文摘自2018年11月22日腾讯云数据库CynosDB新品发布会的演讲实录。随着互联网信息的发展,大家也对云这个词汇也不是特别陌生了,作为全球首...

    morgan 评论0 收藏0
  • 从Java视角理解系统结构(二)CPU缓存

    摘要:从视角理解系统结构连载关注我的微博链接了解最新动态众所周知是计算机的大脑它负责执行程序的指令内存负责存数据包括程序自身数据同样大家都知道内存比慢很多其实在年前的频率和内存总线的频率在同一个级别访问内存只比访问寄存器慢一点儿由于内存的发展受到 从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态 众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据,...

    eternalshallow 评论0 收藏0
  • 可怕!数据库竟然打破安迪-比尔定律

    摘要:通过技术手段解决这些问题正是自研新一代云数据库的出发点。通过对数据持续的保护,充分保障业务的稳定和数据的持久性,可靠性达。综上所述云数据库是腾讯云继续提升丰富,开放云计算能力的重要里程碑,也推动了社区生态的进一步完善。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ CynosDB是腾讯云自研的新一代高性能高可用的企业级分布式云数据库。融合了传统数据库、云计算与新硬件的优...

    andong777 评论0 收藏0
  • CloudBest:年度复盘丨盘点2020无处不在的「云原生」

    摘要:华为云华为云在云原生这场游戏中,最具竞争力的玩家之一。年,金山云在云原生领域推出了三款重磅产品星曜裸金属服务器云服务器和云盘。在线上智博会上,浪潮云发布了经过全新迭代升级的浪潮云,进一步提升平台云原生服务能力。面对数字时代复杂系统的不确定性,传统的 IT 应用架构研发交付周期长、维护成本高、创新升级难,烟囱式架构,开放性差、组件复用度低,这些都成为了企业业务快速增长的瓶颈。而云原生以其敏捷、...

    Tecode 评论0 收藏0

发表评论

0条评论

JowayYoung

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<