编辑: 木头飞艇 2017-11-20

5 数据分区、水平扩展 为处理每日高达数亿条的海量数据,数据必须在多个节点存放.在TDengine 里,数 据是按照每个采集点(表)来存放的.一张表(一个采集点)的数据,即使每秒产生 一百个字节的数据量,一年也才 3G 的数据量,压缩后,往往还不到 300M,因此 TDengine 里,一个表是不跨节点存储的,以便于单张表的快速高效的插入、查询和 计算. 为更好的数据分区,TDengine 采用了虚拟数据节点的设计.一个虚拟数据节点包含 多个表,表的数量可以配置.根据其计算和存储资源,一个物理节点将被划分为多个 虚拟数据节点.虚拟数据节点的设计带来几大优势,1)更好的支持硬件异构环境,资 源多的服务器可以创建更多的虚拟节点;

2)恢复一个宕机的节点,可以让众多的其他 节点参与进来,大大加快速度;

3)如果撤掉一个数据节点,该节点上的虚拟节点将被 相当均匀的迁移到其他节点上去;

4)新增一个数据节点,负载过热的节点的上的部分 虚拟节点将被整体迁移过来.这一切让负载更加均衡,让数据同步变得更加高效. 与传统的数据库相似,用户可以可以创建多个数据库,每个库里面,可以创建多个 表.一个库可以横跨多个虚拟数据节点,但一个虚拟数据节点仅仅属于一个数据库. 当用户添加一个表时,管理节点将查看已经分配的虚拟节点里是否还有空位,如果 有,就将该表分配到这虚拟节点.如果这个库的所有虚拟节点都没有空位,管理节点 将根据负载均衡的策略(随机、轮询等)来分配一个新的虚拟节点给该库,然后将该表 分配到新的虚拟节点里.由于一台物理主机有多个虚拟数据节点,这种策略能保证负 载均匀分布. TDengine 白皮书 第7页?北京涛思数据科技有限公司版权所有 管理节点负责整个系统的负载均衡,虚拟数据节点的增加、删除、迁移、合并与拆 分.管理节点并不保存每个采集点采集的数据,只是管理虚拟节点,而且即使宕机, 也不会影响现有各虚拟节点的数据插入和查询操作.各个采集点或应用从管理节点获 取分配的虚拟数据节点信息后,然后直接与虚拟数据节点通讯,直接将数据插入数据 库,对于查询操作也是如此.因此,系统容量以及吞吐率与虚拟数据节点的个数成正 比,整个系统是水平扩展的

6 高可靠系统 为保证数据节点的高可靠性,TDengine 引入了虚拟数据节点组的概念,并采用 P2P 的方式进行数据同步.一个虚拟节点组由处于不同物理主机上的虚拟数据节点组成, 虚拟数据节点个数就是数据冗余的个数(Replication Factor,一般大于 2).在一个虚 拟节点组里,各个虚拟数据节点通过心跳包实时知道对方的状态,而且没有主次之 分,每个虚拟数据节点都可以接受数据写入和查询的请求,如果一个虚拟数据节点收 到数据写入的请求,该请求会被立即转发给其他虚拟数据节点,然后在本地存储处 理.当应用连接 TDengine 系统时,对于要操作的任何一张表,系统会给应用提供该 表所属的虚拟数据节点组里各个虚拟节点的 IP 地址(如果 replication factor 为3, 就会有

3 个IP 地址),如果链接其中一个失败或者操作失败,应用会尝试第二个、 第三个,只有所有节点失败才会返回失败.这样保证虚拟数据节点组里任何一台机器 宕机,都不会影响对外的服务.这些复杂的重新连接流程都被 TDengine Driver 包装 隐藏起来,应用开发者无需写程序来实现. TDengine 采取 Master-Slave 方式实现多个副本之间的实时数据同步,为保证效率, 采取的是最终一致性,而不是强一致.当一台主机重启时,每个虚拟数据节点都会检 查自己数据的版本是否与其他虚拟节点一致,如果版本不一致,需要同步后才能进入 对外服务状态.在运行过程中,由于各种原因,数据仍然可以失去同步,这种不同步 会在收到转发的写入请求时被发现,一旦被发现,版本低的虚拟数据节点将马上停止 对外服务,进入同步流程,同步完后,才会重新恢复对外服务.同步过程中,高版本 的节点还可以正常的对外提供服务. TDengine 白皮书 第8页?北京涛思数据科技有限公司版权所有 管理节点负责存储 Meta 数据,同时根据每个数据节点状态来负责负载均衡,因此也 要保证其高可靠性.多个虚拟管理节点组成一个虚拟管理节点组,因为 Meta 数据可 以被多个应用同时更新,因此 TDengine 采用的是 Master-Slave 模式实现虚拟管理 节点的数据同步.写的操作,只有 Slave 节点写入成功后,Master 节点才会返回成 功,从而保证数据的强一致性.如果 Master 节点宕机,系统有机制保证其中一个 Slave 会立即被选举为 Master, 从而保证系统写操作的高可靠性. 由于 Meta 数据量并不大,Meta 数据虽然需持久化存储,但将其完全保存在内存,以 保证查询操作的高效.在应用侧,为避免每次数据操作都访问管理节点,TDengine Driver 将必要的 Meta 数据都会缓存在本地,只有当需要的 Meta 数据不存在或失效 的情况下,才会访问管理节点,这样大大提高系统性能. 管理节点在集群中存在,但对于应用和系统管理员而言,是完全透明的.整个系统会 自动在物理节点上创建虚拟管理节点以及虚拟管理节点组.

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题