站长之家首页 > 资源 > 腾讯云最新资讯 > 正文

性能超前,详解腾讯云新一代Redis缓存数据库

2018-03-28 16:30 · 稿源:比特网

 背景

  当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原生协议及使用方式。我们试图在解决原生方案短板的基础上,不断创新,使得新系统同时具备易懂、易用、易维护、高可靠、低成本等特点。主要体现在以下几个方面:

  1.沿用了上一代自研系统使用共享内存的数据存储方案,避免Redis采用AOF机制,恢复时间过久的问题,极大的降低了在升级、进程异常等场景产生的影响。同时,使用全新的快照与流水机制,解决了Fork机制造成的内存预留问题

  2. 在存储引擎方面,对于自研及开源方案进行重新分析整理,进行了再次创新,不但使用多规格Block灵活组合的存储方式,内部数据结构同样采用动态页管理,对比原生引擎,极大的提高了内存使用率的同时,也降低了运行过程中产生内存碎片的机率

  3. 单进程多线程的模型让运维部署更加简便,同时精简模块数量,让请求路径更短

  4.更加精细化的数据管理,实现快速的过期淘汰及精确的LRU特性

  5.实现了强一致特性,满足了金融等业务对于数据一致性的强需求

  6. 集群版模式中,支持了多数据库的场景,降低用户由主从版迁移至集群版的使用门槛

  7.存储节点可直接转发用户请求,降低后台数据变更对于客户端的依赖,原生主从版客户端可直接访问集群版,无需修改代码

  8.我们正在兼容更多的原生数据库协议,让更多的用户可以无缝切换,体验更多的新特性

  技术架构优化历程

  在架构方面我们将当前比较流行的两层(不包含客户端)结构简化成了单层,如下图所示。

  图1 架构图

  图中的Master为集群的管理节点,每组Master管理一个地域的若干集群。

  Cache则是实际的数据存储节点。架构中不再显式设置接入层,而是通过Cache转发用户请求,这样做的好处:

  · 单纯的存储或接入模块,由于对不同资源类型(CPU、网卡、内存等)需求的倾斜,无法很好的提高当前高配机型的设备利用率。也基于这个原因,理论上合并后的单层结构能更好的利用硬件资源,节约成本

  · 减少模块数量可以减少大量运维操作,便于运维同学部署及规划资源等

  · 路由更接近数据,因此在某台Cache上进行数据迁移动作时,可以更加实时的对用户请求做出应对(转发至最新的目标),减少变更对用户请求的影响

  针对一些对于接入层有强需求的场景,比如,某业务的客户端链接数极多,我们也有针对性的做了优化。Cache可退化为纯接入机使用,这样可以方便的扩展为两层结构,统一使用一套代码,无需单独维护。

  数据分布方面,采用了全部打散的方式,即在任意一台Cache上既有主数据也有(其他业务)备份数据,完全以Shard为粒度(物理内存单元)进行管理,如下图所示。

  图2 Shard分布

  每台Cache的内存被划分为若干Shard,无论是主从版还是集群版,用户的主或备数据可能落到任意Cache,分配策略支持跨机架、跨机房等。这样做的目的有:

  · 不再有单纯的热备设备,减少低负载设备比例,充分利用整个集群的网卡、CPU等资源

  · 当一个或若干节点异常时,利用整个集群的能力进行容错(切换流量)与恢复(在不同节点重建备份),避免雪球效应

  · 在分配时,将考虑现有设备主备Shard比例及负载,优化装箱算法,可是集群资源更加均衡

  由于CKV+兼容Redis协议及各种使用场景,因此也区分了主从版与集群版。对于集群版来说,经过对比,数据哈希仍然采用了Pre-sharding的方式,如下图所示。

  图3 数据哈希

  对于单个Shard来说,最大可管理内存为8T,由于目前设备限制,实际最大可支持512G,因此集群版支持的容量范围为 [1G,512G] * 16384 = [16T,8P]。当然在实际应用中,还需考虑系统内部预留资源等因素,且Shard大小及Slot对应关系的规划也要视物理资源情况而定。

  内存引擎设计,确定CKV+引擎

  内存管理是内存数据库系统中非常重要的一环,在CKV+系统的设计阶段,对于引擎也是进行了大量的讨论与调研,根据我们的经验,同时吸纳了多种主流内存管理体系的优点,确定了当前CKV+的引擎方案。主要特点归纳如下:

  · 使用共享内存,方便升级或进程异常时快速恢复

  · 基于共享内存实现了红黑树算法,在保证性能的前提下,兼容Redis中的Hash、Set、ZSet数据类型

  · 使用多规格Block作为(最小的)数据存储单位,更加灵活同时内存空隙更小

  · 使用经典的Page管理模式,优化了动态分配策略,提高了Page回收几率,降低内存碎片率

  · 用户数据所依附的内部数据结构同样基于Page进行动态分配,减少内部预留空间的浪费

  图4 内存引擎

  内存引擎的一个重要指标就是内存使用率,我们与原生Redis存储进行了对比测试。

  测试方法:使用同样的随机数据,分别写入Redis及CKV+的1G实例,对比实际存储数据量的多少。

  样本大小:key [10,30],Value [20,100]

  图5 使用率对比

  测试结果显示,在简单String类型的场景下,两者存储量近似,但在稍复杂的结构中,CKV+则可以存储更多的用户数据。

  大胆尝试,采用单进程多线程模型

  对于内存数据库来说,高性能仍然是大前提,而开发过程中使用的线程模型及框架对于这个层面影响较大。因此在设计初始,我们对于这部分也做了大胆尝试。

  首先,我们使用了单进程多线程的模式,而非大多开源系统的单进程单线程的路数,一方面可以更好的利用整机资源,另一方面也能降低运维门槛。对于多线程来说,需要解决的主要问题有如下几点:

  · 若干线程共同管理内存则势必需要引入锁,而高配机型核数多、线程多,加锁可能带来毛刺

  · 单个进程需要管理多个业务数据,特别是主从版,每块内存Shard容量较大,难免有比较庞大的kv数据,同时主从版支持部分耗时操作,需要尽量减少实例间的相互影响

  · 线程间通信或共享数据的代价要小,比如同步路由信息等

  · 同时要考虑诸如线程上下文切换、CPU缓存命中率、IO等因素

  在进行了一系列的调研工作后,最终确定线程模型为:每个物理核启动一个线程,管理若干内存Shard,如下图所示。

  图6 线程模型

  使用这种模式的主要考虑:

  · 具体内存的操作仅由某一个CPU处理,避免加锁,某个Shard出现热点时,对其他线程管理的实例影响较小

  · 在管理实例数量不多的情况下,空闲CPU可以处理网络及磁盘IO,以及请求的编解码等工作,提高整机资源利用率

  · 线程间不存在依赖或竞争关系,避免不必要的损耗

  性能测试

  性能应该是大家比较关注的部分,我们针对Redis的String与ZSet两种数据结构进行了性能测试,结果如下。

  注:

  · "单实例"表示一台Cache仅管理 1 个Shard,"N实例"则表示同时管理N个Shard

  · 所有测试均使用 2400 个客户端对整台设备进行压测

  · 测试不涉及消息转发,即客户端直接请求数据所在设备

  · 测试样本分别使用10Byte与100Byte的数据

  · 本次测试并未启用DPDK,后续会进行补充

  图7 STRING类型读写性能对比

  图8 ZSET类型读写性能对比

  结语

  腾讯云新一代内存数据库不但全面兼容了Redis的数据结构及使用方法,同时解决了原生方案在备份、容灾等方面的不足。在性能方面,我们并没有满足于现状,后续还将更细致的优化逻辑流程,并引入DPDK等特性,进一步提升系统性能。成本也是我们关注的重点,当前的系统架构与线程模型能更好的适应不断提升的硬件设备性能,提高硬件资源的利用率,同时,我们也将引进冷热数据分离等技术,在保证性能的前提下,更好的为用户节省成本。

  作者 :carloszhao, 2010 年加入腾讯,前后参与过分布式计算、存储等多个项目的设计与开发,目前在腾讯TEG-基础架构部,负责内存数据库的研发工作。

  • 大家在看
  • 相关推荐
  • 误删数据库?华为数据库多重防护硬核保证数据安全

    最近有个关于删库的帖子在网上引发热议,数据库的安全可靠性又一次成为很多企业管理者的担忧,数据库安全和备份机制再次成为行业关注的重点。那么,删库的悲剧是否可以避免?删了数据库可以恢复如初吗?安全没到位,再多功能体验也白搭数据安全是守护企业生命的一道有力防线,对企业未来发展至关重要。但绝大多数中小企业的自建数据库和一些云厂商的云数据库服务往往忽略了数据安全的重要性,自身安全防护机制不够严谨,容易面临各种

  • 支付宝自研数据库OceanBase正式通过阿里向全球开放

    3月25日,支付宝表示自研的金融级分布式数据库OceanBase正式通过阿里云向全球开放,企业可在云上获得“支付宝同款”的世界顶级数据库处理能力。OceanBase数据库可实现数千亿条记录、数百TB数据上的跨行跨表事务,同时OceanBase可兼容Oracle和Mysql数据库。

  • 型号已现身数据库!新款iPad发布在即 升级幅度大

    现在全球爆发的疫情,让苹果不得不重新考虑何时发布新机,毕竟在这个关键时刻,用户的关注度都在疫情上。

  • CD数据库Freedb.org将于3月31日关闭

    社区生成的音乐CD数据库Freedb 将于 2020 年 3 月 31 日关闭。该服务是CDDB的免费替代产品。该服务是作为CDDB的免费替代品而建立的。许多CD刻录应用程序从Freedb中提取元数据以节省用户手工输入的时间,但是这项服务有一些主要的限制,现在已经被MusicBrainz所取代。

  • 前美国国土安全部指控窃取政府机密软件、数据库

    美国司法部指控美国国土安全部(DHS)的一名前代理监察长盗窃专有软件和政府机密数据库。

  • 3月数据库排行:前10整体下行,出新技术了?

    排名方面没有任何变动(仅针对前十),相信很长一段时间内也都不会变动,毕竟巨头的位置不是一时半刻就能动摇的。不过这个月的排行榜还是有值得关注的地方,可以看到,排名前十的数据库有七成的分数都出现了下降,其中前两名 Oracle 和 MySQL 的分数下降最多,分别降低了 4.11 和 7.92 分。

  • ECC 数据库文件显示苹果新 iPad 即将面世:或为三摄 iPad Pro

    在 ECC 数据库中,该设备被描述为「Apple 平板电脑」,型号为 A2229。AppleInsider 认为,该设备可能为此前传闻的三摄 iPad Pro。不过考虑到此前苹果新设备的信息有提前数周甚至数月出现在 ECC 数据库中的情况,目前无法判断近期是否会有新款 iPad 发布。

  • 数据:新基建时代的“AI数据雄兵”

    几年前,AlphaGo瞬间点燃了AI的激情与梦想,巨大的光环把AI推向了市场的风口。之后的几年国内的AI创业虽然几经起落,但也逐渐走向成熟。AI产业将逐渐褪去浪漫主义的“光环”,走向实用主义的落地。在 3 月 4 日,国家决策层提出要发力于科技端的基础设施建设,人工智能成为“新基建”七大版块中的重要一项。“新基建”的呼啸而至,显然为中国AI产业的稳步推进起到了关键的作用。简单回顾一下AI的发展历程,AI的三大要素是指算法、?

  • 华为终端服务 着力用户隐私数据

    随着科技日新月异的发展,越来越多的人不仅关心自己所使用服务的便捷性,而且更加注重自己的隐私问题。可是处于这个大数据的时代,接触过大数据的人都会很清楚的知道,网络上是没有什么隐私可言的。所以越来越多的人需要自己的手机全力保护自己的隐私问题。华为终端云服务致力于保护用户隐私数据,给用户提供一个更和谐的大数据环境。华为终端云服务是为华为终端用户(手机用户和PC端用户)提供的围绕着数据、出行、应用、娱乐等多种

  • 开创行业先河,腾讯攻坚技术难题,让硬盘始终在线

    硬盘作为服务器数据的载体、一旦出现故障,就会出现信息的缺失和遗漏。为了解决企业级场景下,硬盘对于精准海量记忆的苛刻要求,腾讯云一方面与全球领先的数据存储解决方案提供商希捷合作,率先在国内引入定制化机制,保证硬盘质量的源头管理;另一方面,利用大数据分析技术对硬盘健康状况作多维度 “体检”,实现了对硬盘品质和可靠性的有效管控,为腾讯云数百万用户的底层数据安全能力提供了强有力保障。据了解,在当前大数据应用

  • 数据:是什么让AI产品更有灵魂?

    前两年行业还说AI是风口、是噱头,可到了 2020 年,我们会发现越来越多的人工智能开始落地,各行各业都迈入了AI时代。如今,各类语言助手走入现实,智能驾驶逐步应用,人脸识别技术遍布我们身边的各个角落……小到我们每天使用的手机,大到城市的交通管理系统,几乎每一个能被科技影响的场景,都离不开AI能力的加持。可是在AI技术大范围、高频次的实际场景使用现状下,却还总是发生“不灵光”的情况。我们不禁要问,人工智能为什么

  • 企业微信分享开学必备神操作 腾讯:防沉迷警告

    今天下午,企业微信在微博发起了#云开学必备神操作#的话题,称“开学可能会迟到,但永远不会缺席”并分享了一组“云开学”头像。

  • 助力人人视频开发效率,腾讯Serverless全云端开发成关键

    在诸多互联网行业的细分领域里,视频行业或许是竞争最为激烈的一个。视频企业想要在激烈的竞争中脱颖而出,构建快速产品迭代能力,为用户带来新鲜、友好的体验是重中之重。拥有十年历史的视频老兵、基于海外文化的短视频平台——人人视频就通过采用腾讯云Serverless服务,将开发接入工作量降低了80%,大幅提升了产品更新迭代能力和业务上线的效率。降低80%接入工作量,加速新业务上线效率人人视频主要为用户提供影视花絮、教育、音

  • 数据时代 金山容器引擎实践为用户创造更多价值

    随着云原生技术的加速普及,Kubernetes逐渐成为IT技术架构的基石,并推动着各行业技术架构的转型升级。在《InfoQ 编辑部开年聊聊2020 年值得关注的十大技术趋势》报道中,写到其中一个趋势是容器化加速席卷大数据基础架构。今天,我们就分享下金山云容器引擎在大数据平台的应用实践。大数据平台拥抱Kubernetes 金山云容器引擎应需而生众所周知,Hadoop的出现加速大数据技术的应用推广,随着应用场景的不断丰富,近几年也涌现出多款

  • 腾讯采购季优惠活动:4核8G5M服务器仅1684元/3年

    未来世界将从“云”端开始……在 2019 年的国内云基础设施市场当中,累计高达数百亿美金的大手笔投资,直接将市场整体规模增幅至63.7%。其中,腾讯云作为国内云服务知名品牌,以18%的市场份额荣居榜眼之位,包括当下正如火如荼举办中的腾讯云采购季活动,其优惠政策更是为众多消费者所青睐!共同战“疫”,助力行业复工据了解,此次腾讯云采购季主题为共同战“疫”,以助力各行各业复工为己任!其中,采购季活动的优惠政策、内容共分

  • 腾讯与新希望成立合资公司,布局农业互联网等领域

    3月25日据品玩消息,腾讯云宣布与新希望成立合资公司,战略布局农业互联网、智慧城乡等领域。合资公司定名为新腾数致网络科技有限公司,注册资金增至2. 5 亿元人民币,腾讯为第二大股东。合资公司将作为腾讯云和新希望落地农业互联网、智慧城乡和数字政府等重大项目的实体单位。

  • 企业微信分享开学必备神操作 腾讯:小心对你启用防沉迷

    ​沉迷学习,日渐消瘦。说的是最近的你吗?开学可能会吃到,但永远不会缺席,开学换个新头像,云开学也要有新气象。今日,@企业微信 以#云开学必备神操作#为话题,分享了一组“云开学”头像,引发热议。

  • 钟南山团队与腾讯共同成立大数据及人工智能联合实验室

    腾讯官方宣布, 2 月 26 日,钟南山院士团队与腾讯公司正式达成合作,共同成立“大数据及人工智能联合实验室”,携手持续抗击新冠肺炎。而双方更长远的目标,是利用大数据和人工智能攻坚流行病、呼吸疾病和胸部疾病的筛查和防控预警。

  • 谷歌宣布新设四个区域数据中心 以扩大其全球业务

    据国外媒体报道,作为其全球扩张的一部分,谷歌云在当地时间周三宣布,计划今年开放四个新的区域数据中心,这四个区域数据中心将位于德里(印度)、多哈(卡塔尔)、墨尔本(澳大利亚)和多伦多(加拿大)。

  • 微盟携手腾讯发布数字战疫方案 助力商家打造线上生意经

    虽然各地企业在当地政府指导下有序复工,但因人流稀少更多企业还处在“歇业”状态。记者今天( 3 月 12 日)从微盟了解到,作为腾讯SaaS生态“千帆计划”合作伙伴,微盟携手腾讯云正式发布数字战疫方案。疫情至今,双方通过数字化工具助力企业在线经营,以缓冲企业线下业绩冷清的现状。作为腾讯SaaS联盟的核心成员之一,微盟积极响应腾讯“千帆计划”助力企业战疫行动,主要针对电商、零售、餐饮等行业提供线上经营解决方案,降低商?

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议