Skip to content

Latest commit

 

History

History
226 lines (154 loc) · 22.2 KB

vol-23.md

File metadata and controls

226 lines (154 loc) · 22.2 KB

vol 23

本期主题

GraghQL 浮夸风

GraphQL解决了现代分布式架构(如微服务)中的一些共性问题:当开发人员把系统分解成很多小块时,他们通常还要把信息重新聚合起来才能解决业务需求

要小心别过度追求技术通用性,不要试图用一项技术解决很多问题。

与浏览器的斗争仍在继续

  • 第一,自从2017年 Redux 作为管理 React 应用状态的默认方法被移到 “采纳”环以来,开发人员要么仍在尝试其他的方法 Recoil,要么推迟对状态 管理库的选型决策。
  • 第二,人们对 Svelte 越来越感兴趣,而它正在挑战虚拟 DOM 的概念, 后者则正是 React 和 Vue.js 等流行的程序开发框架所遵循的概念。
  • 第三,用于处理浏览器端测试的新工具不断涌现:Playwright是改进 UI 测试的又一个新尝试,而 MockService Worker 则是一种将测试与后端交互分离的新方法。
  • 第四,平衡开发人员的开发效率与应用性能一直都是我们需要面对的一个 挑战,浏览器定制的腻子脚本的目的就是改变这个权衡的范围。

可视化一切

关于基础设施、数据科学、云资源,以及很多其他极富创新性的可视化工具,其中不乏一些可以有效可视化复杂抽象的方法。减少心智负担看来是一项很实在的需求。例如微服务架构中的服务网格可视化工具 Kiali。

基础设施即代码的青春期

诸如 CDK 和 Pulumi 之类的工具,提供了远远超过第一代工具的功能。其改进如此之大,以至于我们相信基础设施即代码已经进入了积极与消极因素共的“青春期。

编程大众化

用于学习实验目的可以,在生成阶段依旧困难重重。

技术

采纳

  • 依赖漂移适应度函数。依赖漂移适应度函数追踪应用程序一个主要指标,即应用依赖的库、API或环境组件的新鲜度,并可以将过时需要更新的依赖标记出来。随着 Dependabot、Snyk 这类用于检测依赖漂移的工具日 趋成熟,可以轻松地在软件发布流程中加入依赖漂移适应度函数,以保证应用程序依赖的更新。
  • 将运行成本实现为架构适应度函数。云供应商精明的定价模型,以及基于定价参数的费用激增,再加上现代架构的动态本质,常常导致让人吃惊的运行成本。例如,无服务架构基于API访问量的费用,事件流方案中基于流 量的费用,以及数据处理集群中基于运行任务数量的费用,它们都具有动态的本质,会随着架构演进而产生改变。对运行成本的观察和计算需要被实现为自动化的函数。
  • 安全策略即代码。例如,访问控制策略定义,并强制谁在什么情况下可以访问哪些服务和资源。当我们说...即代码时,不仅意味着将这些安全策略写入文件中,还需要将其应用到诸如在代码中采用版本控制、在流水线中引入自动验证、在环境中自动部署并观察监控其性能等实践中
  • 定制化服务模板。以内部开发者作为客户,定制化服务模板可以帮助开发者将代码发布到生产环境,并提供合适的可观察性以进行操作。

