Redis作为NoSQL最受欢迎的数据库之一,在国内市场长期占据Key-Value NoSQL市场的榜首。它的高性能,易用性和提供的常用数据结构极大的简化了开发人员和用户的开发和使用,能够更好更快的构建出客户系统。
Redis在使用时也有一些短处,经常遇到的有:
- 没有管控系统。Redis只提供一个存储核心,无论是生存周期管理还是参数配置都需要自己开发。
- 单线程模型,容易卡住。Redis使用了无锁的单线程模型来工作,但是如果有一个特别慢的查询,那么就会整体卡住Redis本身,使判活失败导致实例不可用。
- 集群版和扩缩容不完善。Redis本身提供了集群版功能,但是在大集群下并不完善;用户更习惯使用proxy代理来管控集群。变配和扩缩容的难度非常大。
- 监控和审计缺失。对于高速NoSQL数据库而言,需要有更完善的基础设施来支撑。不仅包括完善的监控,告警系统,还有日志、诊断及审计等,完整得搭建服务平台非常繁琐。
由于Redis经常作为高速内存存储和缓存使用,一般用于用户数据链路的关键在线业务。如果Redis有了问题会直接影响用户的产品功能和用户体验。缺乏必要的管理和监控,没有对Redis核心引擎做增强,一旦遇到问题用户的业务就很难快速发现,快速处理和恢复。
简而言之,Redis很难做到“开箱即用”,要在引擎核心和管控系统做大量工作。
云Redis社区版
正如上文中提到的Redis的不足,阿里云最早将Redis放到公有云的最基本出发点就是解决“有”和“无”的问题,提供完善的开箱即用的功能,和平滑扩缩容的能力。社区版Redis无论是主备版本还是集群版本都完全兼容Redis所有命令,用户能够很快的迁移并快速部署自己的业务服务。
阿里云是国内最早将Redis商业化的公司之一,也是国内对Redis社区贡献最大的实体。如在新发布的Redis-6.0RC中,aliyun的commit贡献仅次于作者。其中很多核心的改进如短链接优化,正则匹配效率等已经发布至官方。
对于小型应用服务来说,阿里云Redis社区版已经足够。
云Redis企业版(Tair)
阿里在内部大型系统诸如电商(淘宝,天猫)、优酷、高德等使用Redis非常早,但发现Redis在支撑大型或者超大型服务上的能力还是有所欠缺的,主要问题有:
• 单线程Redis有很明显的C10K问题,即在大链接状态下抗冲击能力很差。大型和超大型应用动辄就有一万或者几万进程连接Redis,一个冲激响应或者一个慢查询就可能导致连接数雪崩。
• 要求单分片有更强的服务能力。Redis社区版的一个很大的问题是一个Redis进程在O(1)的操作大致有10~13w OPS的服务能力,在极端和突然场景下仍旧不够,常用的一些命令和数据结构如String、List、Hash等。
• 数据结构模块(Module)。Redis提供的基础的Hash、List、Set等是通用的是对通用互联网环境的总结,而在阿里和大型企业有着更多的模块的需求。引入新的特定的数据结构模块能够极大的简化用户开发,并大幅提升用户系统的性能。
• 混合存储。针对大容量低访问但对RT(latency)不敏感的应用,使用混合存储不但能大幅降低用户的成本,还能提供更优秀的持久化能力和数据可靠性。
• 另外,与Redis社区版不同,客户也需要一个长期维护的稳定版本,保证用户业务的持续被集成的能力。
对于企业版来讲,在完全继承社区版能力上,着重解决应用运行得“好”,用户开发得“爽”的问题,解决用户在深度使用Redis的痛点和瓶颈。
Tair和Redis
Tair团队是阿里集团最核心的团队之一,负责整个阿里的缓存和高速存储体系。MemCache/Redis/图数据库GDB都是Tair团队将阿里内部成熟的产品孵化到云上,服务公有云和专有云客户。
云Redis企业版就是Tair3.0。它将阿里多年来在高速存储技术再次输出到云上,打造对内对外一致的服务,使得我们云上客户也能够享受到阿里技术的红利,再次突破技术的桎梏,为用户业务的高速发展保驾护航!
性能增强版
性能增强版Redis即RDB3.0,旨在为用户提供更强大的服务能力和灵活的构建能力,主要包括:
• 多线程Redis可以突破Redis单机性能极限,对于常用的数据结构加速可达三倍(400-450K OPS)。支持高达数万连接的冲击,足以应对大型的活动如热播,秒杀等场景。
• 社区高版本Redis6.0 RC虽然也支持多线程,但是IO架构上与性能增强版不同,但仍未解决C10K和大链接冲击问题
混合存储版
混合存储版Redis即PDB3.0,它使用磁盘来存储用户的数据,并提供了高度的Redis兼容力。它特别适合访问量并不大但有大量数据存储的应用场景。
• 混合存储Redis很好解决了存储成本与性能的的平衡问题:经常访问的数据缓存在内存中,这样做既提升了存储的经济型,也保证了对热数据的访问效率。
• 高效的换入换出通道,能够将用户的热请求数据前置到内存中,能够让业务应用获得更好的时延体验。
由于新硬件的引入,存储和高速NoSQL数据库正处于变革期。混合存储将持续将业内最先进的设备如NVM,RDMA等加速至系统引擎,能够让云上用户尽快享受到最新技术带来的产品优势,从容的应对未来的挑战。
数据结构模块(modules)
•数据结构模块(Module)提供了更多常见的新数据类型,能够让用户更灵活快速的构建出高效服务。这些模块已经在阿里内部广泛使用多年,非常具有代表性和特色,其中包括:
•CAS/CAD:提供原redis string命令的compare-and-swap/compare-and-delete能力,可用于原子交换、分布式锁等场景。尤其是分布式锁这个场景,阿里集团的大多数分布式锁都是使用SETND/CAD/CAS来实现的
•TairString:支持并发访问的String类型,每个String都携带version版本号,可用于并发更新,和乐观锁等场景
•TairHash:大幅改良了Redis hash类型的不足,为每个field(子key)都携带了超时(TTL)和版本号(version),用户可以非常方便的构建账号系统,安全审计规则、流控器等场景
•TairBloom:完全兼容RedisBloom,提供高性能的可伸缩的布隆过滤器(bloomfilter),可用于机器学习、爬虫系统等。
•TairDoc:完全兼容reJSON模块,提供JSON格式的结构化存储。TairDoc具备更强大的功能,诸如同时支持JSON Pointer和JSON Path两种语法、支持JSON到XML/YAML格式的转换等。特别适合在前端和配置中心类应用中使用。
•TairGis: 重量级的专业GIS模块,提供了点、线、面之间的相交、包含等关系运算,弥补了Redis原生geo数据结构只能做点位置运算的不足。可以用户替换PostGIS+缓存场景,特别适合地图、物流、电子围栏(点和多边形的地理位置关系)、地理勘探等应用场景,高德菜鸟等很多高性能地理位置业务很多都是构建于TairGIS之上。比如最近的疫区检测,通过输入疫区的地理位置围栏,就可以判断路线是否经过(线段与多边形是否相交)