NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

从闭源到开源,明星项目 TDengine 的开源之路

作者:关胜亮

  • 2023-07-04
    北京
  • 本文字数:8802 字

    阅读完需:约 29 分钟

从闭源到开源,明星项目 TDengine 的开源之路

背景介绍

 

首先,让我来介绍一下自己。我是涛思数据的联合创始人,同时也是 TDengine 的核心开发者之一。我主导了 TDengine 从 1.0 到 3.0 的所有版本的迭代开发工作。虽然我也承担着管理者的角色,但我更喜欢作为一名开发者。自从 2019 年开源以来,我每年都在 GitHub 上为开源社区贡献了大量的代码。今年的统计数据显示,涛思数据在中国开源社区的贡献排名第 20 名,而我个人的排名是第 7 位。



TDengine 是一个开源的物联网时序数据库,采用云原生技术实现,以其高性能而闻名。任何人都可以免费下载和使用,欢迎访问官网体验。在 GitHub 上,TDengine 获得了 2 万多个 star,与其他开源云原生数据库(如 TiDB 和 Redis)齐名。在国内的数据库排行榜中,TDengine 稳居第一已经有两三年了。这是一个基本的介绍。



发展里程碑


让我们一起了解一下 TDengine 的发展历程。在大约 2017 年左右,涛思数据成立,那时只有一个原型产品,所以我们并没有选择开源。到了 2018 年,我们发布了第一个商业化版本,拥有了大约三四个客户,并对产品进行了进一步的打磨。在 2019 年 7 月发布的 1.6 版本之后,社区的反馈非常好。在 GitHub 的排行榜上,连续十多天都排名第一。2020 年 8 月,我们发布了 2.0 版本,这两次开源带来了重要的效应和用户增长,我们成功地吸引了经纬、红杉、GGV 纪元等大型投资公司的关注。2022 年 8 月,我们发布了 3.0 版本以及云原生版本。可以说,TDengine 的成功与我们选择的开源策略密不可分。涛思数据将与开源用户一起成长。

 

为什么要开源?


为什么要选择开源?其实,我们一开始是闭源的。但是从成立之初,我们就想要做开源。开源并不是简单的把产品拿出来放出来,它经过了很多系统的思考。我们认为开源能够扩大产品的影响力,能够很好地树立品牌。在 19 年我们开源的时候,创始人陶建辉写了一篇文章叫做《49 岁的这个程序员》,估计很多人都看过,这篇文章的阅读量达到了 20 多万。这样,很多开发者就了解到了我们的 TDengine 并开始使用,知名度成为涛思数据,包括 TDengine 未来一切发展的一个基础。因此,我们要开源首先就是要想好如何推广产品。

 

其次,开源之后,可以很容易地构建开发者社区,建立竞争壁垒。我们现在的微信群里大概有 20 多个 500 人的群,每天都有人在里面提问。如果确实有问题,我们会把这些问题反馈到 GitHub 的需求里,或形成内部工单。也会有很多人写一些文章,包括设计原理、好处、坏处、坑在哪里、优势等等。这些东西成为了我们的财富。我们的竞争者很难获得这么多的关注度,无形之中形成了竞争的壁垒。



发布开源代码后,我们很容易得到市场反馈。由于有大量用户使用我们的产品,他们会提出改进建议和报告 bug。无论反馈是好是坏,这些用户的声音都能促进我们更好地迭代产品。我们迭代速度很快,曾经每周发布一个版本,后来平均每两周发布一个版本。一些用户抨击我们这么快地迭代,认为我们是基础软件,不需要那么快更新。但实际上,如果我们的软件没有人使用,那就永远不会有 bug。我们需要不断迭代才能让产品更加稳定。虽然使用基础软件时很少遇到问题,而且我们的软件已经非常稳定了,但我们的很多新用户来会带来许多新想法,这些想法会成为我们的创新源泉,促进我们持续迭代。

 

发布开源代码后可以轻松地打造产品生态。在当前信创趋势下,我们的软件可以融入不同的操作系统,如 ARM、龙芯和鲲鹏等。外部的很多开发人员会为我们贡献代码、连接器和可视化工具等。我们会区分官方发布版本和开发者贡献版本。

 