试验

  • 机器学习的持续交付。尽管 CD 的原则仍保持不变,但用于实现训练、测试、部署和监测模型的端到端过程。

  • 数据网格。在管理大量分析数据方面,Data mesh 标志着架构和组织范式的一种可喜转变。

  • 声明式数据管道定义。A La模式是一个相对较新的工具,它采用 DSL 方法来定义管道,不过 airflow-declarative 工具似乎是这个领域中最有前景的工具,它是一个将 YAML中定义的有向无环图转换为 Airflow 任务调度的 工具。

  • 图表即代码。我们看到越来越多的用于创建软件架构和图表即代码的工具。Diagrams, Structurizr DSL, AsciiDoctor Diagram,还有诸如 WebSequenceDiagrams,PlantUML ,以及Graphviz。

  • Distroless Docker images。通常情况下我们使用容器安全扫描工具来检测和修复常见的漏洞和风险,以及使用 Alpine Linux 来解决镜像大小和分发性能问题。Distroless Docker images 通过移除完整的操作系统发行版来减少占用空间和依赖。此技术可减少安全扫描噪声和应用程序攻击面,需要修补的漏洞较少。Google 针对不同的语言发布了一套 distroless container images。你可以使用 Google 构建工具 Bazel 或者仅仅使用多阶段 Dockerfiles 创建简单的应用程序镜像。

  • 事件拦截。这种从源头获取状态更改,而不是使用 CDC 进行后期处理来重新创建状态更改的技术,不应该被忽视。

  • 并行核对。大规模替换遗留代码是一项艰巨的工作,而且经常受益于执行并行核对(Parallel run with reconciliation)。该技术依赖于通过旧代码和新代码执行相同的生产流程,从旧代码返回响应,比较结果从而对新代 码产生信心。

  • 使用原生的远程工作方法。后新冠时代的阴霾。

  • 零信任架构。企业中计算和数据的结构不断变化:从单一应用程序到微服务;从集中式数据湖到数据网格;从本地托管到聚合云

    评估

  • 限界低代码平台。保持谨慎怀疑的态度。

  • 浏览器定制的腻子脚本(polyfills)。该技术已经由 Polyfill.io 实现成了服务。

  • 去中心化身份。如果想快速地应用去中心化身份,你可以评估 Sovrin Network,Hyperledger Aries 和 Indy 等开源软件,以及去中心化身份 和 可验证凭证 标准。

  • 由 Kube 管理的云服务。云提供商已开始通过自定义资源定义(CRD)逐渐支持 Kubernetes 样式的 API 来管理其云服务。

  • 开放应用程序模型。开放应用程序模型(OAM) 试图对“基础设施即软件”领域进行标准化。通过使用组件、应用程序配置、范围和特征等抽象,开发人员能以与平台无关的方式描述其应用程序。而平台实现者则完全可以用工作负载、特征和范围等另一套抽象来定义其平台。

  • 安全区域。存储,传输,内存的三大保护区域。

  • 回旋实验。当我们无法让参与A/B 测试的两个小组之间彼此独立时,对照试验就失效了,也就是说,将某人添加到”A”小组中会影响“B”小组,反之亦然。解决此问题空间的一种技术是回旋实验。我们在特定区域中以交替的时间段在实验的“A”和“B”模式之间来回切换,而不是在同一时间段内同时运行。

  • 可验证凭证。 W3C 标准将其定义为一种加密安全、尊重隐私和机器可验证的手段。

    暂缓

  • Apollo Federation。提醒你谨慎使用 Apollo Federation 和它对公司统一数据图的强大支持。挑战会是巨大的,特别是当我们发现所在的领域要创建一个独特统一的模型非常复杂的时候

  • 披着API网关外衣的企业服务总线。只要是将业务逻辑(包括编排和转换)放到一个中心化的工具中,都必然会增加架构的耦合度,降低系统的透明度,增加对供应商的绑定,而且还没有任何明显的好处。

  • 用于业务分析的日志聚合。旨在提供技术可观察性的日志通常很难对用户有深刻的理解。可以考虑专门为用户分析而设计的工具和指标,或者采用更具事件驱动性的可观察性方法,其中收集、存储业务和运营事件的方式可以用更多专用工具来重现和处理。

  • 微前端的无序。例如,在单页面应用中混合使用 React.js 和 Angular。虽然这种做法在技术上是有可能的,但如果不是作为某个经过深思熟虑的过渡策略的一部分,那这种做法就是非常不可取的。

  • 生产化的笔记本。jupyter notebook 这些笔记本是作为提供现代科学交流和创新的最终媒介而设计的。在近几年,有一种趋势:笔记本成为运行生产质量类型的代码媒介,其中这些代码通常用于驱动企业运营。不推荐生产化的笔记本,而是鼓励对数据科学家赋能,使其能够使用正确的编程框架构建预生产代码,从而简化持续交付工具以及端到端机器学习平台的抽象复杂性。

平台

采纳

NO

试验

  • Azure DevOps
  • Debezium。Debezium 是一个变更数据捕获(Change Data Capture, CDC) 平台,可以将数据库变更流式传输到 Kafka 的 topics。 CDC具有多种应用场景,例如:将数据复制到其他数据库、输送数据给分析系统、从单体中提取数据至微服务以及废除缓存。Debezium 对数据库日志文件中的变更做出反应,并具有多个CDC连接器,适用于多种数据库。
  • Honeycomb。Honeycomb 是一种可观测性服务,它可以从生产系统中提取丰富的数据,并可以通过动态采样对其进行管理。
  • JupyterLab。JupyterLab 的交互环境是对 Jupyter Notebook 的改进:通过单元格拖拽、tab 自动补全等新特性对原有的功能进行了扩展。

