第二十期技术雷达正式发布——给你有态度的技术解析

技术雷达是ThoughtWorks每半年发布一期的技术趋势报告,它不只是一份持续的技术成熟度评估,其产生还源于ThoughtWorks另外一个更大宏大的使命—IT革命。咱们一直深信,IT行业从定位、价值、实践和技术都会发生巨大的变革。然而任何宏观的变革,都会有一些微小的信号,咱们须要持续关注这些微小的改变,这也就是技术雷达的由来。html

技术雷达自2010年创办以来,已经走过十年、累计发布二十期。它比那些咱们能在市面上见到的其余技术行情和预测报告更加具体、更具可操做性,由于它不只涉及到新技术大趋势,更有细致到类库和工具的推荐和评论,所以更容易落地。通过半年的追踪与沉淀,ThoughtWorks TAB(ThoughtWorks技术咨询委员会)根据咱们在多个行业中的实践案例,为技术者产出了第20期技术雷达,对百余个技术条目进行分析,阐述它们目前的成熟度,并提供了相应的技术选型建议。react

本期主题

突飞猛进的数据形态

十年前,数据几乎等同于关系数据库。现在,数据则可能呈现出各类形态,包括NoSQL、时间序列、像CockRoachDB和Spanner这样提供全局一致性的SQL存储,以及提供聚合日志文件查询功能的事件流。随着数据源不断增加,数据规模愈来愈大,种类愈来愈多,变化速度愈来愈快,企业想要对这些数据作出更实时的响应,上述状况也就应运而生了。对于开发人员,每种形式的数据使用方法都存在固有的优缺点,如何取舍是个难题。架构师和开发人员应该密切关注各类工具和模型提供的新功能,同时保持勤奋好学,不要彻底以对待现有工具的经常使用方法来使用新工具。咱们必须认识到数据形势正在发生重大变革,并坚持寻找合适的策略和工具。android

Terraform生态系统建设

开发人员喜欢抽象层,缘由很明显,由于他们能够将复杂问题封装到抽象层中,从而集中精力处理更高层级的问题。在前几期的技术雷达中,咱们都阐述了这种发展趋势,不少团队在同时使用云和容器时都会采用这种方法。一开始他们关注的是Docker及其生态系统。而后焦点开始转向Kubernetes。如今,咱们发现主要活动整体上都集中在基础设施即代码方面,尤为是集中在Terraform生态系统上。虽然除了Terraform,咱们还推荐了其余工具,可是它在提供商社区中的采用率仍然让人印象深入。本期雷达的内容重点包括Terratest(用于测试基础设施代码),以及GoCD的新提供商(可使用Terraform配置GoCD)。git

Kotlin方兴未艾

Kotlin做为一项开源语言,不只在Android环境中得到了普遍应用,并且还在向其余环境拓展,也在技术雷达中受到了持续密切的关注。因为不喜欢现有的语言选择,JetBrains在内部开发了Kotlin,并随后开源。Kotlin彷佛在各类开发人员中广受欢迎。它常常在各类平台和工具中用做通用甚至专用开发语言,并且在技术雷达中出现的频率也愈来愈高。此外,咱们的项目团队也在采用该语言(Ktor、MockK、Detekt、HTTP4K)。这个新兴语言在实用性设计和先进工具中得到了普遍应用,而且造成了一个蓬勃发展的生态系统,取得了巨大的成功,对此咱们深感欣慰。github

封装边界的泄漏

随着“一切即代码”理念的盛行,之前难以改变的绝大多数环节(基础设施、安全、合规性和运营),几乎都变得能够经过编程来处理,这就意味着开发人员能够采用更完善的工程实践。然而,咱们仍然常常看到,要么配置子系统异常复杂,要么过分依赖于可视化编排工具,逻辑渗透到配置文件中,以YAML编写的条件语法晦涩复杂,还有各类技术须要使用大量编排框架等状况。随着多语言编程、基础设施即代码和一切皆服务技术的出现,咱们再也不须要将各类组件都组合到单一内聚的系统中。所以,本来应位于系统边界内的逻辑就会泄漏到编排工具、配置文件和其余管道中。虽然有时候确有这种必要,可是咱们建议各团队保持谨慎,考虑将此类代码放在开发人员执行测试、版本控制、持续集成和其余完善的工程实践的位置。请避免将业务逻辑放在配置文件中(而且避免使用要求将业务逻辑放在配置文件中的工具),尽量减小必须执行的编排操做,不要让编排功能主导你的系统。web

象限亮点抢先看

技术

Four key metrics

采纳redis