另外,开源软件更容易获得用户的信任。现在,许多大型公司提供一整套解决方案,特别是在云原生浪潮下,用户可以购买一个 K8s 集群并获得所需的任何工具。然而,一些传统公司可能不想受到大公司的束缚。相比之下,一些成熟的互联网公司更愿意自行开发产品。在这种情况下,开源软件成为一个非常重要的选择。此外,基础软件要想在国内取得成功并获得盈利非常困难。因此,要想真正取得成功,包括所有投资者在内的所有人都认为基础软件是一个很好的趋势。为什么呢?因为在国内,我们的用户数量和数据量都非常大,我们可以通过开源软件更容易地进入其他市场。因此,开源是走向海外的一个非常有效的途径。

为什么要开源最核心的代码


开源的核心代码非常重要,因为如果你不开源这部分最具有竞争力的代码,市场上可能会出现许多替代品。在过去,国内的许多开源软件仅开放了 API 和外围工具,这并没有给用户带来特别多的价值,也没有让贡献者获得很大的成就感。这就像你买一件衣服,如果你觉得不好看,别人送你一件你也不会穿。同样地,用户也不会使用没有价值的软件,因此很难形成一个支持者群体。

 

通过开源具有竞争力的代码,我们可以更好地击败竞争对手。作为基础软件的开源项目,例如数据库,如果没有良好的性能或特色功能,竞争对手很容易替换你的位置。相反,如果你已经做到了某个高度,竞争对手也就没有动力推出与你类似的产品了。因此,开源可以使竞争对手越来越少。特别是对于公司来说,开源带来的好处是很明显的,因为我们需要盈利。 

开源的误区


开源其实存在几个误区。首先,仅仅写出好的代码是不够的。很多人将他们的代码开源出来之后,却没有做任何市场推广。虽然这样的代码确实可以被随意下载,但实际上却无法为产品创造真正有价值的贡献。因此,我们需要在代码写得好的基础上,采取各种各样的配套手段,并且最好能够在一个有计划的时间段内进行执行。

 

其次,我们不能仅仅是写完代码之后就去开源。如下图所示,在我们的项目中,我们的更新速度从 2019 年到 2023 年逐渐加快。虽然这反映出我们的代码肯定不是足够好的,但我们仍然选择开源的原因在于,我们已经有了一定的商业客户基础,可以放心地将代码发布出去,吸引更多的客户并完善我们的产品。因为很多软件的市场定位会随着时间的推移发生变化,只有通过不断地发展,才能真正找到市场定位和盈利点。

 

最后,商业化也不能慢慢来,需要与开源同步推进。当然,并不需要组建一个庞大的商业化团队,因为在国内这样的环境下,商业化必然需要一些定制化开发的工作。随着项目的规模增大,这些长尾工作可能会变得越来越多,需要平衡市场的诱惑和主线版本之间的关系。因此,商业化的进度需要适度地控制,因为商业化既能为我们的开发团队带来信心,也能为投资团队带来信心。这是一个适度的发展过程,在合适的时间选择做好商业化。

 


开源软件成功的关键指标


什么是成功的开源软件呢?我认为衡量开源软件成功的关键指标有四个,其中最重要的指标是它的关注者。因为关注者代表了社区的影响力,而 GitHub 上的 star 数是最直观的衡量指标。虽然 GitHub 上有二三十万个开源软件,但能达到一万个 star 以上的软件只有一两千个。这些软件无一例外地都是业内领先的佼佼者,这是一个很客观的评价指标,而且它无法作假。如果有假冒伪劣的情况被发现,会对公司形象产生致命影响,使公司无法再起步。

 

除此之外,开源软件的成功还可以从使用者的数量方面衡量。不同软件的使用者衡量标准可能不同。例如,底层软件的数据库,前端组件都无法用统一的方式衡量它们的用户量。部署实例的数量也不好衡量,因为有些软件部署在内网中,无法与外界通信,也无法获取相关信息。一些用户也可能关闭上报信息的配置项。但是,我们可以从趋势上看到软件在哪些版本中得到了更好的使用,哪些特性更加重要。

 

在开源社区中,贡献者的数量虽然反映了用户对软件的投入和反馈,但并不是衡量软件重要性的唯一标准。外部贡献者的增多可能增加软件风险,因为出现问题时可能难以立即找到他们进行定位和修复。

 

在选择开源软件时,大企业更注重的是维护者和团队的背景和能力,以及他们的稳定性。核心提交是否来自于团队的内部以及团队对代码的控制能力,是衡量软件质量的重要指标之一。

 

什么样的产品适合开源?


