讲:凡是具有公共服务特征的行业就离不开时序数据—— 或产生时序数据、或消费时序数据、或兼而有之(时序数据库的具体实践请见“最佳实践”一章)。
4. 系统运行环境要求
蜂鸟不需要高端存储设备和高性能小型机,而是使用配置SATA磁盘的普通PC服务器(组成计算存储一体化集群)。这种通用机型的配置要求其实正是大数据、云计算运行环境发展的主流趋势和必然结果。因为通用机型除了价格低廉和保护企业现有投资的原因外,更重要的原因是:可以使用私有云和公有云所提供的虚拟机部署系统。由此可见,蜂鸟系统可部署在提供虚拟机的“私有云”中,甚至还可被部署在EC2这种“公有云”上。
当然对于预算宽裕,或想要求最佳性能表现的客户,完全可以给出较高的环境配置 —— 更高的配置必然能带来更高的性能。
下面简要给出一个大众化的配置要求(可满足大多数要求),供大家参考:
CPU — 4-12 core(主频>2G) # 如果计算任务颇多,可尝试提升CPU主频档次, 另外核/core数最好比机器磁盘数多才好(如8盘,则12核最佳)
内存 — 16G-512G # 32G属于标配,内存越大缓存越多,处理数据也自然更快,所以有实力的可将内存容量扩充到32G、64G、128G、256G、甚至更高。
磁盘 — 2 - 12个STAT/SAS磁盘 # 一般大容量的SATA磁盘速度就足够了,但数量应尽可能多,因为越多的磁盘数量不仅仅是容量增加,更重要是写入和查询性能的提升(近线性提升),所以多盘是高性能性能的保证之一。
网络 — 千兆网络环境 # 千兆网络已能应对大多数场景了,如在万兆网环境下,则写入和查询性能(尤其是大表Join操作)都将显著提升。
OS — Centos6.5(64bit) # 我们推荐比较稳定的Centos系统,不过实际上Linux各种操作系统都予以支持
如果要求更高的处理性能和存储能力,则简单补充机器即可达到目的(性能的具体计算公式见章节10.2)
注:如果需要高可用性,则最少配置三台机器,以保证数据安全;
5. 体系架构
蜂鸟系统最重要的架构特点是分层结构 —— 每层各司其职,相互解耦,独立演化。最重要的两层分别是NOSQL数据层和SQL查询层。 而在NOSQL层于SQL层上分别选择了Shared Nothing和MPP两种分布式经典架构。
层次说明(见图1):
NOSQL数据层 : NOSQL层处于基础层,内部自下而上又分为 “数据存储层” 、“数据同步层”、 “对象检索层”。分别负责数据持久化、多副本数据传播、对象读写控制功能。该层采用NOSQL经典的Shared Nothing架构,具备高扩展性、高并发性、高可用性等优良特性。
SQL查询层 : SQL层依赖于 NOSQL层,内部自下而上又分为“并行SQL执行层” 和“JDBC/ODBC接口层”。该层采用SQL查询领域最成功的MPP架构,具备大吞吐、高并发等优良特性。
离线计算层 : 该层和SQL层一样都是依赖于NOSQL层,但同时也依赖于HADOOP 体系中得M/R组件。简单讲,离线计算原理是利用M/R框架就近(到数据所在机 执行计算任务)操作NOSQL数据层所管理的数据。 从编程接口一节可看到,蜂鸟支持M/R 程序,也支持PIG、HIVE等工具,都些无不得益于离线计算层。显然该层继承了HADOOP离线计算框架具有的大吞吐、高容错等优良特性。

?
图 1
6. 时序数据存储格式
近年来,经过在大数据项目中不断探索与实践,使得我们更“懂”时序数据。蜂鸟大胆抛弃了传统数据库的掣肘,针对时序数据设计了专有数据格式和执行计划,以求最佳性能。在展开时序数据存储格式前,重申时序数据处理的主要特征 : 时间断面(区间)上进行精确、模糊、条件检索 —— 例如 : 查找国庆期间查询给定嫌疑人通讯踪迹(精确查询) ; 查春节期间具有“陕A”车牌号字样的进京车辆/总数(模糊前缀查询) ; 查询大年初一北京望京地区用电量最高的电表(地域条件查询);除时间区间上基本检索外,很多场景更需要在时间段面(区间)上进行各种统计分析计算 —— 例如 : 如,总量统计、同比、环比计算等。
我们针对上述时序数据处理的两大场景 : “区间内个体回放”和“区间内统计分析”(前者是在时间区间上进行给定key的检索;后者是在时间区间上进行分析计算),分别设计了KT和TK两种针对性存储格式。如果应用场景同时有统计分析和个体回放两类需求,则可使用蜂鸟专有的PKT格式兼顾这两类需求 —— PKT格式属于TK格式和KT格式之间的一种“折中”选择。若场景确定时,优先考虑使用KT或TK场格式 —— 比如,侦查员追查嫌疑车辆轨迹,或疑犯的通话记录等场景,属标准的个体回放需求,应优先考虑KT格式;路况车流等指标计算则属于区间内统计分析运算需求,应优先考虑TK格式;但当你既想查看给定车轨迹,又想统计路况信息时,则最好选择PKT格式了。
?
我们以示例数据做样本,分别按照三种不同存储格式组织时序数据,通过对比展示几种格式之间的区别。
示例数据:
时间从2012-06-19 20:30:00到2012-06-21 02:30:00三个小时区间为例,共到来9个时序数据,内容分别如下:
2012-06-19 20:30:00(1340109000000) K1,V1(内部包含colume1,colume2,colume3,....)
2012-06-19 20:40:00(1340109600000) K3,V2
2012-06-19 21:10:00(1340111400000) K2,V3
2012-06-19 21:35:00(1340112900000) K1,V4
2012-06-19 21:45:00(1340113500000) K3,V5
2012-06-19 22:15:00(1340115300000) K1,V6
2012-06-19 22:45:00(1340117100000) K3,V7
2012-06-19 22:55:00(1340117700000) K2,V8
2012-06-19 22:58:00(1340117880000) K1,V9
?
TK 格式(即 TIMESTAMP-KEY 格式) —— 该格式首先按照事件发生时间排序,当时间相同时,则再按照事件ID(key)排序。具体 Layout 见表 6.1:
表6.1
| Timestamp |
Key |
Colume1 |
Colume2 |
Colume3 |
.... |
| 1340109000000 |
K1 |
? |
? |
? |
? |
| 1340109600000 |
K3 |
? |
? |
? |
? |
| 1340111400000 |
K2 |
? |
? |
? |
? |
| 1340112900000 |
k1 |
? |
? |
? |
? |
| 1340113500000 |
K3 |
? |
? |
? |
? |
| 1340115300000 |
K1 |
? |
? |
? |
? |
| 1340117100000 |
K3 |
? |
? |
? |
? |
| 1340117700000 |
K2 |
? |
? |
? |
? |
| 1340117880000 |
K1 |
? |
? |
? |
? |
| ... |
... |
? |
? |
? |
? |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
KT 格式(即 KEY-TIMESTAMP 格式) —— 该格式首先按照key排序。当在key相同时,则再按照事件发生时间再排序。具体 Layout 见表 6.2:
表6.2