图片

图片

作者 | Rafal Gancarz

译者 | 明知山

策划 | Tina  

英国卫报创建了一个讨论和资产共享工具 Pinboard ,并将其整合到公司使用的各种内容管理平台中。该解决方案使用了一系列技术,包括用于编写业务逻辑的 Typescript、用于执行代码的无服务器服务、API 端点和 GraphQL 服务器,以及用于存储的 AWS RDS(PostgreSQL)。

卫报在制作内容时使用了许多编辑工具,包括 Composer(内容管理系统)和 Grid(图像资产管理系统)。卫报高级软件工程师 Tom Richards 解释了为新闻编辑部创建协作工具的必要性:

在过去的几年里,新闻编辑部的许多数字沟通都是通过电子邮件和聊天进行的。问题在于,考虑到新闻日程的快节奏,在我们的编辑工具之外这样做可能会导致混淆和错误。与此同时,人们普遍认为,在制作过程中提前准备资产(图像和视频)对产出作品更有益。

为了满足编辑人员的需求,一个小团队一直在开发一个工具,该工具将与现有的基于 Web 的工具紧密集成,提供消息传递和资产共享功能。目标是在不创建新的独立工具的情况下将协作功能嵌入到现有工具集中,让编辑可以在生产内容项的上下文之上进行协作。

Pinboard 使用 TypeScript 编写客户端、服务器和基础设施代码。客户端应用程序是用 Preact 和 Emotion 创建的,并使用 Webpack 进行打包。它使用 Apollo 作为 GraphQL 客户端库。在服务器端,使用 AWS Lambda 执行所有业务逻辑,使用 AWS RDS for PostgreSQL 存储用户和项目数据。AWS AppSync,AWS 的托管 GraphQL 服务,用于抽象化各种数据源,包括 Postgres 数据库和其他系统。AWS CDK 和一个 自定义 CDK 包装器 用于基础设施配置,esbuild 用于构建。

图片

Pinboard 的架构(来源:卫报工程博客)

Pinboard 的架构在很大程度上依赖于无服务器组件,Lambda 函数充当了各种不同的角色,包括为嵌入到编辑工具中的客户端应用提供服务、提供 AppSync 解析器、提供电子邮件(使用 SES)和网络推送通知、数据同步和身份验证。

Pinboard 使用 GraphQL 获取和聚合来自多个数据源的数据,避免编写自定义数据聚合层,并充当 API 的适配器门面。GraphQL 不仅支持 查询,还支持 mutation,这些是用于添加 / 修改数据的操作,因此由 GraphQL 服务器按顺序执行,而不是像查询那样并行执行。

GraphQL 提供的第三种操作类型是 GraphQL 订阅,客户端维护与 GraphQL 服务器的长时间连接(通常通过 WebSocket),接收关于后端数据变化的实时通知。AppSync 支持所有这三种 GraphQL 操作类型,并提供了定义订阅服务器端过滤器和订阅失效的能力。它还支持 Pub/Sub API,支持通过 WebSocket 进行 异步消息传递。

图片

AWS AppSync 概览(来源:AWS AppSync 网站)

通过一些内部推广,Pinboard 在卫报内部得到了广泛的采用。开发团队正在努力提供新功能,包括交换编辑文章注释的能力,避免注释被意外添加到正文中而被发布,以及改进的制作 / 增强图像的工作流,用以取代基于电子邮件和附件的工作流。

查看英文原文

https://www.infoq.com/news/2024/03/guardian-pinboard-serverless/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

今日好文推荐

零一万物刷榜,Zilliz 呛声:面向投资人编程;李彦宏称“程序员将会消失”,周鸿祎回怼;TikTok 危在旦夕 | Q资讯

敲了17年代码,我现在连个面试机会都得不到

“微软已经沦落为 OpenAI 的一个 IT 部门”!资源倾斜引发微软内部员工不满、高管离职

90 后华人团队真来砸程序员饭碗了!推出全球首个 AI 超级工程师:拥有全栈技能,一个指令就能完成整个开发过程

图片