评估

  • Amundsen。尽管 Apache Atlas 项目已经成为了元数据管理的实际工具,但数据发现仍然不容易完成。Amundsen可以与Apache Atlas 协同部署,为数据发现提供更好的搜索界面。
  • AWS云开发工具包。
  • Backstage。Backstage 是一个由Spotify 提供的创建开发人员门户的开源平台。它基于软件模板、统一的基础设施工具以及一致且集中的技术文档。它的插件化架构允许对组织的基础设施生态系统进行扩展和适配。
  • Dremio。Dremio为数据湖中的数据创建虚拟的数据集,并为消费者提供统一的视图。Presto 使存储与计算层分离的技术得到了普及,而 Dremio 则通过提升性能和优化运营成本使这一技术得到了更进一步的推广 。
  • DuckDB 是一个嵌入式列式数据库,可用于数据科学与数据分析。
  • K3s。K3s 是一个轻量级的用于物联网和边缘计算的 Kubernetes 发行版。通过剥离不相关的第三方存储驱动和云提供商,K3s 的二进制文件得以控制得非常小。
  • Materialize。Materialize 是一种具备以下优势的流式数据库⸺无须配置复杂的数据管道,就可进行增量计算。其配置过程十分简单,只须通过标准 SQL 视图来描述计算,然后将 Materialize 连接到数据流即可。
  • Pulumi。尽管 Terraform 是一个久经考验的常备选项,但其声明式编程特 质,深受抽象机制不足和可测试性有限的困扰。如果基础设施完全是静态的,那么 Terraform 就够用了。但是动态基础设施但定义,要求使用真正的编程语言。Pulumi 允许以 TypeScript/ JavaScript、 Python 和 Go 语 言(无需标记语言或模板)编写配置信息,这使其脱颖而出。
  • Tekton。Tekton 是一个诞生不久的 Kubernetes 原生平台,用于管理持续集成和交付(CI/CD)管道。
  • 基于IP协议栈的信任。

暂缓

  • Node 泛滥。JS一把梭不可取,不可取。由于单线程的特点,Node.js 从来就不是计算密集型任务的理想选择。

工具

采纳

  • Airflow。Airflow 是一个开源工作流管理工具,用于构建作为有线无环图(DAGs)的数据处理流水线。这是一个蓬勃发展的领域,开源工具有 Luigi 和 Argo,厂商工具则有 Azure Data Factory 或者 AWSData Pipeline。
  • Bitrise。Bitrise,一款用于移动应用的领域特定 CD工具。Bitrise 能够构建,测试和部署移动应用,从开发者的笔记本电脑一直到应用商店的发布。
  • Dependabot。Dependabot 跟 GitHub 的集成平滑。如果选择替代品,你可以考虑 Renovate。
  • Helm。Helm 是用于 Kubernetes 的包管理器。它附带一个专为 Kubernetes 应用甄选过的仓库,维护于 Charts 的官方库中。
  • Trivy。跟 Clair 不一样,Trivy 不止会检查容器,而且会检查代码库中的依赖。同时,它是一个独立的二进制包,所以更容易在本地设置和运行。还有,它是开源软件。

试验

  • Bokeh。Bokeh 是 Python 中最重要的库之一,通过JavaScript 在浏览器中的渲染,它可以用于科学绘制和数据可视化。与创建出静态图像的桌面工具相比,这样的工具更易于在 web应用探索中重用代码。
  • Concourse。要实现可持续跨多环境构建和部署生产软件的持续交付流水线,需要一种将构建流水线和工件视为一等公民的工具。
  • Dash。Dash 增强了Python 数据类库,就像 Shiny 之于 R。Dash 尤其适合构建可伸缩的,随时可上线的应用,这跟同门类中另一个工具 Streamlit 不同。当你需要为商业用户呈现更复杂的分析功能时,请考虑使用 Dash,如果只是少量甚至零代码的方案,你可以选择Tableau。
  • jscodeshift。jscodeshift,一个可以重构 JavaScript 和 TypeScript 的工具,能把你的代码分析成抽象语法树(AST),并提供 API 通过不同的变换(也就是在既有的组件上添加、重命名以及删除属性)操作这棵树,然后把这棵树导出成最终源代码。
  • Kustomize。Kustomize 是一个管理和定制 Kubernetes清单文件的工具。它能让你在把 Kubernetes基础资源应用到不同环境之前,选择和修补它们。
  • MLflow。MLflow 是一款用于机器学习实验跟踪和生命周期管理的开源工具。
  • Pitest。推荐在 Java 项目中使用它,用于衡量测试套件的健康程度。变异测试会给生产代码引入一点变化,然后再次执行相同的测试;如果测试仍 然是绿色的,意味着测试不够好仍然需要改进。
  • Sentry。Sentry 是一款跨平台应用监控工具,并聚焦在错误报告。
  • ShellCheck。使用 Shell-Check 来简化 shell 脚本的编写。
  • Stryker。与 Pitest 相似,Stryker 可以让你评估测试质量。除开JavaScript 项目,它也支持 C# 和 Scala 项目。
  • Terragrunt。它是基于 Terraform 的一个很薄的包装层,实现了 Yevgeniy Brikman的 Terraform: Up and Running 倡导的实践。Terragrunt 鼓励多环境的版本化模块和可复用性。
  • tfsec。扫描 Terraform 模板并发现潜在安全问题的静态分析工具。
  • Yarn。Yarn 2引入了 zero-installs 的概念,可以让开发者在克隆项目后直接运行项目。

