Foreword
推荐序一
杜金房先生邀我为他的新书写一个推荐序,我非常高兴。我曾在通信行业工作,创业之前,在Motorola、3Com等公司研发通信产品10余年,对通信类的技术非常感兴趣。不过我之前对Kamailio不是很了解,因此利用周末时间学习了一下。
Kamailio是一款有20多年历史的开源软件,能历经这么多年仍然保持强大的生命力,足见其不凡。老杜的书写得深入浅出,让我轻松理解了Kamailio,也让我对老杜产生了由衷的佩服。
我现在做的产品TDengine就是开源的,认识老杜也是因为开源。大概是由于我比较高调,老杜很早就来到我们的用户微信群跟我们交流用TDengine来处理话单的存储和查询的感受。在2021年的一次开源大会上,老杜还拉着我在嘈杂的晚会一角聊了半个小时。
TDengine是我现在带领团队在做的创业项目。2016年下半年,我发现大家都习惯性采用Hadoop大数据平台来处理从机器、传感器、智能硬件上采集到的数据。其实这些数据是很有特点的,比如时序、结构化、很少删除等,我便想到应该充分利用这些数据特点,开发一个专用的大数据处理平台,来大幅提高系统的处理效率,减少系统研发和维护的复杂度。我个人判断,今后世界上90%的数据都是机器、传感器产生的,而不会是人产生的,这是一个巨大的市场,很有想象空间,因此我决定再次创业,专注于物联网、工业互联网领域,打造一个专用的高效时序大数据处理平台。
跟Kamailio类似,TDengine也是使用C语言开发的。当然,20多年前做Kamailio这样的软件,除了C语言几乎没什么其他选择,而现在我们有了更多的选择,比如被誉为互联网时代的C语言的Go语言等。但是因为我个人一直用C语言做研发,而且底层软件,包括几乎所有流行的数据库,都是用C语言开发的,所以我还是毫不犹豫地选择了C语言。老杜也是C语言的拥趸,看到他在FreeSWITCH开源项目中10多年间贡献了超过15万行代码,我还是非常佩服的。向开源项目做贡献跟自己做开源项目不一样,比如我自己的TDengine由我自主可控,可以提交任何我认为正确的代码,而向开源项目做贡献,要得到上游项目方的认可。老杜能够持续多年贡献这么多代码,本身就是一种实力的表现。
上个月老杜发起了一个开源项目:在FreeSWITCH中写一个TDengine的模块,使用TDengine存话单。话单本身就是TDengine的一个很好的应用场景,符合时序数据库的特点:数据量大,总体按时间有序,一次写、多次读且不能修改。在开发过程中他还遇到了TDengine客户端库与FreeSWITCH中符号表冲突的问题,并向我们提出了问题和解决方案。这也是开源的好处,如果不是他,我们可能要过很久才会发现这些潜在的问题,何况他还给我们带来了免费的解决方案。未来必将是开源软件主导的世界,因为这样会让整个社会的协作更有效率,让全球的开发者都能参与进来,产品的质量也更有保障。
IT技术表面上变化很快,但究其根本,变化很小,因为底层的原理都是一样的。话单,本质上就是时序数据。而时序数据的存储,与IT系统中的消息队列的存储几乎没有区别。数据库技术中的集群技术,包括高可靠、高可用等,在通信行业,至少30年前就在研究和应用了。通信行业的集群需要通过分布式技术,让系统处理能力实现水平扩展,让硬件实现热插拔,让软件实现在线升级。因此,如果你精通一个领域的知识,再转到另外一个相关领域,会很容易。
再说回Kamailio,这本书主要以Lua语言来写路由脚本,这对我来说很亲切。我们在TDengine客户端库中也用到了Lua语言。
这是第一本关于Kamailio的中文书,如果你在通信领域工作,特别是在做SIP相关工作,推荐你读一读这本书。
陶建辉
TDengine创始人
2022年5月写于美国加州