PolarDB MySQL Tair缓存节点 数据与缓存一站式功能

简介

传统的数据与缓存一站式的解决方案通常为Cache Aside模式。Cache Aside模式下,持久化层和缓存层的一致性问题主要是“双写”,即数据既在数据库中保存一份,又在缓存中保存一份,通过应用侧来维护两份数据的一致性。这种情况下会遇到很多数据一致性的问题,比如数据库和缓存的操作先后顺序、缓存是更新还是删除、数据库和缓存的操作原子性如何保证、操作失败后如何重试以及同时保证数据一致等。因此,在这种模式下大部分应用会选择牺牲一定的数据一致性。

为了面向在线业务场景构建一套完整的数据库+缓存的解决方案,实现对在线业务场景的数据访问、存储和加速,为客户提供一站式的解决方案,PolarDB MySQL版推出了数据与缓存一站式的功能。

技术原理

PolarDB MySQL版数据与缓存一站式的功能中,将Tair作为PolarDB集群的RO节点——Tair缓存节点,并向用户提供关系型数据库和缓存的一站式解决方案。

下图为数据与缓存一站式功能的技术架构图:


  • 提供基于Tair内存引擎的能力与Redis接口语义兼容性,并将其融合到PolarDB作为RO节点支持Cache访问。

  • 基于PolarStore的数据访问,提供高性能缓存,基于PolarDB的SCC功能(全局一致性(高性能模式)),提供了强一致性能力。

  • Tair Proxy和Polar Proxy融合,提供了统一的Proxy。

  • 提供了数据强一致性,业务无需额外开发,即可解决一致性问题;同时无需自行运维额外的一致性组件,节约了MQ、同步组件等的购买和运维成本。

  • 丰富的PolarDB产品能力:提供PolarDB+Tair的能力,同时提供关系型数据库+Key-Value等NoSQL数据库的能力,利用Tair丰富的数据结构,满足多样化的业务场景。

  • 优异的性能:PolarDB MySQL版的Tair缓存节点拥有接近Redis的性能。

  • 测试指标

    测试指标

    说明

    QPS

    • 对于Redis和PolarDB MySQL版Tair缓存节点,QPS表示每秒执行的查询数(含GET、HGET,视测试场景而定)。

  • 对于PolarDB MySQL版的主节点和普通只读节点,QPS表示每秒执行的SELECT查询数。由于设置了每个transaction只包含1个查询,因此QPS=TPS。

  • Update/s 表示在RW节点执行随机update的速率(次/秒)

  • 该场景下缓存命中率均为100%。

  • 在开启SCC的情况下,命中率越高,QPS越高。当命中率为100%时,QPS比命中率为0%时约高44.7%。

  • 在开启SCC的情况下,主节点的写压力越大,Tair缓存节点的QPS降低越明显。这是因为一方面Tair缓存节点为保证强一致性,需要等待Redo Log回放到相应点位以获取最新的值;另一方面随着写压力的增大,Tair缓存节点回放Redo Log会占用更多的CPU资源。

  • 在关闭SCC的情况下,主节点的写压力越大,Tair缓存节点的QPS越低。但是相比于开启SCC的情况,关闭SCC时Tair缓存节点受的影响要小很多。