《卫报》使用无服务器架构、React和GraphQL创建新闻室协作工具

背景与需求

The Guardian 开发了一个名为 Pinboard 的讨论和资源共享工具,旨在解决新闻编辑室在内容生产过程中沟通和协作的痛点。过去,编辑人员主要通过电子邮件和聊天工具进行沟通,但这些沟通方式与内容生产工具(如内容管理系统 Composer 和图片资源管理系统 Grid)分离,容易导致混乱和错误。此外,内容生产过程中缺乏早期准备资源(如图片和视频)的流程,影响了工作效率。

Pinboard 的目标与功能

Pinboard 的主要目标是将协作功能无缝集成到现有的内容生产工具中,而不是创建一个独立的工具。它提供了消息传递和资源共享功能,使编辑人员能够在内容生产的上下文中进行协作,从而提高效率和减少错误。

技术架构与实现

Pinboard 的技术架构基于多种现代技术,具体包括:

  • 编程语言:TypeScript 用于客户端、服务器和基础设施代码。
  • 客户端应用:使用 Preact 和 Emotion 构建,并通过 Webpack 打包。
  • GraphQL 客户端:使用 Apollo 作为 GraphQL 客户端库。
  • 服务器端:使用 AWS Lambda 执行业务逻辑,AWS RDS for PostgreSQL 存储用户和项目数据。
  • 数据抽象层:使用 AWS AppSync 作为托管 GraphQL 服务,抽象化多种数据源(包括 PostgreSQL 数据库和其他 API)。
  • 基础设施管理:使用 AWS CDK 和自定义 CDK 包装器进行基础设施配置,esbuild 作为构建工具。

无服务器架构

Pinboard 的架构严重依赖无服务器组件,Lambda 函数承担了多种角色,包括:

  • 提供嵌入到编辑工具中的客户端应用。
  • 提供 AppSync 解析器。
  • 发送电子邮件(通过 AWS SES)和 Web 推送通知。
  • 数据同步和身份验证。

GraphQL 的应用

Pinboard 使用 GraphQL 从多个数据源获取和聚合数据,避免了自定义数据聚合层的开发。GraphQL 支持三种操作类型:

  • 查询:用于获取数据。
  • 变更:用于添加或修改数据,按顺序执行。
  • 订阅:用于客户端与 GraphQL 服务器保持长连接,以近乎实时地获取后端数据变化的通知。AWS AppSync 支持所有三种 GraphQL 操作类型,并提供订阅服务器端过滤和订阅失效功能,同时支持通过 WebSocket 进行异步消息传递的 Pub/Sub API。

未来计划

Pinboard 在 The Guardian 内部逐渐获得更多采用,团队计划进一步开发新功能,包括:

  • 提供关于编辑文章的笔记交换功能,避免笔记被意外发布到文章正文中。
  • 改进图片生产和增强的工作流程,取代依赖电子邮件和附件的现有流程。

总结

Pinboard 是一个高度集成的协作工具,旨在提升新闻编辑室的内容生产效率。它通过无服务器架构和 GraphQL 技术实现了高效的数据处理和实时通信,未来还将继续扩展功能以满足编辑人员的需求。

阅读 22
0 条评论