Tair

Tair 是快速访问内存(MDB)/持久性(LDB)存储服务。

Tair采用高性能、高可用的分布式集群架构,可以满足业务对读写性能和可扩展容量的高要求。

项目结构

System architecture

Tair 集群具有三个必要的模块:ConfigServer、DataServer 和客户端。

一般来说,一个Tair集群包括两台ConfigServer和多台DataServer。

两个 ConfigServer 作为主备服务器。

DataServer 和ConfigServer 之间的心跳检查用于检查集群中活动和可用的DataServer,以建立数据在集群中的分布(比较表)。

DataServers 按照 ConfigServer 的指示存储、复制和迁移数据。

客户端启动时,从ConfigServer获取数据分布信息。

客户端根据这些数据分布信息,与相应的DataServers进行交互,执行用户的请求。

在架构上,ConfigServer的作用类似于传统应用系统中的中心节点。

整个集群服务依赖于ConfigServer。

事实上,Tair 的 ConfigServers 非常轻量级。

当一个工作的 ConfigServer 遇到停机时,另一个 ConfigServer 会在几秒钟内自动接管。

即使两个ConfigServer同时宕机,只要DataServer没有变化,Tair也能正常运行。

用户只需要将应用程序连接到ConfigServers,不需要知道内部节点的细节。

ConfigServers

两个 ConfigServer 作为主备。

集群的活动和可用 DataServer 节点信息是使用 ConfigServer 和 DataServer 之间的心跳检查来确定的。

ConfigServer根据DataServer节点信息构建数据分布表,展示数据在集群中的分布情况。

ConfigServer提供数据分布表查询服务。

ConfigServer 调度DataServer 之间的数据迁移和复制。

DataServers

DataServers 提供存储引擎。

DataServers 接收客户端发起的操作,例如 put/get/remove。

DataServers 迁移和复制数据。

DataServers 提供访问统计。

Clients

客户端提供访问 Tair 集群的 API。

客户端更新和缓存数据分布表。

客户端提供LocalCache,防止过热的数据访问影响Tair集群服务。

客户端控制流量。

Product features

Distributed architecture

分布式集群架构用于提供自动灾难恢复和故障转移。

支持负载均衡,数据均匀分布。

系统存储空间和吞吐性能可弹性伸缩,解决数据量和QPS性能限制。

功能齐全且用户友好的访问

数据结构丰富。

支持单级键值结构和二级索引结构。

支持各种用途。 还支持计数器模式。

支持数据过期和版本控制。

使用场景

Database caching

随着业务量的增加,对数据库系统的并发请求越来越多,数据库系统的负载越来越重。

当数据库系统过载时,响应速度会变慢,极端情况下甚至会导致服务中断。

为了解决这个问题,Tair MDB可以与数据库产品一起部署,提供高吞吐量和低延迟的存储。

MDB响应速度快,一般在毫秒级内完成请求。

而且MDB支持更高的QPS速率,可以处理比数据库更多的并发请求。

通过观察业务,用户可以将热点数据存储在MDB中,大大减轻数据库的负载。

这不仅降低了数据库成本,还提高了系统可用性。

Temporary data storage

社交网站、电商网站、游戏、广告等应用需要维护大量的临时数据。

在 MDB 中存储临时数据可以减少内存管理开销和应用程序负载。

在分布式环境中,MDB可以作为统一的全局存储,可以防止单点故障导致的数据丢失,解决多个应用程序之间的同步问题。

一个常见的例子是使用 MDB 作为会话管理器。

如果网站采用分布式部署,访问量大,同一用户的不同请求可能会发送到不同的Web服务器。

在这种情况下,MDB 可以作为全局存储解决方案来保存会话数据、用户令牌、权限信息和其他数据。

Data Storage

推荐和广告业务通常需要离线计算大量数据。

LDB 支持持久化存储并提供卓越的性能。

支持在线业务,用户可以定期将离线数据导入LDB进行在线业务。

列表业务经过计算后,可以将最终的列表存储在LDB中,直接展示给前端应用。

这样,LDB 就满足了存储和高速访问的需求。

Blacklist/whitelist

安全应用有很多黑名单/白名单场景。

这些黑名单/白名单场景的特点是命中率低,访问量大,数据丢失导致业务损失。

LDB 支持数据持久化和高访问量,因此在这些场景中被广泛使用。

Distributed locks

分布式锁通常用于防止多线程并发导致的数据不一致和逻辑混乱。

分布式锁可以使用Tair的版本特性或者计算函数来实现。

由于LBS的持久化,锁不会丢失,即使服务宕机也能正常释放。

拓展阅读

Redis Learn-25-二级索引 Secondary index

参考资料

Tair-github