详尽的DevOps现状报告侧重于对高绩效组织的数据驱动型统计分析。这项研究持续多年,结果发表在Accelerate,证实了组织绩效和软件交付效能之间存在直接关联。研究人员证明,只需四个关键指标就能区分低绩效、中绩效和高绩效人员:前置时间、部署频率、平均修复时间 (MTTR) 和变动失败率。的确,咱们已经发现这四个关键指标(Four key metrics)是个简单却强大的工具,可帮助领导和团队专一于衡量并改进重要的环节。实施构建流水线是一个良好开端,以便你可以捕获四个关键指标,并使软件交付价值流可见。例如,做为 GoCD Analytics的一等公民,GoCD流水线可以衡量这四个关键指标。sql

Continuous delivery for machine learning (CD4ML) models

试验mongodb

机器学习的持续交付 (CD4ML) 模型(Continuous delivery for machine learning -CD4ML models),将持续交付实践应用于开发机器学习模型上,以便于随时应用在生产环境中。该方法解决了传统机器学习模型开发的两个主要问题:一个是训练模型和将模型部署到生产环境之间的周期过长,此过程一般包括将模型手动转换为可上线的代码;另外一个问题是使用被过期数据训练过的产品环境模型。docker

机器学习模型的持续交付流水线有两个触发因素:(1) 模型结构的变更; (2) 训练与测试数据集的变更。要使其发挥做用,咱们须要对数据集和模型源代码进行版本化。流水线一般包括用测试数据集来测试模型、按需使用H2O等工具来对模型做自动转换、以及将模型部署到生产环境以交付价值。

Ethical OS

评估

做为ThoughtWorks的开发人员,咱们对于工做中可能涉及到的道德问题十分敏感。随着社会对科技的依赖程度日益增加,软件开发团队在制定决策时必须考虑道德问题。目前已经出现的一些工具,能够帮助咱们思考本身所构建的软件会在将来产生什么影响。此类工具包括技术塔罗牌道德风险手册Ethical OS),这两类工具都得到了普遍好评。道德风险手册为咱们提供了一个思惟框架和一系列工具,能够促进咱们围绕软件构建方面存在的道德问题展开讨论。该手册由Institute of the Future(将来研究所)和科技与社会解决方案实验室(Tech and Society Solutions Lab)联合编制。其中探讨了一系列切实的风险,例如网瘾、多巴胺经济,并且还分析了不少值得探讨的场景。

Smart contracts

评估

咱们在使用分布式帐本技术(DLTs)方面积累的经验越多,遇到的当前智能合约Smart contracts )未完善之处就越多。从理论上来看,在帐本上自动添加不能否认、不可逆的合约是个好主意。但若是在你考虑如何使用现代化软件交付技术来开发它们,以及出现实施方式之间的差别时,问题就出现了。不可变数据是一回事,但不可变业务逻辑则彻底是另一回事!必定要想清楚是否在智能合约中包含逻辑,这一点真的很是重要。咱们已经发现,不一样的实施方式之间存在大相径庭的运营特征。例如,即便合约能够演变,不一样平台对这种演变的支持程度也不同。咱们的建议是,在智能合约中加入业务逻辑以前,请认真考虑,并权衡不一样平台的利弊。

Release train

暂缓

咱们已亲眼见证,组织经过使用版本火车(Release train)概念,从极低的发布频率成功转向更高频率。版本火车是一种用于协调跨多个团队或具备运行时依赖性组件的发布技术。不管全部预期功能是否已准备就绪,全部版本根据一个固定且可靠的时间表发布(火车不会等你,若是错过,就只能等下一趟了)。虽然咱们彻底支持关于按期发布和演示可用软件的纪律性,但从中长期来看,咱们发现该方法存在一些严重缺陷,由于该方法会增长有关变动排序的临时耦合,并且若是团队赶着在给定时间范围内完工,质量可能会下降。咱们更倾向于关注在必要的架构与组织的方法,来支持独立发布。虽然火车对于提高较慢团队的速度很是有用,但咱们也看到它给快速团队带来了上限。因此咱们认为,在使用该技术时,应尽可能当心谨慎。

平台

EVM beyond Ethereum

试验

以太坊虚拟机(EVM)最初是为以太坊主网络设计的。但现在,大多数团队再也不想要从头开始发明区块链;相反,他们会选择“超越以太坊的EVM(EVM beyond Ethereum )”。咱们看到众多区块链团队选择对以太坊进行分支(如Quorum)或实现EVM规范(如BurrowPantheon),并添加他们本身的设计。这样作不只是为了重用以太坊的设计,还能够利用其生态系统和开发人员社区。对于许多开发人员而言,“智能合约”的概念差很少等同于“以Solidity编写智能合约”。虽然以太坊自己具备一些限制,但围绕EVM生态系统的技术正在繁荣发展。

InfluxDB

试验