关于哪些产品适合开源,我认为有三类:一类是用户量较大的产品,另一类是相对标准化的产品。这两类产品一旦打好口碑,就会像很多互联网热门的 APP 一样一夜爆红,迅速获得用户。但是我们也需要具备技术硬核软件,这是第三类。这类产品是以技术取胜的。而一些以解决业务上痛点或创新为主的软件则不太适合开源,因为一旦公布,容易被仿造。这类软件最好选择闭源。创业者们应该根据自己的情况,做出明智的选择。

 

开源产品的定位


如果我们要真正开源一个产品,那么它的定位就必须面向全球市场。这可以从一些顶尖的开源产品的目标市场中看出来,这些软件的共同特点是它们的目标市场都是全球,因为作为一款基础软件,如果不走向全球市场,它的想象空间将非常有限。此外,如果你的核心团队没有足够的激励,那么这款产品很可能也无法生存下来。在目前的 ToB 形势下,只有全球前三名的软件才能生存下来。

 


比如芯片,目前市场份额大概有 80~90%由英特尔和 NVIDIA 占据,而 ARM 则占据一小部分份额。国内很多芯片厂商靠政策或资本支持才勉强生存,希望有一天能够进入前三。所以我们的目标必须是远大的。如果这款产品的定位不是全球性的,如果不能在技术上处于全球领先地位,那么它的意义就不大。我相信,在任何一个细分市场中,都可以诞生出独角兽。现在,估值超过 10 亿美元的公司就可以叫独角兽了,它不一定是一个全面的软件平台。 

我适合做开源的创业吗?


在考虑将产品开源化并创业时,需要先确定产品的方向。目前,软件行业有点像之前的汽车行业,出现了越来越多的零部件制造商,每个公司专注于自己的一小块工作,由集成商将它们最终组装完成。类似地,开源领域,特别是大数据领域,也逐渐实现了零部件化。许多公司专注于自己擅长的领域,将与业务相关的部分交给第三方集成商处理。例如,国内的东软、神州和中科软等公司会处理这些客户的需求,而其他技术型公司则会专注于自己产品的研发。

 

如果要创业,团队小而精干,但至少要有一个人擅长技术推广。这个人应该有意愿去推广产品,并成为优秀的市场推广人才。如果团队中没有这样的人才,就需要重新考虑如何组建团队。因为软件开发不仅仅是技术,技术只是一个必要的条件。

 

我们需要逐渐将传统的软件思维转化为互联网思维,更进一步,转化为创造共赢的思维。我们只需要专注于自己的组件,与其他相关公司共同构建整个生态系统。这意味着我们需要与上下游企业建立良好的合作关系,以实现共同的成功。

产品开源后就能带来巨大的成功吗?

开源成功的关键


产品开源并不一定能够获得成功。像我之前说的,将软件放在互联网上并不是结束,这只是一个简单的开始。我发现很多同行都有开源的产品,但是它们宣布开源后,文章可能阅读量不超过 1000 个甚至更少,没有什么反响。实际上,对于这些产品,开源与否并没有什么意义,还不如闭源做好自己的客户服务。因此,开源的软件需要有一个合理的规划。开源的软件必须达到一定的质量标准,这也是为什么我们的产品在 2 年之后才选择开源的原因,因为基础软件成长周期相对较长。而一些软件的成长周期可能较短,我们可以适当缩短这个过程。但是无论如何,在进行开源宣传时,产品一定要有一个足够打动人心的亮点。也就是说,你要能回答使用你的软件能够带来什么样的价值。除了有一定的质量保证,软件还需要有稳定的维护和团队支持,需要组建公司或小型工作室来维护稳定的团队,并做好市场推广。

开源的商业模式



开源并不意味着免费,也不表示缺乏商业模式。我们公司一直在探索与开源相关的商业模式。目前业内很多领先的软件公司也都在摸索如何孵化。从一开始,我们就考虑了一些策略,因为我们知道靠着热情可以坚持 1~2 年,但工作性质总是会发生变化,因此确定商业模式非常重要。作为 TDengine,我们有三个版本的商业模式。

 

第一个版本是社区版,这是免费下载的版本,其主要目的是建立品牌,建立开发者社区,吸引越来越多的用户,提高用户口碑。一些用户可能一开始使用的是开源产品,但随着公司的不断扩大,可能会做出一些新的商业决策。例如,我们有一个典型的案例,有一个工程师非常了解我们,后来他去到理想汽车公司,觉得可以用上我们的产品,就为获得了一个非常好的客户,社区版发挥了很重要的推广作用。

 

