阿里云的NoSQL存储服务OTS的应用分析
1. 概要
OTS是构建在阿里云飞天分布式系统上的NoSQL存储服务,提供海量结构化数据的存储和实时访问。OTS以实例和表来组织数据,通过自动的数据分区和负载均衡技术,对应用提供规模(数据和访问)的无缝扩展。应用通过调用OTS API/SDK或者操作管理控制台来使用OTS服务。OTS服务具有以下几个主要的特点:
规模可扩展:OTS具备可扩展的服务能力,随着应用表的数据量和访问量逐渐增大,OTS会自动进行数据分区的调整(partition split/merge)来满足应用业务规模的增长,并且保持稳定的性能。OTS提供预留读写吞吐率的机制来让应用配置表上的资源,应用通过主动配置和调整表上的预留读写吞吐率来应对业务访问量的变化,从而获得更有保障的服务。
高可靠可用:OTS的数据存储在底层的分布式文件系统上,数据有3份拷贝,分别位于不同的容错区(机架或者数据中心),当硬件出现故障导致数据备份的损坏或丢失时,分布式文件系统会自动发现、复制并恢复数据备份,保障数据的安全可靠。OTS系统会自动检测硬件故障(如机器宕机或者网络中断)并进行数据分区的实时迁移,保障服务的高可用性。
性能可预期:OTS服务底层采用全SSD存储数据,单行数据读写请求的延时保持在几个毫秒级别。应用通过配置预留读写吞吐率来预留资源,保障请求并发量和延时的稳定性。
灵活的数据模型:OTS表中的数据无固定格式要求,每行的列数和列名可以不相同,列值支持5种数据类型:Integer、Boolean、Double、String、Binary。每一行的列可以动态增加或者删除,没有额外修改schema的代价。
读写强一致性:相对于最终一致性而言,OTS提供强一致性的读写操作。OTS保证数据写入操作一旦执行完成,返回成功的结果,应用就能立即读到最新的数据。强一致性为应用提供了更好的使用体验。
访问安全:OTS 对应用的每一次请求都进行身份认证和鉴权,以防止数据被非法用户或者未授权的用户访问,确保数据的安全性。通过和阿里云RAM服务的结合,OTS为应用提供帐号之间的授权访问。
全托管服务:OTS对于应用而言是一个全托管的服务,应用程序无需关心表的数据分区的管理工作,集群硬件维护,软件升级,配置更新和调优,集群扩容等繁琐的运维任务,节省了应用开发和维护的成本,让用户能够专心在应用业务层的开发上。
按量付费:OTS 根据应用预留和实际使用的资源进行计费,不需要在业务发展初期就进行过多的投入,对于众多的创业开发人员来说起步门槛低。OTS的收费项包括:1)预留CU费用;2)数据存储费用;3)下行流量的费用。
2. 系统架构
OTS服务的系统架构分为四层,最上层是应用程序,应用通过调用各种语言的SDK来和OTS服务进行交互;第二层是用户服务层,这一层完成的功能是对应用发送的请求进行协议处理、身份权限的校验、资源计量和请求到后端存储引擎节点的路由;第三层是存储引擎层,负责表分区的扩展和管理、负载均衡、存储数据和索引的管理、故障的处理以及高可用容灾等方面的;最下面一层是飞天操作系统,负责管理底层的硬件资源,向上提供统一的分布式存储(盘古)和计算(伏曦)。
其中下面三层运行在阿里云数据中心的物理集群上,对应用程序透明,最上面一层是用户的程序,通常运行在阿里云的ECS服务器以获得更好的访问OTS的性能,当然也可以运行在用户自己的物理服务器或者移动设备上(我们目前正在开发移动端的OTS SDK,包括Android和iOS)。
3. 功能介绍
OTS产品提供以下RESTful API:
1)CreateTable(创建表);
2)DeleteTable(删除表);
3)ListTable(列举表);
4)DescribeTable(获取表信息);
5)UpdateTable(更新表设置);
6)GetRow(读取一行);
7)PutRow(插入一行);
8)UpdateRow(更新一行中的数据);
9)DeleteRow(删除一行);
10)BatchGetRow(批量读取行数据);
11)BatchWriteRow(批量写入行数据);
12)GetRange(读取范围内的数据);
OTS提供了Java/Python/C#/PHP四种语言的SDK,方便应用快速开发基于OTS的应用。更多关于API/SDK的内容请参考:https://docs.aliyun.com/?spm=5176.383723.9.6.BASvKj#/pub/ots
4. 场景案例;
OTS服务目前被广泛的使用在阿里巴巴集团的各个业务中,积累了几个PB的数据,最大的一个应用每天会写入百TB级别的数据,比较典型的几个业务场景如下:
阿里云邮箱的后台存储:邮件的标题、发件人、收件人、时间、状态等等(不包括邮件正文和附件),使用OTS表对用户的邮件按照各种规则排序,分页读取邮件,数据量近百TB,。
来往/钉钉的后台存储:存储来往/钉钉应用的用户通讯录,实时消息推送,电话会议实时通知等等。
阿里云监控的后台存储:存储海量的原始监控metric数据以及汇总数据。
支付宝的微贷风控存储:存储淘宝买卖家的信用风控数据,用于每一笔花呗交易的风险评估
阿里健康药品监管码存储:存储中国药品的监管码,用于查询药品的基本信息和追踪药品的流通情况,目前的存储量已达近千亿条记录,日均访问百亿次。
此外,OTS还作为大规模分布式系统的基础组件被应用在阿里集团的多个产品架构中,例如大规模数据分析服务ODPS的meta存储和管理,大规模日志服务SLS的底层存储等。
PS:关于飞天平台
阿里云计算有限公司(简称“阿里云”)成立于2009年9月10日,致力于打造云计算的基础服务平台,注重为中小企业提供大规模、低成本、高可靠的云计算应用及服务。飞天开放平台(简称“飞天平台”或者“飞天”)是由阿里云自主研发完成的公共云计算平台,该平台所提供的服务于2011年7月28日在http://www.aliyun.com正式上线,推出了第一个云服务——弹性计算服务。
飞天平台内核包含的模块可以分为以下几部分。
分布式系统底层服务:提供分布式环境下所需要的协调服务、远程过程调用、安全管理和资源管理的服务。这些底层服务为上层的分布式文件系统、任务调度等模块提供支持。
分布式文件系统:提供一个海量的、可靠的、可扩展的数据存储服务,将集群中各个节点的存储能力聚集起来,并能够自动屏蔽软硬件故障,为用户提供不间断的数据访问服务;支持增量扩容和数据的自动平衡,提供类似于POSIX的用户空间文件访问API,支持随机读写和追加写的操作。
任务调度:为集群系统中的任务提供调度服务,同时支持强调响应速度的在线服务(Online Service)和强调处理数据吞吐量的离线任务(Batch Processing Job);自动检测系统中故障和热点,通过错误重试、针对长尾作业并发备份作业等方式,保证作业稳定可靠地完成。
集群监控和部署:对集群的状态和上层应用服务的运行状态和性能指标进行监控,对异常事件产生警报和记录;为运维人员提供整个飞天平台以及上层应用的部署和配置管理,支持在线集群扩容、缩容和应用服务的在线升级。