时序数据库(TSDB)已经问世一段时间了。随着符合时序模型的使用场景愈发常见,TSDB日益成为主流。InfluxDB仍然是TSDB的理想选择,主要用于监控场景。TICK Stack就是一款以InfluxDB做为核心的监控解决方案。Influx 2.0的alpha版最近引入了Flux(一种用于查询和处理时序数据的脚本语言)。虽然Flux目前仍处于早期阶段,且没法判定能比InfluxDB得到更普遍的应用,但它承诺会比InfluxQL更强大且更具表达力,且能将时序分析工做交由数据库来完成。然而,InfluxDB只有企业版才能提供集群支持,所以在项目中须要留意这个限制。

Istio

试验

Istio正逐渐成为将微服务生态系统付诸应用的标准基础设施。其开箱即用的横切关注点的实现,已经帮助咱们快速实现了微服务。这些横切关注点实现包括:服务发现、服务之间和从请求到服务之间的安全性、可观测性(包括遥测和分布式跟踪)、滚动发布和弹性。Istio是咱们一直使用的服务网格技术的主要实现平台。咱们很是享受它的每个月发布及无缝升级所带来的持续改进。咱们使用Istio来启动项目,从一开始就能得到可观测性(跟踪和遥测)和服务之间的安全性。咱们正密切关注其在网格内外各处服务之间身份验证方面所作的改进。此外,咱们但愿看到Istio为配置文件创建最佳实践,从而在为服务开发人员提供自主权和为服务网格运营商提供控制权之间达到平衡。

Hot Chocolate

试验

GraphQL生态系统和社区正不断发展。Hot Chocolate是用于.NET(包括新的core和原先的传统框架)的GraphQL服务器。该平台可用于构建和托管schema,并能用于处理针对这些schema的查询。Hot Chocolate的开发团队近期增添了schema拼接功能,容许从单个入口点跨多个schema(从不一样位置聚合而成)进行查询。虽然该功能会被以多种方式误用,但仍是值得对其进行评估。

Knative

评估

无服务器架构的应用,让FaaS编程风格在开发人员之间愈来愈普及。该架构经过独立构建和部署的函数,帮助开发人员专一于解决核心业务问题。这些函数能响应事件、运行业务流程、在流程中生成其余事件,完成任务后随即消失,再也不消耗资源。之前,AWS Lambda或Microsoft Azure Functions等专有无服务器平台已实现这种编程范式。Knative是基于Kubernetes的开源平台,用来运行FaaS工做负载。Knative有几点突出之处:开源且适用于任何供应商;实现了CNCF无服务器工做小组白皮书中所定义的无服务器工做流;经过实现符合CNCF CloudEvents规格的事件接口,来确保跨服务的互操做性;尤为重要的是,它可以解决在运维混合FaaS与长期运行的容器化架构时所遇到的常见挑战。该平台易与IstioKubernetes集成。例如,经过在不一样版本的函数之间切换流量,开发人员能够利用Istio实施金丝雀发布策略。对于处在相同Kubernetes环境中的长期运行的容器服务和FaaS程序,开发人员均可以享受到Istio所提供的可观测能力。咱们预计,Knative开源事件接口将继续支持更多底层源和目的事件的集成。

工具

UI dev environments

采纳

随着愈来愈多的团队拥抱DesignOps,该领域的实践和工具也日渐成熟。UI开发环境专一于用户体验设计师与开发人员之间的协做(UI dev environments),为UI组件的快速迭代提供了综合环境。目前在该领域可用的工具包括:StorybookReact StyleguidistCompositorMDX。这些工具既能够在组件库或设计系统的开发过程当中单独使用,也能够将其嵌入到web应用程序中使用。经过使用这些工具,许多团队在开发准备工做中缩短了UI反馈周期并改善了UI工做的时间。因而,使用UI开发环境成为了咱们合理的默认选择。

batect

试验

大量的精力仍然被浪费在部署本地开发环境和排查“works on my machine”(在个人机器上能够工做)的问题上。多年来,咱们的团队已经采用“检查并实施”的方法,使用脚本化方法来确保本地开发环境的配置始终一致。Batect是由ThoughtWorker开发的一款开源工具,可帮助轻松搭建和共享基于Docker的构建环境。Batect做为构建系统的入口点脚本,可以启动容器来执行彻底不依赖于本地配置的构建任务。对构建配置和依赖项的更改仅经过源码管理便可共享,无需在本地机器或CI代理上进行任何更改或安装。在该领域的其余工具中,咱们偏向于使用Cage,但咱们也看到batect正在以符合咱们团队需求的方向迅速发展。

Detekt

评估