在企业版中,我们提供了两种收费模式:独立部署和订阅。独立部署是一种一次性买断的收费模式,而订阅则是一种长期的收费模式。这两种模式各有优劣。对于国有企业来说,他们可能更喜欢独立部署这种买断式的收费模式。从产品发展和估值的角度来看,我们更喜欢订阅模式。我们销售的是什么呢?由于我们的核心代码已经开源,剩下的是一些辅助功能。如果不需要像审计、加密等高级功能,或者你的公司有足够的技术能力来维护这些软件,那么可以选择不购买这些技术服务。然而,对于许多中小型公司来说,他们虽然拥有技术能力,但也不想将其投入到软件维护上,而是希望将其投入到业务发展上,这个时候就可以考虑购买企业版。

 

我们也有云服务的版本。尽管公有云的需求正在下降,但私有云的需求仍然很高。我们可以在客户公司的私有环境中部署云环境,以满足他们的需求。

开源带来的销售变革


开源有哪些好处呢?首先,开源改变了传统的 ToB 销售模式,我们不再只是去找企业,而是面对活生生的个人客户,这些客户通常都是能够对软件购买产生决策的架构师等人群。这也是我们在软件大会上宣传产品的原因。传统的登门拜访转变为线上销售,PoC 流程也大为减少,因为真正联系我们的客户已经了解软件的使用模式和优缺点。他们只需要检查公司的最佳实践和业务场景是否匹配,以及技术和维护能力是否足够即可。这样,我们需要投入 PoC 的人员也会非常少,售前团队也会变得更小。长远来看,这对公司的成本有很大帮助,我们将从资源型销售转变为技术和产品型销售。我们现在招聘的销售人员很多都是毕业生,只要他们了解行业的基础知识就可以胜任,而传统的到各个圈子走访的销售可能会把资源带走,难以管理。通过这些措施,我们可以把 ToB 的生意变成 ToC 的生意,变成开发人员喜欢的简单生意。所以像能力强的架构师、开发人员都喜欢去大厂,因为工作比较简单。如果我们也能做到这一点,就可以吸引更多的人才加入基础软件行业。

开源带来的生态变革


开源使得技术和产品的竞争变得更加激烈,而不是仅仅依靠销售资源。这将会促进更多以产品为导向的公司的出现,当然平台型公司也会有很大的成长空间。我们相信在各个细分领域,都会出现一些全球性的企业。即使我们只是做螺丝钉,也可以成为全球前三名之一,我们也可以很好地生存下去。我们还可以帮助许多大众型企业降低成本,使他们能够将精力集中在核心业务上。随着这些企业逐渐成长,我们可以获得更多长尾价值。

开源需要组织支撑


我认为开源项目需要一个组织来提供支持。即使你将软件捐赠给 Apache 基金会等组织,也需要有商业孵化公司提供支持。虽然有开发能力和贡献精神的个人可以自己维护和开发软件,但企业使用开源软件需要强有力的支持,以确保软件的稳定性。特别是在发布大版本时,例如从 2.0 升级到 3.0 或从 3.0 升级到 4.0,需要封闭性开发、大量测试、DevOps、CI/CD、手工测试等。个人贡献者不愿意从事这些工作,他们只想编写核心代码。如果这些任务被忽略,软件将无法发布。如果开源软件没有组织支持,它的发展速度将逐渐下降,需要寻找新的方式来维持软件的生命周期,这是一个更长远的问题。



在某次会议上,我听到有人说开源只是一种好玩的东西,但我对他提出质疑,因为开源并不是一个简单的好玩的事情。不同类型的软件公司必须将开源作为他们的事业,并且对待它的态度不能仅仅是好玩。不能因为某个人觉得不好玩了,就停止参与开源工作。尤其对于 ToB 领域的软件,这个思路必须清晰。

开源产品运营的正确姿势

开发者运营是一个项目

 

开源软件需要设立开发者运营部门来协同各类资源,促进开发者生态的搭建和完善,尤其在企业发展到一定规模时。虽然研发人员的开发能力很强,但很多人不愿意写文章或者做演讲报告,而市场推广和商务部门的技术能力相对较弱,无法胜任这些任务。因此,我们需要协调资源,为软件推广提供更好的支持。为此,越来越多的公司开始设立开发者运营部门和布道师岗位,把它视为一个新项目来管理。该项目的主要指标是用户规模的增长,其中用户体验的提升是其中一个关键点。用户体验不仅包括产品本身的使用体验,还包括是否能够在各种搜索引擎中找到所需信息,是否有相关案例、最佳实践和文档,以及在出现问题时能否联系到合适的人进行沟通等。开发者运营的工作很大程度上涉及到这些方面,同时也要参与各种有技术影响力的活动,如写文章和公开演讲,推进技术影响力的提升。通过这些活动和案例的积累,我们可以更容易地为商业赋能。知名度对于线下生意也是一个非常好的支撑。现在我们的开源软件 TDengine 已经走上正轨,客户选择我们也不会被质疑。通过这些方法,我们可以让客户成功,持续了解他们的新需求并加入到我们的产品路线图中。

 

