TDengine 研究与浅析

一. 摘要前言

IT科技的迅猛发展,各种类型的黑科技与应用终端不断涌现,产生各种海量数据,大数据处理平台应运而生,但其庞大体量与复杂的架构使开发移植与部署变的越来越困难。现今各国频繁打贸易战,在多种不确定情况下,基础架构极易被人卡脖子,成为技术发展的拦路虎,那么TDengine作为近几年新出现的一款优秀开源大数据基础平台,具备性能、可伸缩、高可靠、零管理诸多特点,且核心技术全部自研,不必担心被外国限制,相比于国外同类产品,完全开源并具备良好的产品生态社区,能够基本替代国外同类产品,且能够在关键指标达到更优。


二. 技术分析

1.对于传统数据库SQL语法的兼容性

 Tdengine不仅具备丰富的应用程序开发接口,支持各种主流语言,能对各种类型的客户端进行开发,过去曾遇到过移植一款开源的Fortran分子动力学应用软件,因开发语言的小众化,无法找到与之匹配的客户端,只能在仔细研究并梳理清楚业务逻辑后,自行开发了一套客户端才保证了整个项目需求,中间为保证进度,在参考资料少,Fortran对口开发人员稀缺的情况下,通过加班加点才保证了项目没有被延期。

2. 设计技巧

  通过对TDengine设计场景与原理的研究,再配合原理研究其代码,由于其代码是C语言,贴近硬件,效率高(效率更高的也只有汇编了)。在现代各种开源框架与低代码背景下,C语言特点就是要经常单独造轮子,对TDengine源码组织结构从简入繁进行探讨研究。

1).基础数据结构

   近些年,越来越多的高级语言采用成熟的自研或者第三方SDK,很典型的比如Java与python,很少有从头实现的API接口,就算是难度大的C++,已经有不少高级新特性与各种STL,Boost类库支撑,而Tdengine中各种malloc/free,内存池机制,一级指针,二级指针,回调钩子函数使用技巧,都显示了开发者扎实的基本功底。C++ Boost库中常见的各种智能指针,能降低因指针使用不当造成的异常崩溃问题, tmempool实现的内存池,避免了内存碎片与内存回收问题,tlist与tskiplist双向链表实现,tarray数组实现方法均很巧妙,都可以作为拿出来单独封装为API

2). RPC Epoll

  支持分布式集群的重要RPC基于事件模型驱动的网络库,实现其不同节点之间的通信,MQTT类的物联网框架是基于订阅发布的传输模式,RPC采用C/S架构模式,逻辑清晰明了,Client端发送先发送对应的计算请求给Server端,Server端收到请求先发送应答协议包到Client端,Server端再将计算请求解析后执行并将结果返回Client端。

  从实现逻辑来说TDengine RPC的逻辑性要由于MQTT,更适合物联网场景,代码可读性更高,远优于其它同类框架。

  RPC数据交互依赖TCP/UDP通信,而TCP/UDP通信的基础在于socket,对于同时存在多个连接的情况下,使用了效率最高的epoll,时间复杂度仅为O(1), 这里比较巧妙的是,由于没有采用一主/多从的多进程异步事件驱动模型,而是通过创建工作线程来处理消息,那么就避免了在事件到来时,多个进程被不必要的唤醒,从而引起”惊群”现象,提高了整体数据流的处理效率。

                                                                                                                         作者:superxs

你可能感兴趣的:(大数据)