Detekt是一个适用于Kotlin的静态代码分析工具。它可以发现代码中的坏味道和复杂性。你能够经过命令行运行它,也可使用其插件集成一些热门的开发者工具,例如Gradle(用于在项目构建时执行代码分析)、SonarQube(用于除静态代码分析外的代码覆盖率统计)和IntelliJ等。Detekt可以给Kotlin应用的构建流水线锦上添花。

Humio

评估

在日志管理领域,Humio是一款相对较新的工具。该工具彻底从零开始构建,经过基于定制设计的时序数据库的内置查询语言,在日志提取和查询方面性能很是快。从提取、可视化和报警提醒的角度来看,该工具可以与几乎全部工具相集成。日志管理领域已被 Splunk 和 ELK Stack主导,因此,有替代选择也是一件好事。咱们将持续关注 Humio 的发展。

Kubernetes Operators

评估

咱们对于Kubernetes对行业产生的影响兴奋不已,但也担忧随之而来的运维复杂度。保持Kubernetes集群启动并运行、管理在该集群上部署的软件包都须要特殊技能和时间。升级、迁移、备份等运维流程常常会是一项全职工做。咱们认为Kubernetes Operator会对下降复杂度起到关键做用。该框架提供了一套标准机制,为在Kubernetes集群中运行的软件包描述了自动化运维流程。虽然Operator由RedHat发起和推广,但多个社区为经常使用开源软件包(如JaegerMongoDBRedis)开发的Operator已初露头角。

语言&框架

Apache Beam

试验

Apache Beam是一个开源的统一编程模型,用于定义和执行数据并行处理流水线的批处理与流式传输。Beam模型基于数据流模型,容许咱们以优雅的方式表达逻辑,以便在批处理、窗口化批处理或流式传输之间轻松切换。大数据处理生态系统已经取得了长足发展,这可能会致使人们难以选择正确的数据处理引擎。容许咱们在不一样运行程序之间切换,这是选择Beam的一个关键缘由。几个月前,它支持了Apache Samza,这是除Apache SparkApache FlinkGoogle Cloud Dataflow以外的又一个新的运行程序。不一样运行程序具备不一样能力,且提供轻便的API是一项困难的任务。Beam将这些运行程序的创新主动应用于Beam模型,并与社区合做以影响这些运行程序的路线图,从而试图达到微妙的平衡。Beam具备包括Java、Python和Golang多种语言的SDK。咱们也成功使用了Scio,它为Beam提供了Scala包装器。

Puppeteer

试验

CypressTestCafe同样,Puppeteer也是备受咱们团队推崇的一款Web UI测试工具。Puppeteer可以对无头浏览器进行细粒度控制,生成时间轴信息,以用于性能诊断等。咱们的团队发现,相较其余基于WebDriver的同类工具,Puppeteer更加稳定、快速和灵活。

Room

试验

Room是一个数据持久化库,用于在Android上访问SQLite。它支持使用最小限度的样板代码进行数据库访问,同时经过编译时SQL校验使数据库访问更加稳健。令咱们开发人员感到满意的是,使用LiveData后,Room可以与可观察查询完整集成。Room是Android Jetpack组件之一,旨在简化Android应用开发。

Rust

试验

Rust最近一次在技术雷达中出现是2015年,自那以来,咱们看到开发者对Rust的兴趣在逐渐提高。咱们的一些客户正在使用Rust语言,尤为在围绕基础设施工具方面的使用最为常见,而在高性能的嵌入式设备中也能够见到Rust的身影。不断完善的生态系统以及语言自己的改进推进了人们的兴趣提高。语言的改进方面,包括了直接的性能加强,也包括了直观表现力的提升,例如非词法做用域的更改。大多数重大变化都包含在去年12月发布的Rust 2018标准中。

fastai

评估

fastai是一个开源Python库,可以简化对快速且准确的神经网络的训练。它基于PyTorch构建,已成为备受咱们数据科学家欢迎的工具。fastai可简化模型训练中的难点,如预处理、使用少许代码加载数据。该库根据深度学习最佳实践构建而成,对计算机视觉、天然语言处理(NLP)等提供开箱即用的支持。创始人的动机是为深度学习建立易于使用的库,使之成为一个改进版的KerasGCPAWSAzure很快便接纳了fastai,将其包含在机器学习的镜像中。fastai的建立者意识到Python在速度和安全方面的限制,已宣布接纳Swift做为深度学习的替代语言。咱们将密切关注其进展。

以上是咱们在最新一卷技术雷达中随机摘取的几个Blip,欲获取整版技术雷达,请点击这里进行下载!


5月9日,ThoughtWorks技术委员会成员、中国区区块链实践负责人刘尚奇还将在线上为你们带来新一期雷达解读,细述四大主题趋势,解析重点技术条目,席位有限,欢迎扫码参与~


更多精彩洞见,请关注微信公众号:ThoughtWorks洞见

相关文章
相关标签/搜索