开发者运营的日常工作



作为一个项目,开发者运营需要有很多人员,每天也要处理很多日常工作。第一是用户运营。我们将用户分为几类:顶层灯塔用户、普通用户和企业用户等。对于这些用户,我们提供的支持可能也不同。此外,我们还会制定一定的激励体系,并定期与贡献者进行沟通,授予荣誉证书或分配一些开发任务等。

另外,内容运营也很关键。我们需要编写大量的基础文章、用户案例并指导用户自己撰写。此外,我们还需要发布培训视频和短视频等,这些都是提升影响力的重要部分。

 

活动运营也是项目的一部分,包括线上和线下活动。我们在本次大会上也有展台,展示我们的产品,并回答大家的问题。另外,开源项目肯定需要在某个平台上运行,例如在 GitHub 上,我们需要不断回答用户问题,维护平台并发布新版本,同时还要进行产品培训等。

 

此外,还需要进行数据方面的运营。这些数据主要是供我们自己内部使用的,因为我们需要衡量做的这么多事情中,哪些是有用的,哪些是没用的。这样可以让公司高层了解下一步该如何做,并成为评价指标。如果没有人给你一个明确的评价,那么即使你取得了成就,也会感到不满足。我们正在建立评价体系,并希望通过数据运营的方式,为生态者部门本身提供很好的评价指标。

为什么要进行开发者运营



为什么我们需要进行开发者运营呢?因为开发者就是产品的用户。实际上,直接使用我们的产品的人都是我们的开发者,他们的技能和水平也在不断提高,他们也不会一直待在某一家公司。因此,我们不应该忽视任何一个开发者,无论他们所在的公司是否与我们的业务有交集。开发者是我们技术的伙伴,活跃的开发者对于开源项目的长期繁荣发展至关重要。他们可能也会成为我们生态的伙伴,我们可以与他们共同寻求平台化或生态化运作,实现共同的价值。事实上,有一项调查表明,57%以上的开发者认为他们对基础软件的购买有一定的影响力。

如何让开发者成功


我们应该让开发者成功,让他们开发的软件被市场所接受和喜爱,这样才能让客户成功,最终也才能实现我们自己的成功。为了让开发者成功,我们需要做以下几件事情。

 

  1. 让开发者用起来放心:不用担心产品中的各种坑和后门,不用担心被厂商绑架。

  2. 让开发者用起来安心:不用担心出问题没人管。

  3. 让开发者用起来顺心:不用花费过多的力气去学习、去开发。

  4. 让开发者用起来开心:让开发者开发的应用大获成功。 

开源在中国的机会


在中国开源软件的机会还是很大的。中国的企业可以利用这个机会去颠覆传统软件,就像几年前互联网公司进军企业软件一样。然而,简单地将互联网思维套用于传统软件并不会产生深刻的价值,也不容易获得成功,因为传统软件的业务非常复杂。如果我们能够在开源软件中为其创造一些特别的亮点和特色,如将服务器数量从 100 台降至 10 台,或将响应时间从 10 分钟缩短至秒级,就可以为其赋能,使其更好地进行二次迭代和新项目的申请。因此,在中国开源基础软件仍然有许多机会。

 

中国有许多工程师,价格便宜、数量充足,因此我们可以用较低的人民币薪资生产类似的软件。中国是制造大国和消费大国,有所有的应用场景,而且数据量巨大,我们可以在国内做好一些试验,之后再将其开源。一旦我们开源软件,它将变得非常可靠,这也是我们向全球市场进军的最好路径。

 

最近参加的一次会议讨论了如何拓展海外市场并制定相应的计划。许多方法都被提出,但开源无疑是其中非常重要的一环。开源并不意味着免费,一旦确定好收费模式,就可以更好地推广产品。

 

