不仅性能秒杀Hadoop,现在连分布式集群功能也开源了

就在昨天(2020年8月3日),涛思数据团队正式宣布,物联网大数据平台TDengine集群版开源。此次开源,我们在GitHub上传了23.9万行源代码,1198个源文件,包含我自己疫情期间写的一万余行C代码,终于又了却我一个心愿,不用再纠结。我们一个18人的团队,通过三年的努力,为全球物联网、工业互联网、车联网行业奉献了一个开源的、具有超强性能和分布式集群功能的专业大数据平台。

TDengine在去年7月开源单机版之后,获得了极大的反响,下载量已经超过百万,每天clone代码的超过一百,正式上线的系统已有数百个。除了中国用户之外,还有来自美国、德国、法国、意大利、西班牙等全球各地的开发者。而这一年这些开发者们给我们最大的反馈是“TDengine性能超强,确实比Hadoop快的太多太多,安装部署也很简单,但我们需要集群,我们需要高可靠,我们需要有应对大数据量的处理方案”。

TDengine 2.0 系统模块图

其实,TDengine的设计从一开始就是集群的,是基于硬件、软件系统不可靠,一定会有故障的假设进行设计的,是基于任何单台计算机都无足够能力处理海量数据的假设进行设计的。只是作为一家商业公司,我们需要考虑如何盈利,业内其他类似产品都是只开源单机版,将集群功能纳入企业版,需要付费才能使用。因此在一年前宣布开源时,遵照惯例,我们也只开源了单机版。但一直以来,我都在思考:开源,就应该把最核心的代码开源,就应该把市场刚需的那部分代码开源,就应该将自己最美、最有吸引力的地方展现出来,否则开发者为什么要用你的?核心痛点问题不解决,那可替代方案就很多,产品本身的推广就会大打折扣,开源的价值就大为下降。

单机版开源后的市场的反馈更是坚定了我的想法:集群是刚需,是真正的痛点。我动了集群版开源的心思。但是,集群作为刚需也一直是我们销售的一个亮点,如果开源,我们怎么赢利?这一问题令我纠结了很久,而团队小伙伴、尤其是销售团队,也在我提出要在业内率先将集群版开源时,直接提出质疑和反对。

2019年底,我彻底想明白了,一定要将集群的代码开源。基于以下几点,1:对于大数据平台,没有集群,就相当于一个玩具,一个演示而已,谁也不会当真;2:开源是基础软件行业大势所趋,谁先真正拥抱开源,而不是假开源,谁就抢占先机;3:只要全球超过30%以上的物联网平台都在使用TDengine,只要能给用户创造真正的价值,公司一定能找到生存的途径,一定能成功。

除开源集群版的呼声之外,我们还收到了无数开发者给我们的反馈:BUG、性能问题、功能问题等等,GitHub上TDengine的issue已经超过2800个。看到这么多issue, 一方面为自己脸红,因为自己都没想到居然有这么多问题,但另外一方面,又很开心,因为这说明很多开发者在真正用我们的产品,喜爱我们的产品,我们找对了市场,我们的产品是有价值的。

这样,2019年底,除了集群版开源外,我们还决定对TDengine的一些模块,包括存储引擎、计算引擎以及集群模块等进行重构。这两大决定都需要大量工作,因此,除创业之初的几位大将,胜亮、小廖、洪泽之外,团队新鲜血液博民、李珲、怡豪等同学也加入进来参与核心代码的研发。而且为保证质量,大幅提升产品稳定性,我们引入了研发大牛树多、肖平,让他们搭建CI/CD, 负责自动化测试,写下五万多行Python程序,近千个测试例。我自己这个68年生的程序员,虽已大龄,但像以往一样,又冲到了第一线,重构了RPC、WAL以及SYNC模块,新写的C代码超过一万行,GitHub递交的PR超过155个。

涛思数据团队,拍摄于2019年10月

我的搭档,另外一位50岁的程序员,20多年前就是NASDAQ上市公司CTO,曾任亚马逊、思科全球高级副总裁,此时也挽起袖子,写起程序。而且从零开始学Python,写下了专门做并发、做系统破坏性测试的crash_gen.py (2800行)。这个程序让每位研发同学都胆战心惊,因为是专门找茬的,暴露的问题往往毫无头绪,却一定是程序问题。最开始30步都无法跑过,现在终于能无限的跑下去了。而这位搭档,在我一年多前最初游说他加盟时其实兴趣不大,不过,我和他谈到今后世界上90%的数据都是时序空间的数据,而如果大家都在用TDengine来进行存储、查询,即使我们公司不赢利,那也是一件人生最值得自豪的事情,是可以在人类信息技术史上留下痕迹的事情。他终于义无反顾的加入,和大家一起,细细打磨产品,目标只有一个,就是做一款有品位、能占领全球市场的产品。