评估

  • CML。CML 致力于把持续集成和持续交付的最佳工程实践引入到 AI 和 ML 的团队,同时帮助你在传统的软件工程技术栈之上组织你的 MLOps。
  • Eleventy。一直信赖使用静态网站生成器来避免复杂性,并提升性能。对标Gatsby.js。它的模板功能,可以方便地创建出语义标签(自然可访问性也更高),而且它对翻页的支持简单又智能。
  • Flagger。服务网格和 API 网关为流量路由到不同的微服务提供一个方便的方法,只要这些微服务都实现了相同的 API 接口。Flagger 利用这个特性,可以做到动态调整路由到某个新版本服务的部分流量。这对于金丝雀发布或者蓝绿部署是一项通用的技术。
  • gossm 是一个开源的 CLI 工具,可以更方便地使用AWS会话管理器。让你通过 ssh 或者 scp 这样的工具,在终端直接利用会话管理器的安全机制和IAM 策略。
  • Great Expectations。它在CD4ML领域,可以帮助你在数据流水线中,编制内建控件用于标记异常和质量问题。
  • k6。它是性能测试生态环境中比较新的一款工具。k6 命令行运行器执行 JavaScript编写的脚本,并让你配置执行时间和虚拟用户的数目。
  • Katran。layer 4负载均衡器。相对于 L7 负载均衡器上的循环DNS 技术,或者网络工程师通常用于解决类似挑战的 IPVS 内核模型,可以把 Katran 看作一个更灵活和有效的选择。
  • Kiali。Kiali 提供了一个图形化用户界面,用于观察和控制使用 Istio 部署 的服务网络。还有,Kiali它能让我们向某个服务网格人工注入网络错误,以测试面临网络中断时的弹力。
  • LGTM。这是一个专注于安全的静态代码分析工具,以 CodeQL 查询语言实现了(部分开放源代码的)安全编码规则。LGTM 适用于Java、Go、JavaScript、Python、C#及C/C++,并可以将白盒安全检查集成到持续集成流水线中。
  • Litmus。Litmus 是一个低门槛的混沌工程工具。它可以用很低的代价往你的 Kubernetes 集群中注入各种各样的错误。
  • Opacus 是一个 Python 的新库,可以结合 PyTorch 使用,来帮助阻挡某种类型的差分隐私攻击。
  • OSS Index。OSS Index是一套免费的开源组件目录,以及设计用来帮助开 发者识别漏洞、了解风险并确保软件安全的扫描工具。
  • Playwright。用于Web UI 测试。让我们拭目以待,毕竟现在 Chrome DevTools Protocol 作为自动操作浏览器的通用 API,正在获得越来越多的支持。
  • pnpm。pnpm 是一款很有前途的 Node.js 包管理器,所有依赖被保存在磁盘上的唯一位置,并链接到各自的node_modeles目录。
  • Sensei。来自 Secure Code Warrior 的 Sensei 是一款可以很容易地创建和分发安全代码质量规则的 Java IDE 插件。
  • Zola 是用 Rust 编写的静态网站生成器。它是一个没有依赖的可执行文件,执行速度非常快,并且支持你期望的所有常用功能,例如,支持 Sass、markdown 和热加载。

暂缓

NO

语言 & 框架

采纳

  • Arrow。Arrow 的推广语是“Kotlin标准库的函数式伴侣”。
  • jest-when。一个轻量级的 JavaScript 库,为Jest 提供匹配模拟函数入参的能力。

