Tair——概述
Tair是提供快速访问的内存(MDB引擎)/持久化(LDB引擎)存储服务,基于高性能、高可用的分布式集群架构,满足读写性能要求高及容量可弹性伸缩的业务需求。
系统架构
一个 Tair 集群主要包括3个必选模块:ConfigServer、Dataserver和 Client.
通常情况下,一个 Tair 集群中包含2台 Configserver 及多台 DataServer。其中两台 Configserver 互为主备。通过和 Dataserver 之间的心跳检测获取集群中存活可用的 Dataserver,构建数据在集群中的分布信息(对照表)。Dataserver 负责数据的存储,并按照 Configserver 的指示完成数据的复制和迁移工作。Client 在启动的时候,从 Configserver 获取数据分布信息,根据数据分布信息,和相应的 Dataserver 进行交互,完成用户的请求。
从架构上看,Configserver 的角色类似于传统应用系统的中心节点,整个集群服务依赖于 Configserver 的正常工作。而实际上,Tair 的 Configserver 是非常轻量级的,当正在工作的 Configserver 宕机的时候,另一台会在秒级别时间内自动接管。而且,即使出现两台 ConfigServer 同时宕机的恶劣情况,只要 DataServer 没有新的变化,Tair 依然服务正常。应用在使用时只需要连接 Configserver,而不需要知道内部节点的情况。
ConfigServers
- 两台 Configserver 互为主备
- 通过和 Dataserver 之间的心跳检测来获取集群中存活、可用的 Dataserver 节点信息
- 根据获取的 Dataserver 节点信息构建数据在集群中的分布表
- 提供数据分布表的查询服务
- 调度 Dataserver 之间的数据迁移、复制
DataServers
- 提供存储引擎
- 接受 Client 发起的 put/get/remove 等操作
- 执行数据迁移、复制
- 访问统计
Clients
- 提供访问 Tair 集群的API
- 更新并缓存数据分布表
- LocalCache,避免过热的数据访问影响 Tair 集群服务。
- 流量控制
产品功能
分布式架构
- 采用分布式集群架构,具备自动容灾及故障迁移能力。
- 支持负载均衡,数据均匀分布。
- 支持弹性扩展系统的存储空间及吞吐性能,突破海量数据高 QPS 性能瓶颈。
丰富易用的接口
- 数据结构丰富,支持单级 key-value 结构,同时也支持二级索引结构。
- 可支持多种应用场景,支持计数器模式。
- 持数据过期和版本控制。
应用场景
数据库缓存
随着业务量上升,数据库收到的并发请求数会不断增加,随之而来的问题就是数据库系统的负载升高,响应延迟下降,严重的时候,甚至有可能因此而导致服务中断。为了解决这类问题,可以将Tair MDB产品与数据库产品搭配使用,组成高吞吐、低延迟的存储解决方案。 MDB响应速度快,通常在几毫秒内即可完成请求。另一方面,MDB可支持更高的QPS,处理比数据库更多的并发请求。用户通过业务观察,将热点数据放置在MDB中,可以极大缓解数据库的负载,不仅可以节省数据库成本,而且提高了系统的可用性。
临时数据存储
应用程序需要维护大量临时数据,例如社交网络、电子商务、游戏、广告等,将临时数据存储在MDB中,可以降低内存管理的开销,改进应用程序工作负载。在分布式环境中,可以将MDB作为全局统一存储,避免单点故障造成的数据丢失,同时解决多个应用程序之间的同步问题。 常用的例子是将MDB作为session manager使用,如果网站采用分布式部署,且访问量很高,那么同一个用户的不同请求可能会发送到不同的web服务器上,这时可以用MDB作为全局存储,用于保存Session数据、用户的Token、权限信息等数据。
数据存储
- 推荐或广告类业务通常需要离线计算大量数据。LDB 支持持久化存储,且性能优异,支持数据的在线化服务,因此,用户可将离线数据定期导入 LDB 提供在线服务。
- 榜单类业务也可通过计算后,将最终的榜单信息存储在 LDB,并直接展示给前端应用。既可满足存储需求,也可以满足快速访问的需求。
黑白名单
安全类应用有较多黑白名单场景,该类黑白名单场景具有命中率低,访问量大,数据丢失业务有损等特性。LDB 支持数据持久化功能,同时也支持高访问量,因此被广泛应用于此类场景。
分布式锁
为防止因多线程并发造成的数据不一致或逻辑混乱,分布式锁是比较常见的处理方式。利用 Tair 的 version 特性或者计数功能可以实现分布式锁。由于 LDB 具有持久化功能,当服务有出现宕机的情况,也不会因此出现锁丢失或者锁不可释放的情况。
Ref:https://github.com/alibaba/tair/wiki/%E4%B8%AD%E6%96%87%E4%B8%BB%E9%A1%B5