发信人: goodtudou (goodtudou), 信区: Programming
标 题: Re: 论开源
发信站: BBS 未名空间站 (Tue Aug 11 11:40:44 2020, 美东)
1:开源的目的
作为物联网大数据平台,TDengine属于基础软件,可以划到数据库、大数据工具的范畴
。对于用户而言,基础软件特别是数据库软件的迁移成本极高,因此对于新的基础软件
,即使性能和功能都超强,其推广也有很大难度。原则上来讲,新产品的推广销售成本
是市场成熟垄断产品的5倍以上,因此新产品的性价比要比市场现有产品好5倍以上,才
可能对它产生冲击。
开源是一种很好的推广方式,最典型的成功案例是Linux和MySQL。这两个产品在开源的
初期,技术和产品上与专业的Sun Solaris, Oracle等产品没有可比性,但由于开源免
费,受到开发者的欢迎,很多开发者也参与进去,因此形成了一定的用户群,而且用户
群逐步扩大,最终成为主流产品。
集群开源后,在GitHub趋势榜上连续5天霸榜
另外一方面,基础软件必须面向全球市场,如果仅限于中国市场,难以做大。由于盗版
,付费和服务的意识还未养成,中国市场基础软件的销售只占全球5%都不到,我们不能
无视海外巨大的市场。而且基础软件属于典型的技术产品,使用是没有国界地域之分的
。同时,对于操作系统、数据库这些软件,只有全球前三名才可能生存。因此涛思数据
从成立之日起,就决心瞄准全球市场。
而进军海外市场,市场推广更加困难,普通的开发者会对来自中国的基础软件有很多质
疑和不信任。开源是增加信任和消除质疑的最好方法。同时,开源可以吸引全球开发者
的关注,其中一部分还可以成为贡献者,是全球协作开发,吸引全球人才的最好方式。
数据库领域,大家熟悉的开源软件ClickHouse是俄罗斯人开发的,Redis是意大利人开
发的,但现在都已经成为全球流行的软件。
随着RedHat被IBM以340亿美元收购,MongoDB, ElasticSearch等成功上市,开源软件,
特别是Open Core的模式,已经被证明是一成功的商业模式。还有一面,目前市场上流
行的时序数据库都有开源社区版,如果我们没有,推广将更加困难。从这个角度来看,
不开源是不可能的。
总之,我们开源是为了解决市场推广的问题,目的是快速获得市场份额,甚至市场的垄
断地位,形成品牌。
TDengine 2.0 官网(www.taosdata.com)
2:License的选择
首先要明确一点的是,开源并不意味代码可以随意使用。使用者必须接受License里的
规定,否则就是违规。开源产品有很多License, 流行的有Apache, BSD, MIT, GPL等等
。我们选择的是AGPL,这个License是GPL上的增强版。GPL 属于dual license,如果要
免费使用,使用者的代码也必须开源,否则需要付费。AGPL是云计算的背景下出来的,
有更强的限制。
我们采用AGPL的目的是防止云厂商用开源代码提供服务,独占利润,而不是强迫其他使
用者开源他们的软件。因为云计算是趋势,市场占比越来越高,而且市场只会容纳几家
云厂商。如果云厂商自己组织一支专业的技术支持队伍,那么涛思数据将失去盈利的一
重要渠道。但我们乐意与云厂商合作,一起提供TDengine服务,共享利润。MongoDB就
是采用的AGPL,一年前,开始使用自己的带有更强限制的开源协议,其目的是不容许云
厂商免费使用。
还有一点需要明确的是,我们开源的协议是可以更改的,等我们有时间,我们将制定一
个仅仅限制云厂商使用的开源协议,只是已经release的版本按照当时的开源协议执行
即可。采用AGPL是我们目前这个阶段,最简单最合适的保护方式。
3:哪些需要开源?
开源有两种,一种是100%的开源,还有一种是部分开源。对于100%开源的,目前取得商
业成功的只有RedHat,而部分开源的则有很多家商业成功的公司。现在流行的是Open
Core, 就是将核心代码开源。
我们是一家要获得商业成功的公司,因此我们需要采取大家认同的商业模式Open Core
。那么对于TDengine而言,我们需要将真正有技术突破和核心的模块开源,包括:存储
引擎、查询计算引擎、RPC等等。如果这些核心模块不开源,难以说服开发者使用,因
为他们有很多可替代的选择。
2019年7月宣布开源的时候,从后续宣传、商业拓展的角度考虑,决定将集群闭源(注
:集群功能刚于2020年8月3日开源)。但在美国期间,与Steven以及众多公司的交流来
看,我们应该将其开源。原因有几点,1:我们的竞争对手InfluxData, Promethus,
TimeScale的开源版都不提供集群功能,那我们提供的话,产品将有更大的竞争力;2:
时序数据处理市场,还属于战国时代,产品的定义、市场格局还在不停的改变,还没到
定局的一天,因此现在开源利大于弊;3:我们要在这个群龙混杂的时代脱颖而出,必
须先人一步,敢做对手不敢做的事情。
原则上来讲,所有基本功能,特别是展现我们技术优势的模块都需要开源。
4:哪些无需开源?
哪些不需要开源呢?原则上是大客户才有需求的功能。对于大的企业客户,有不少需求
,没有什么技术挑战,也不是核心模块,可以自己开发,但限于人力和时间成本,乐意
采购。对于TDengine而言,有以下一些功能:
数据加密:数据文件加密保存
异地容灾:一个虚拟节点组可横跨几个机房
审计:查看DBA的各种操作记录
用户认证接口:支持LDAP、Active Directory等
多级存储:节省存储成本
多租户:一般只有大型企业或提供云服务的企业才有这个需求
系统监测:TDengine自身的监测要纳入到企业整体的监测体系,减轻运维压力
图形化后台管理界面
原则上来讲,辅助性的功能不需要开源。
5:开源之后,销售什么?
开源卖的是辅助功能:最基础的核心功能确实能用,而且用的很好。但任何一家大规模
的企业,作为IT负责人,一定要考虑数据的安全(包括容灾、备份、审计、加密、审计
等等),考虑运营维护的复杂度(与现有IT监测系统能否集成,是否有专业管理工具)
,这些功能,他们自己可以在开源版基础上开发,但是开发维护的成本一定是比购买原
厂的产品高。大型的互联网公司,比如谷歌, 阿里,腾讯等,他们因为数据规模巨大,
他们会乐意组织团队在开源版本上开发,因此,可以断定,这些巨无霸互联网公司不会
付费买我们产品。但我们依然需要鼓励他们采用,因为他们是标杆型客户,能起宣传作
用。
开源卖的是保险和服务:一家大企业的CIO/CTO根本不会为公司一年节省几百万的费用
,而让整个数据系统处于一个不可靠的状态。采用开源软件,确实好,但如果没有原厂
支持,出了任何技术问题,让整个系统宕机几分钟、甚至一个小时,就更不用说一天,
那损失是巨大的,甚至IT负责人都被撤职。没有人能保证软件不出问题,这个是所有IT
人的共识。因此只要是一个专业有经验的CIO/CTO,他一定会购买专业的产品和服务,
至少出问题时能找人背锅。因此销售过程中,明确告诉对方,只要是免费客户,我们只
能在GitHub或技术社区里提供服务,无法保证实时性。但对于付费客户,我们会有专人
服务,会实时反应。客户使用过程中,即使没撞到BUG,但怎么做最优配置、与其他系
统更好的集成,包括技术培训、软件升级等,只有原厂厂商最清楚,这也是我们可以提
供的服务。
6:开源后的销售策略
开源后,一般的客户使用开源版即可。但对于一些客户,需要使用我们闭源的功能,或
者只是想获得我们的技术支持,就需要购买我们的企业版。企业版的定价策略与传统软
件没有区别,但我们需要强调服务的价值,争取按照年服务费的方式销售。
但开源改变了销售的方式,一般的客户都成为了免费客户,让我们无利可赚。但是这些
免费客户形成了TDengine的庞大用户群,他们给TDengine带来了传播,给TDengine提供
了快速的市场反馈,而且无形中将我们竞争对手的市场空间大幅减小。
通过开源,我们获客的渠道主要来自线上渠道,而且主动咨询我们的客户已经对产品有
了一定的了解,PoC的环节也将大为缩短,直接的销售成本将大幅下降。从我们7月份开
源后的效果来看,三个月的时间,主动联系我们的客户已经有数百家。对于传统的2B软
件销售而言,这个数字是相当惊人的数字。
但是销售本身并没有改变,开源只是带来了大量有效的销售线索,我们仍然需要销售人
员与客户进行仔细的沟通。这种沟通,在我们品牌地位完全建立之前,除电话、微信沟
通外,还需要面对面的进行,详细了解他们的痛点、帮助他们解决,无捷径可走。
因此我们目前的销售策略是:线上引流,线下成交。
https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl # will already be pre-configured export do = "--dry-run=client -o yaml" # k get pod x $do export now = "--force --grace-period 0" # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section . Question 1 | Contexts Task weight: 1% You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into ...
Comments
Post a Comment
https://gengwg.blogspot.com/