【导言】DevOps 概念发展的多年间,直至近几年才真正开始普及起来。本文将围绕 DevOps 工具和工程两大维度探究软件工程格局。在分析了国内外近 1000 个工具后,我们发现了以下亮点内容:
1. DevOps 工具可以抽象为以下几个大类:Design、Develop、Quality、Delivery、Telemetry、Security、Runtime、Middleware;
2. Runtime 的产品不多,但是数量级的工程效能提升往往是 Runtime 发生了变化;
3. Middleware 是个大赛道,数据库是重中之重;
4. UI 设计工具很繁荣,商业化也很好,发展趋势是跟低代码结合;
5. 开发领域的工具纷繁复杂,面对开源和大公司的挑战最多。项目管理类是商业化最好的细分领域;
6. 国外在质量工具的投入巨大,产品丰富且出色,国内几乎为零;
7. 互联网和云原生催生了持续交付的发展;
8. 可观测性重要性越来越高,AIOps 是发展方向,商业化也很成功;
9. 除了运行时安全以外,开发安全越来越受到关注,软件供应链方面也值得重视;
10. 一站式工具一定会走向开放拥抱单点工具;
11. PC 时代和互联网时代工具都是国外的,云原生时代国内的 Infra 团队有机会。
给 DevOps 下个定义
最底下是云,包括 AWS、腾讯云、阿里云等等,还有一些跟资源相关的产品,比如 ServiceNow、CloudFlare 等等。
最上面是软件设计相关,包括 UI 设计和需求设计,也就是软件看得见的部分,比如 Figma、Adobe 等等。
中间部分是真正构建软件的部分,首先是软件的开发,质检,交付,这是所有生产必不可少的三个步骤,这里包含了日常开发者打交道最多的 IDE、代码管理、需求管理、CI/CD、自动化测试等等。
Runtime 和 Middleware 是每个软件都依赖的部分,可以理解为软件的底座,比如容器、数据库、编程语言 SDK 等等。
最右边是 Telemetry 和 Security,这两块是保证软件正常运行必不可少的,比如监控日志报警、安全扫描、入侵检测等等。
目前专注于做 Runtime Container(我这里用 container 是泛指运行程序的程序,serverless 也算 container 的一种)的产品不算多,跟整个技术体系的发展阶段有关。事实上数量级的工程效能提升往往是 Runtime 发生了变化,例如 Java 当年带来的变革,还有最近容器化带来的变革。下一个可以预见的 Runtime 变革是 Serverless。虽然 Serverless 已经存在了很多年,但发展的并不好,究其原因是因为程序结构和新的运行环境不匹配,所以我认为 Serverless 要能发展起来,必须是从程序结构开始的变革。目前有一些公司在这个方向上努力,例如 Netlify、Platform9,以及新晋创业公司 Inngest、Koyeb。这里的新东西都比较小众,因为适用面有限,解决了极致的效率,但不能解决规模化应用的问题。
中间件五花八门,这里有非常多的上市公司,创业公司,是个超级大赛道。我看了一下基本可以分成 Database 和 Others,因为数据库真的是中间件皇冠上的明珠,太靓眼了。这里的 Database 不一定是传统意义上的数据库,跟数据存储和处理相关的都算,例如 Snowflake。其他还有比如 MongoDB、Influxdata、Netapp、Qumulo 等等太多了,都做的很大。
软件的设计分为需求设计和 UI 设计(当然也有架构设计,数据库设计等等,这一类我们认为属于开发环节)。这里的需求需要跟传统的项目管理软件比如 Jira 中的需求区分开。Jira 中的需求可以认为是已经确定要做的,进入开发流水线的。而事实上业务运行过程中有很多需求是不确定的,可能来源于 IM,邮件,口头等等,这些需求需要经过产品经理的充分评估和完善才能进入开发环节,这些需求也缺乏结构化的整理和更新例如 Roadmap 等等。所以我们可以把这里的需求设计理解为产研跟业务对接的地方。关注这个领域的产品真的不多,可能是痛点不够明显,或者通过别的工具替代了,例如文档、Excel、Jira 等等,虽然不完美但也不够痛。有一些产品做得还不错比如 Aha.io、Accompa、Productboard 等等。
开发占了整个地图中最大的一块区域,这个领域东西最多最杂,毕竟这是跟人打交道最多的地方。这里面最大的一块叫做 Project Management,包括了需求管理,Bug 管理,进度管理,度量等等,研发出了 Jira、Asana 这样的产品,都是很大的上市公司。这个领域也不断的有新产品出现比如 Rocketlane, Code Climate,但都比较垂直。值得一提的是有很多团队会用更通用的管理工具来实现同样的目的,例如 Trello,Monday,甚至 Airtable。管理是一个非常多样化的需求,所以这个领域百花齐放。我们观察到中美在这个领域的需求差异极大,国外的需求更偏向个体效率,而国内的需求更偏向于管理效率。从全球来看我们并没有看到什么产品能够挑战 Jira,基本上 Jira 的插件能力能满足绝大多数的场景需求,但国内 Jira 受到非常大的挑战,不仅仅是因为国外产品政策的原因,在贴近用户“管理”需求上,确实国外产品做的不够,例如对糅杂了瀑布模式的中国式敏捷的支持,还有对业务需求的管理等等。
开发这里的第二大领域是 Pipeline,俗称流水线,这也是从制造业借鉴过来的。这里的 Pipeline 是泛指写完代码以后所涉及到的工具,而不仅仅是 Jenkins 这样的 CI。这里的典型代表是 Gitlab,它的两个主打产品就是代码仓库和 CI,占据了 Pipeline 里面的绝大部分位置。这个领域特别繁杂,但商业化做的好的不多,绝大多数是小工具,甚至是开源工具。在这个领域做产品将面对开源最大的挑战,因为程序员喜欢在这里造轮子。Pipeline 上可以集成各种单点的工具,例如代码扫描 Sonar、代码审查 Codacy、代码搜索 Sourcegraph。还有一些更垂直的专注某个类型应用的工具,例如移动端构建 Bitrise、移动端开发 Ionic、服务器端镜像构建 Packer。
我们来说说低代码。我其实是不太相信低代码这个故事的,详细的分析可以看《低代码开发会是未来吗?》。但无论如何,在某些垂直场景下业务功能的模块化低代码确实是有价值的。事实上我们看做的好的低代码产品也往往都是垂直场景的。老牌的低代码产品比如 Mendix、Outsystems 等等。Oracle、微软、Salesforce 等等大厂也都有自己的低代码产品。另外的低代码产品大致可以分为两类,一类是流程自动化,例如 Appian、Tray、Creatio。另外一类是快速开发工具,例如 Draftbit、Towify、Thunkable。你要严格来讲 Excel 都能算是个低代码工具。总的来说我认为低代码是提高现有模式的重复创建效率,而不是解决从 0 到 1 的创造效率。
而开发真正的价值是从 0 到 1 的创造,这就需要专业的开发工具 IDE。IDE 是严格意义上的工具,也就是程序员用的那把“锤子”。每个人的喜好不同,工种不同对于锤子的要求也会不同。IDE 这个工具非常非常重要,但真正商业化的特别好的不多,这里有两个原因,一是开源,二是大公司垄断。也许是因为 IDE 实在太重要了,如果每个开发都必须付费才能使用的话,会极大的限制人类的创造力,所以很多产品是开源的,例如 Eclipse,以及它的各种衍生品,还有微软的 VSCode。还有一些大公司垄断的产品例如 XCode 也是免费的。独立的 IDE 厂商目前做的比较好的只有 JetBrains,但也谣传要被 Google 收购。
做一款好的 IDE 其实门槛非常高,因为是跟程序员打交道最多的产品,各种细节都必须做到极致才能获得青睐。可惜的是国内到目前为止还没有出现一款像样的 IDE 产品。各大云厂商都在做的 WebIDE 产品,都是基于开源的内核改的,并没有什么核心技术,而且本身 WebIDE 这个品类的定位也很尴尬,缺乏场景。IDE 作为创造力的核心,本身工具可以是免费的,只要能使得上下游生态蓬勃发展,带来的收益是更大的,这也是为啥大厂愿意在这里战略性亏损的原因。说到这里缅怀一下曾经的 IDE 工具王者 Borland。
我在做这个 Infra Map 之前从来没有想过 API Management 会被单独分为一类。这类产品似乎存在感不强,但是我错了,只是国内用的少,国外有很多产品已经很成熟。信息化在国外走的早,生态又开放,API 已经是各个产品的标配用于相互连接。API 多了自然就需要管理,于是出现了 Mulesoft 这样的产品。很多大公司也都会提供 API 全生命周期的产品例如微软、Snaplogic、Softwareag、Tibco。这个领域几乎没有开源的产品,大概只有大公司才会用到这样的产品,容易收钱。我们相信 API 的重要性会越来越大,数字世界越来越丰富,沟通和交流依赖 API。
测试工具这里有一个趋势是 AI 化,包括通过历史测试数据来生成新的测试代码,或者通过视觉分析来测试 UI,比如 Test.ai、Functionize、Accelq、Applitools 等等。在看这领域的时候确实是超出我想象的,感觉像是挖到了宝藏。我没有想到老外在测试工具上已经走的如此超前了,这些工具的场景都很清晰,而且商业化的也都不错。
除了测试工具以外,测试管理也很重要。顾名思义测试管理就是把测试用例,测试计划,测试结果等等管理起来,形成结构化数据,输出报表等等,比如 TestRail、Qmetry Tricentis 等等,管理类的工具相对少一些。这里比较有意思的一家公司叫做 Sealight,引入了更数据化上下游打通的测试管理理念,值得学习。
最早软件的交付都是通过物理介质传递的,80 后可能都有过购买软件光盘的经历。随着 BS 应用的兴起,软件的分发互联网化了,软件的交付就变成了更新服务器上的代码就行了。所以有了持续交付的概念 Continuous Delivery。几乎所有的互联网,移动互联网应用都会涉及到持续发布的问题,所以这个领域产生了很多商业工具比如 Ansible。过去应用的架构五花八门,所以交付工具也是五花八门,很多团队都是自己造的发布工具。随着云、微服务和 DevOps 的兴起,应用的架构开始趋同,交付工具也就有了统一的可能,又产生了很多新兴的发布工具例如 Harness、Octopus。还有一些工具专注灰度发布的能力,例如 Launchdarkly。
可观测性包含几个元素,监控、日志、报警、追踪。其中只有日志是有单独商业工具的,例如 Logdna、Loggly,其他基本都是集成在一个工具中。这个领域过去基本都是自己用开源的自己搭,Prometheus、Grafana、Logstash、Skywalking,但是想把这些产品真正融合好是非常不容易的,这里涉及到海量数据的处理。所以在 Observerbility 这个领域有非常多的商业公司,除了 Datadog 以外,还有 NewRelic、Overops、LightStep 等等。所有这些工具的目的只有一个——帮助你在出问题的时候快速定位到问题。
写了这么多,终于来到了最后一块,安全。传统意义上安全往往指运行时安全,因为这里才是存放生产数据,跟客户打交道的地方,所以企业会投重金保证生产系统的运行安全,包括防火墙、进程监控等等。这个领域挺成熟的工具也很多,例如 Illumio、 Contrastsecurity、Rapid7、Sysdig 等等。这些工具从各种方面来保障应用的安全,包括网络、容器、云主机等等。这块的安全传统意义上是“运维”关注的。
另外一块开发安全最近受到的关注越来越多,解决的是软件开发相关的安全。基本上可以分为几类,静态安全(SAST)、动态安全(DAST)、软件成分分析(SCA)、交互式安全(IAST),以及运行时应用防护(RASP)。由于厂商一般不会只做一种类型的安全产品,往往会横跨几个,我就不分开列了。这里老牌的厂商比如 Checkmarx、Fortify、Synopsys、Blackduck 也有一些新晋明星 Snyk、Stackhawk、Anchore 等等。安全产品要做出核心竞争力门槛挺高的,如果只是依赖公开的漏洞库搞搞扫描就太同质化了,所以好的安全产品必须是在性能、易用性、有效性,甚至独有的分析能力等等方面做出亮点。
END
《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造
成就一亿技术人