当您在电子商务平台上销售商品或刷社交网络上的热门话题时,您显然会感受到当前网络数据流量的恐怖。成千上万的产品刚被抢劫,并在不到一秒的时间内售罄;哪个大明星出轨的消息一出现,即时读数和转发的数量可能会达到数亿。作为最终用户,我们可能会考虑服务系统如何在如此严峻的交通环境中生存。
事实上,服务系统架构中有许多聪明的设计来处理这些问题。在这种情况下,系统通常会建立一个缓存系统,以减轻大量访问请求和数据的影响,并实现高性能的访问要求。
与此同时,随着微服务和云等技术的发展,对分布式架构的需求也越来越普遍。此外,今天的Web上的数据类型不再是单一的,并且数据量正在爆炸式传统。结构化存储解决方案没有跟上步伐,数据库上的SQL操作不再符合要求,因此出现NoSQL。
通过集成这些技术解决方案,我们可以设计一个分布式NoSQL缓存系统。目前,有一些强大的开源解决方案,如Memcached和Redis,它们为整个服务系统提供了可用性,可扩展性和性能。发挥重要作用。
我听说腾讯最近开辟了一个分布式NoSQL存储系统DCache,其典型的应用场景是分布式缓存。根据官方介绍,DCache基于TARS微服务治理解决方案。它支持k-v,k-k-row,list,set和zset数据结构。数据基于内存存储,并支持基于数据库的数据持久性。 DCache具有快速水平扩展的能力,并配备了Web操作和维护平台,以实现高效的操作和维护。
我们第一次采访了DCache研发团队的成员Shan Baoyin。我希望能更好地了解项目的研发背景和相关技术细节。在当前的开源分布式缓存系统中,Memcached和Redis是非常常见的选择。为什么腾讯自己建立一个系统?
单宝银介绍说,虽然Memcached和Redis本身具有非常强大的功能,但存在诸如操作和维护困难,缺乏集群解决方案以及无法应对微服务趋势带来的挑战等问题。
例如,当前的微服务是一个大趋势。每个人都在谈论微服务,它可以解耦计算和存储,实现轻量级通信。微服务不需要管理生命同步,但Redis作为系统组件则不需要。 “在设计服务架构时,我们希望将逻辑层与数据层分开,但如果使用Redis进行缓存,则缓存与数据库之间的数据是相同的。性问题,以及如何解决缓存未命中问题,要求用户在业务逻辑中进行相关处理,这增加了复杂性和难度,并增加了逻辑层和数据层之间的耦合。“
另一方面,Shan Baoyin介绍说,面对海量数据和高性能访问要求,腾讯内部的各个团队实际上开发了自己的缓存系统。然而,这些系统之间的协议并不统一,服务模型多样化,并且它们不是通用的。容错性和可扩展性也不均衡,因此团队开始开发通用缓存系统DCache,希望能够解决整个业务,开发,运营和维护以及监控的挑战。
因此,可以看出DCache已经应用于腾讯的多个内部服务,包括QQ浏览器,应用程序宝,腾讯地图,腾讯电脑管家,移动管家和腾讯游戏。
SQL,分布式和NoSQL权衡
SQL指的是数据库的结构化查询语言,它是数据库的操作命令集。传统的关系数据库使用标准的SQL语句操作来处理数据。分布式是软件系统的架构模式。在分布式系统中,多个硬件或软件组件分布在不同的计算机上,通过消息传递相互通信,并作为一个整体从外部显示,提供统一的服务。
人们普遍认为,数据库SQL和分布式数据库之间存在着天然的对立面。 Shanbao Yin理解:“分布式系统因为数据分散在不同的节点上,所以SQL连接表,事务等操作需要是全局的。锁保护处理起来更复杂,影响性能。”
SQL也与NoSQL存在权衡问题。 NoSQL是指一种数据库,主要用于超大数据的高性能处理。其主要特点是数据结构简单,键值为主,数据不相关。做横向扩展。从字面上看,NoSQL似乎反对SQL。做NoSQL似乎意味着放弃SQL。但是,NoSQL意味着不仅仅是SQL。它不仅仅是SQL,因此它可以包含SQL。
“NoSQL不必放弃SQL。事实上,代理层可以增加SQL解析和计算逻辑来实现SQL操作,但这会影响性能,因此它取决于应用场景和业务需求。”
单宝银简单分析了DCache“分布式NoSQL”的含义。在SQL处理方面,分布似乎有一个缺点。然而,分布意味着可以连接更便宜的计算机,并且可以充分利用计算能力以低成本方式处理高强度并发访问请求。此外,还有许多分布式架构。优点,例如避免由单点系统引起的整体故障,实现高可用性。
另一方面,单宝银也说:“DCache因为主要目标是高性能,SQL操作不是要解决的主要问题,所以DCache没有实现SQL功能。”
DCache分布式策略和功能
DCache外部服务的粒度是组,一组负责数据碎片的一部分。对于每个组服务的数据,根据哈希映射后的数据密钥的范围来确定。
DCache通过哈希算法将数据键映射到0~4294967295(unsigned int)的范围,然后将0~4294967295的范围均分为不同的组。例如,如果有两个组,则散列后的散列值将分配给0到2147483647范围内的group1,并分配到214483648到4294967295范围内的group2。
在组中,采用主动/备用架构。只有主节点接收读写请求,因此可以保证数据的一致性。当主机不可用时,将触发活动和备用自动切换,以确保服务持续可用。
https://mp.weixin.qq.com/s/sjrDV7BesGmnCgkgIKB7zA
DCache架构
我们怀疑DCache似乎在很大程度上依赖于etcd和TARS等中间件。它的核心特性和功能是什么?
Shanbao Yin解释说DCache不会严重依赖etcd。 “etcd只涉及路由器服务器RouterServer的路由器。如果RouterServer部署的单点也可用,RouterServer的停机时间不会影响数据的读写访问,因为所有的Proxy和Cache服务都有本地路由缓存“。关于TARS的采用,他说:“因为TARS是一个非常好的服务开发框架,它屏蔽了底层的网络通信细节,并附带名称服务等等。服务所需的功能,对于DCache,可以更好地服务通过使用现有的TARS框架,我们不必重新创建轮子。“至于DCache本身的功能,Shanbao Yin介绍说:“DCache自己的存储引擎具有很高的性能,并且支持与DB的连接。对于用户来说,没有必要关心数据库和缓存之间的数据一致性,以及由缓存未命中引起的一系列问题。“
具体来说,DCache持久性与Redis不同。后者只备份本地磁盘上的内存中的数据,确保Redis重启后数据恢复。
“Redis持久性主要用于数据备份。在DCache后端有DB后,业务逻辑和后台数据可以完全分离,DCache本身将处理缓存和数据库之间的数据一致性。
DCache将持续将缓存中的数据放入后端数据库。如果缓存中没有足够的存储空间,则将消除已经转储的DB的冷数据。在数据查询过程中,如果查询缓存未命中,则会从DB中读取并保存到Cache中,以保证缓存中数据的热点和命中率,以及DB和Cache渗透的问题也解决了。
此外,将数据持久保存到后端数据库的能力对于需要离线数据分析的业务场景也很方便。简而言之,您根本不必关心数据,只需将数据写入Cache,后端由DCache处理。 ”
https://mp.weixin.qq.com/s/sjrDV7BesGmnCgkgIKB7zA
DCache功能
此外,DCache的分布式群集,异地镜像和容灾容错功能在实际在线应用程序中具有很高的价值。
用它
作为分布式存储系统,DCache的应用场景不仅限于缓存。据Shan Baoyin介绍,DCache可用于具有高性能NoSQL存储要求的场景,而DCache具有在容量消除和到期后自动消除数据的功能。它还为需要存储热点数据(如热门文章)和临时数据(如时间敏感聊天)的场景提供了良好的支持。
Shanbao Silver还提供DCache的性能数据:
https://mp.weixin.qq.com/s/sjrDV7BesGmnCgkgIKB7zA
目前,包括腾讯在内的近百家企业,包括QQ浏览器,应用宝,腾讯地图,腾讯电脑管家,手机管家和腾讯游戏都有机会获得DCache。这些服务的数量是可以想象的。 “除了提供的简单数据外,DCache还高效可靠地支持近百家企业的运营,每日通话量超过teraflops。这也解释了DCache在生产环境中的性能和稳定性。”除了系统本身的高性能,高可扩展性,高可用性和数据安全设计外,Web可视化的高效运维平台已成为DCache不可或缺的重要功能。基于内存的NoSQL存储系统在运营和维护方面存在巨大的开销,需要深入了解相关技术,并在关键时刻做出正确的决策。
DCache基于TARS开发,因此操作和维护平台将DCache和TARS的服务管理统一在一个模块上。 Shanbao Yin介绍了运维平台,大大提高了效率,同时降低了运维维护门槛,关于服务部署和在线。 ,迁移,扩展,监控和配置都很容易实现。