今年的新冠疫情给全球经济重创,我们这个小小的团队却恰恰在此时静下心来,重构代码,8个月的时间,牺牲了所有的周末,我们终于推出了2.0集群版。虽没见过凌晨四点的洛杉矶,但我们经常见凌晨四点的GitHub。如果去年开源的版本能打60分,那我给2.0版本打80分。不仅因为开源了集群,代码重构后,逻辑更加清晰、模块划分更加合理,便于维护、扩展。更重要的是,我们开源了测试框架以及近千个测试例,而且将完整的设计文档分享出来。我自己编写的整体架构设计、数据复制模块设计等等文档,都已经在官网上公开,供大家浏览指正。

做一个60分的产品不难,有个不错的主意,能动手写点程序,立马就能做出来。但要做到80分,就要付出更多的努力。而我的目标是做一个能打99分的产品,因为做到99分时,就天下无敌,而且技术生涯才会画一完美的句号。不过,从80分到99分,比从60分到80分,要多付出超10倍的努力。幸运的是,我们已经有了一支很不错的产品队伍,而且有GGV、红杉、明势资本等机构超过2000万美元的投资,相信只要能坚持静心做产品,专注下去,我们一定能做到99分。

我总感慨自己幸运,在90年代初去美国留学工作,赶上美国互联网行业大爆发,正值中国经济腾飞之时,我又回到北京创业。如今,在接近退休的年龄,居然又发现了一个崭新的机会,而且是一个特别适合程序员老司机的机会——做底层软件的开发。不仅做整体架构的设计,还要动手写代码、debug、写文档,天天和团队80后、90后同学们一起战斗,乐此不疲。每每想到这里,我都会庆幸自己3年前的选择,也庆幸自己选择了开源的道路。如果没有这个选择,我和太太应该正在世界各地旅行,品尝美食,陪她流连于美术馆博物馆,过着人人羡慕的日子,但我想,那才是真正的随时光老去,因为世界已经不需要我的存在。

集群版都开源了,也许付费用户真的会变少,但那就随他去吧。我绝不会像有些厂商一样,先开源,然后闭源。只要有人用,而且用的人多,就是对我、对我们团队最大的奖励。哪怕是大家开喷,指出各种问题,我也会特别开心,因为只要有问题,我们就会好好地去改进,用心地去做。即使真有一天,我们连一个18人团队都无法养活,我也会继续做下去,会每天把产品细细地打磨,直到我无法动弹的一天,因为这是我最大的乐趣,我把TDengine当作我人生最后一幅作品,而且是一幅可以让我持续打磨到老的作品。

一年前开源时,我曾说过:“钱再多,也难让人在历史上留下痕迹,但一幅好的作品却可以传承,让后人好好的品味。愿我领头开发的TDengine成为传世之作,Leave a dent in the world!”,  今天再将这一段“初心”写一遍,希望这次集群版的开源,能够让TDengine离传世之作更近一步。


点击「阅读原文」,下载 TDengine 2.0 !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 将中文字符转英文字母_php 中英文语言转换类

起初想到制成XML文档形式,这样操作也起来很容易。只是看到说XML效率不怎样再者就是不同的模板,可这样也有个小问题,有些词汇比如时间提示是不确定,与可能是minute ,day。也有可能复数加 s那好吧,做成数组&a…

7-32 哥尼斯堡的“七桥问题” (25 分)(思路+详解+题目分析)两种做法任选其一

一:题目: 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解…

.NET 异步详解(更新)

前言博客园(cnblogs.com)中有很多关于 .NET async/await 的介绍,但是很遗憾,很少有正确的,甚至说大多都是“从现象编原理”都不过分。最典型的比如通过前后线程 ID 来推断其工作方式、在 async 方法中用 Thread.Sleep …

Java中关于单核处理多个线程的认识与了解

一:单核执行多线程 1. 首先要知道 进程,线程,程序进程:执行中的程序叫做进程(Process),是一个动态的概念,在一个进程中包含多个线程线程:指的是一条执行路径程序:就是静态的代码块2…

一次简单的服务器 cpu 占用率高的快速排查实战