“有所为,有所不为”是指要不忘初心,即在创建公司时要明确业务场景和所期望的效果,始终记得这一点。虽然可以进行修改,但不应因获得大型客户合同而进行修改。例如,今天有一个 3 千万的项目,你应该接还是不接呢?如果接了,企业中可能有一半以上的重要员工将去做这项开发工作,甚至可能无法预期项目何时完成。一旦开始这样的项目,会有越来越多的类似需求出现,销售人员也会为自己的 KPI 而推销更多需求。这家原本是基础软件公司的企业,可能会变成一个集成商。如果一直继续这样,最终会发现,两三年后,原本擅长的领域已有更多竞争者,软件也无法更好地发展。因此,如果我们能够坚持五年或八年来发展自己的产品,仍然有可能在该领域取得垄断地位。

参与开源社区的好处


参加开源社区肯定有好处。我们可以了解到业界广泛应用的各项技术,并学习到高质量设计的思路。即使你认为他们写的代码很平凡,但是他们的流行性基本代表了业界的高水平。此外,公开的程序和文档强制你严格要求自己。在公司内部写一个文档可能只需要随便写两句,但一旦要公布出去,就需要仔细斟酌。这也包括在公司内部做报告时,你可能不会花费时间去准备完善的 PPT,但在开源社区,你需要不断磨练自己,提高自己的技能水平。参加越来越多的顶级开源软件项目也是你技能的一个很好的证明。如果别人能够 approve 你的 commit,就说明你的水平达到了这个软件的基本水平,这也是你简历中最好的证明之一。

 


欢迎大家加我的微信,我们可以线下聊聊。此外,如果你对 TDengine 感兴趣,可以在 GitHub 上下载代码。TDengine 是一款开源、高性能、云原生的时序数据库,专为物联网(IoT)、连接汽车、工业物联网和 DevOps 而优化。谢谢大家!

 

2023-07-04 14:304066

评论

发布
暂无评论
发现更多内容

模块八作业

NewBranSTONE

架构实战营

【直播预告】阿里云服务网格 ASM 产品易用性改善实践与思考

阿里巴巴云原生

阿里云 云原生

译文:为什么超链接是蓝色的?(一)

姬翔

中秋节如何拍月亮

卢卡多多

9月日更

在线JSON转jsdoc工具

入门小站

工具

华强买瓜•程序员版

三分恶

程序员

Prometheus 2.22.0 新特性

耳东@Erdong

Prometheus 9月日更

linux之fping命令

入门小站

Linux

【Vuex 源码学习】第六篇 - Vuex 的模块收集

Brave

源码 vuex 9月日更

CyclicBarrier类在性能测试中应用

FunTester

线程 多线程 性能测试 线程安全 FunTester

Opus从入门到精通(四)Opus解码程序实现

轻口味

android 音视频 9月日更

autojs自动化框架简介

IT蜗壳-Tango

9月日更

产品分析:谁是利益相关者?

石云升

产品经理 9月日更

【Flutter 专题】42 图解页面截屏与本地保存小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

k8s deployment controller源码分析

良凯尔

Kubernetes 源码分析 Kubernetes源码 #Kubernetes#

Scrum Patterns:昨日天气(译)

Bruce Talk

敏捷 译文 Agile Scrum Patterns

写给互联网工程师的5G书 | 3. 基础架构

俞凡

架构 5G 网络

数据结构与算法:缓存置换算法

正向成长

LRU 置换算法

【优化技术专题】「温故而知新」基于Quartz系列的任务调度框架的动态化任务实现分析

洛神灬殇

Java quartz 任务调度 9月日更

Redis核心原理与实践--列表实现原理之quicklist结构

binecy

redis 数据结构 原理分析

【LeetCode】括号的最大嵌套深度Java题解

Albert

算法 LeetCode 9月日更

写给互联网工程师的5G书 | 2. 无线传输

俞凡

架构 5G

Java“锁”事

中原银行

Java 中原银行

什么是数据粒度

奔向架构师

数据仓库 9月日更

JVM 内存模型学习笔记(二)

风翱

JVM 9月日更

【LeetCode】回文链表Java题解

Albert

算法 LeetCode 9月日更

网络攻防学习笔记 Day140

穿过生命散发芬芳

9月日更 网站安全基础

Linux初体验:Linux操作系统

在即

9月日更

JavaScript进阶(三)模块化

Augus

JavaScript 9月日更

小小感悟

Nydia

谈 C++17 里的 Observer 模式 - 补

hedzr

c++ 设计模式 观察者模式 Design Patterns c++17

从闭源到开源,明星项目 TDengine 的开源之路_数据库_InfoQ精选文章