背景与需求
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 技术实现了高效的数据处理和实时通信,未来还将继续扩展功能以满足编辑人员的需求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。