前两天,朋友遇到一个线上 cpu 占用率很高的问题,我们俩一起快速定位并解决了这个问题。在征求朋友同意后,特发此文分享整个过程。本文以对话的形式展开,加上我的内心独白。文中对话与实际对话略有出入。友: 在吗&#…

php文件直链源码,PHP萌心上传直链外链网盘源码

源码说明PHP萌心上传直链外链网盘源码,小巧单文件,无需数据库,只需PHP运行环境即可。源码安装方法上传文件到PHP运行环境,修改index.php内的配置// 单个文件限制$max_file_size"51200";//大小指的KB,51200是…

7-33 地下迷宫探索 (30 分)(思路加详解)

一:题目 7-33 地下迷宫探索 (30 分)地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式。地道网是房连房、街连街、村连村的地下工事,如下图所示。 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦…

php如何判断二维数组为空,PHP判断数组为空的具体方式

在学习PHP语言的时候,初学者往往会对数组感到一些棘手。不过在通过深入的学习之后,我们会发现,这些其实并没有想象中的困难。我们今天就要向大家介绍PHP判断数组为空的具体方式,希望能让新手们了解一些新知识。PHP判断数组为空之一…

联通定时休眠5G基站 戳破皇帝的新衣

近年来,5G被欧美政客、大公司、媒体连番炒作,在公开舆论上,5G成为了“科技制高点”,成为决定国家命运的“外星科技”,个别明星企业家还声称,“5G改变社会”,“5G应用后美国将成为落后国家”。但…

java中的线程不安全和实例解析

一:引言(特指单核) 所谓线程不安全,就是在共享数据时,不同的线程在执行时,出现数据的不准确,(以模拟抢票和模拟银行取钱为例),那么我们的线程不安全具体指的…

记近一年线上项目经验及架构变更记录

简介M 项目, 是一个电子社保业务系统,2019.8 月团队接手了这个项目的开发工作,到 2020.7 月客户的业务量翻了4倍,工作日同时在线员工数量40人,以下记录总结 2019.8-至今项目的架构变化&#xff…

拓扑排序C++实现+实例解析(详解 兄弟们冲呀呀呀呀呀呀呀)

一:引言 既然是一种排序,那么肯定是按照某种规则进行排序,那么这么想的话,先了解基本知识,再来实战演练 1. AOV网(Activity On Vertex Network)【顶点——表示活动】 是一个——有向无回路的图 顶点——表…

php yaf smarty,Yaf 结合用户自定义的视图(模板)引擎Smarty(Yaf + Smarty)

Yaf 结合用户自定义的视图(模板)引擎Smarty(Yaf Smarty)来源:互联网作者:佚名时间:2015-08-06 07:55对完成某个任务进行计时可使用progress_timer类,这个类对象在退出作用范围后,会输出对象创建后过去的时间&#xff…

7-34 任务调度的合理性 (25 分)(思路加详解+兄弟们冲呀)

一:题目 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可…

.NET和.NET Core Web APi FormData多文件上传

【导读】最近因维护.NET和.NET Core项目用到文件上传功能,虽说也做过,但是没做过什么对比,借此将二者利用Ajax通过FormData上传文件做一个总结,通过视图提交表单太简单,这里不做阐述,希望对有需要的童鞋能有…

php 百度云 上传,求个PHP版百度云BOS上传文件的dome

[HTML] 纯文本查看 复制代码bce-bos-uploader simple demo开始上传var uploader new baidubce.bos.Uploader({browse_button: #file,bos_bucket: ,bos_endpoint: ,bos_ak: ,bos_sk: ,max_file_size: 1Gb,init: {FileUploaded: function (_, file, info) {var bucket info.bod…

在ubuntu上实现基于webrtc的多人在线视频聊天服务

最近研究webrtc视频直播技术,网上找了些教程最终都不太能顺利跑起来的,可能是文章写的比较老,使用的一些开源组件已经更新了,有些配置已经不太一样了,所以按照以前的步骤会有问题。折腾了一阵终于跑起来了,…

java并发练习之快乐影院

一:引言 这里是加了个同步块,来保证数据的准确性,用了个容器使,我们可以选位置 二:上码(这里是模拟在电影院选位置) package com.wyj.three;import java.util.ArrayList; import java.util.L…

用php编写一个日志系统,php利用单例模式实现日志处理类库

对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志…

Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

前言本文主要是讲解如何使用Azure DevOpsDocker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目).上一篇:Azure DevOpsDockerAsp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)觉得有帮助的朋友~可以左上角点个关注,右下角点个推荐今天我们废话不多说 直接开始正文 …