试验

  • Fastify。这个 web 框架提供了方便的请求-响应验证处理,支持TypeScript,以及为团队提供更轻松的开发体验的插件生态系统。
  • Immer。Immer (在德语中是永远的意思)是一个极小的包,它可以让你用更加便利的方式处理不可变状态。基于写时复制(copy-on-write)机制进行工作,具有最小化的 API,而且只操作普通的JavaScript 对象和数组。这意味着其数据访问是无缝的,不需要做大规模重构就能把不可变性引入到现有代码库中。
  • Redux。React 最新版本中的功能已经可以有效地管理状态,而无需引入其他框架。但需要着重强调的是,当简单的状态管理解决方案开始变得复杂时,仍然可以考虑使用 Redux,或者是 Face-book 最近发布的 Recoil。
  • Rust。Rust 开始用于数据科学和机器学习,并能显著提高性能。同时,用 Rust 编写的面向流的低延迟数据库 Materialize 也应运而生。
  • single-spa。single-spa 是个 JavaScript 框架,它把多个微前端集成为一个前端应用。
  • Strikt。Strikt 是一个可以让你以非常流畅的风格编写测试断言的断言库。它使用Kotlin 的 blocks 和 lambdas,帮助你的测试不那么冗长,以保持可读性。
  • XState。可以创建有限状态机并可视化为状态图。

评估

  • Babylon.js。Unity 和 Unreal是两个用于开发 VR 应用的成熟又强大的引擎。还有 Godot。基于web 的 VR 方案已经取得巨大进展,其中 Babylon.js 是用 TypeScript 编写并在浏览器中渲染出它的应用。
  • Blazor。它可以使用 C# 来构建交互式 Web UI。它能让我们在浏览器中基于 WebAssembly 运行 C# 代码,从而利用 .NET 标准运行时环境和生态系统以及它的各种自定义库。
  • Flutter Driver。Flutter Driver 是 Flutter 应用的集成测试库。编写单元测试和 widget 测试,以确保Flutter 应用的大部分业务功能已被实现。
  • HashiCorp Sentinel。如果你在使用 HashiCorp 产品(比如 Terraform 或 者 Vault ),并且不介意为企业版本付费,那就可以使用 HashiCorp Sentinel事实上,Sentinel 是一门完整的编程语言,用来定义和实现基于上下文的策略决策。
  • Hermes。Hermes 将 JavaScript 代码提前编译(AOT)为优化的字节码。
  • io-ts。io-ts 的编码和解码函数,将编译时类型检查与运行时消费外部数据结合在一起。
  • Kedro。Kedro 是用于数据科学项目的开发工作流框架,为构建生产用数据和机器学习管道带来了标准化的方法。
  • LitElement。作为Polymer 项目的一部分,LitElement 是一个简单的库,你可以使用它创建轻量级 web 组件。
  • Mock Service Worker。在浏览器中拦截各种请求,这种由 Mock Service Worker 带来的方式也不错,因为 Service Worker 是前端开发人员比较熟悉的抽象层。这种方法可以简化设置,并且执行得也更快。不过,由于这些测试没有测到真正的网络层,所以还要实现一些端到端测试。
  • Recoil。对标redux。ecoil 为应用间共享状态提供了一个有效而灵活的办法:它支持从派生数据和查询动态地创建状态,并在不损害代码分割的情况下,实现整个应用范围内的状态监控。
  • Snorkel。Snorkel 始于斯坦福 AI 实验室,开发者们意识到手动标记数据非常昂贵,而且通常不可用。Snorkel 使我们可以通过创建标记函数的方式自动对训练数据进行标记。Snorkel 采用监督式学习技术来评估这些标记函数的准确性和相关性,然后重新赋权并组合输出标签,从而生成高质量的训练标签。
  • Streamlit。Streamlit 专注于快速原型设计,并且支持各种不同的可视化库(包括 Plotly 和Bokeh),因此在Dash等竞品中脱颖而出。
  • Svelte。与使用虚拟 DOM 的框架不同,Svelte 将代码编译为单纯的无框架JavaScript 代码,这些代码可以直接操作更新 DOM。可以结合sapper使用。
  • SWR。SWR 是用于获取远程数据的 React Hooks库,它实现了 stale-while-revalidate HTTP 缓存策略。SWR 首先从缓存(过时的)中返回数 据,然后发送获取请求(再验证)并最终用更新的响应数据刷新数值。
  • Testing Library。Testing Library 是用于在众多框架(如React,Vue,React Native 以及 Angular)中测试应用程序的软件包集。鼓励测试用户行为,而非实现细节

暂缓

NO