在这篇文章中,我们将讨论以下话题:

  • 9 大数据和通信流架构模式
  • Netflix 如何使用 Java
  • 6 大云消息模式
  • 最重要的 AWS 服务

9 大数据和通信流架构模式

  1. 点对点(Peer-to-Peer) 点对点模式涉及两个组件之间的直接通信,无需中央协调器

  2. API 网关 API 网关充当所有客户端请求到应用程序后端服务的单一入口点

  3. 发布 - 订阅(Pub-Sub) 发布 - 订阅模式通过消息代理将消息生产者(发布者)与消息消费者(订阅者)解耦

  4. 请求 - 响应 这是最基本的集成模式之一,客户端向服务器发送请求并等待响应

  5. 事件溯源 事件溯源涉及将应用程序的状态变化存储为事件序列

  6. ETL ETL 是一种数据集成模式,用于从多个来源收集数据,将其转换为结构化格式,并加载到目标数据库

  7. 批处理 批处理涉及在一段时间内累积数据或直到满足某个阈值,然后将其作为单个组进行处理

  8. 流处理 流处理允许实时连续摄取、处理和分析数据流

  9. 编排 编排涉及中央协调器(编排器)管理分布式组件或服务之间的交互,以实现工作流或业务流程

Netflix 如何使用 Java

Netflix 主要是一个 Java 商店。

Netflix 的每个后端应用程序(包括内部应用、流媒体和电影制作应用)都是 Java 应用。

然而,Java 栈不是静态的,多年来经历了多次迭代。

Java 栈的演变

以下是这些迭代的详细信息:

1. API 网关

Netflix 遵循微服务架构。每个功能和数据都由使用 Java(最初是版本 8)构建的微服务拥有。

这意味着渲染一个屏幕(如电影列表或 LOLOMO)涉及从数十个微服务获取数据。但从客户端进行所有这些调用会产生性能问题。

Netflix 最初使用 API 网关模式,使用 Zuul 来处理编排。

2. 使用 Groovy 和 RxJava 的 BFF

为多个客户端使用单个网关对 Netflix 来说是个问题,因为每个客户端(如电视、移动应用或 Web 浏览器)都有细微差别。

为了解决这个问题,Netflix 使用了后端 - 前端(BFF)模式。Zuul 被移到代理角色。

在这种模式中,每个前端或 UI 都有自己的迷你后端,执行多个服务的请求扇出和编排。

BFF 使用 Groovy 脚本构建,服务扇出使用 RxJava 进行线程管理。

3. GraphQL 联合

Groovy 和 RxJava 方法需要 UI 开发人员在创建 Groovy 脚本方面做更多工作。此外,响应式编程通常很难。

最近,Netflix 转向 GraphQL 联合。使用 GraphQL,客户端可以指定它需要哪些字段,从而解决 REST API 的过度获取和获取不足问题。

GraphQL 联合负责调用必要的微服务来获取数据。这些微服务称为域图服务(DGS),使用 Java 17、Spring Boot 3 和 Spring Boot Netflix OSS 包构建。从 Java 8 迁移到 Java 17 带来了 20% 的 CPU 增益。

最近,Netflix 开始迁移到 Java 21,以利用虚拟线程等功能。

6 大云消息模式

服务之间如何通信?下图显示了 6 种云消息模式。

1. 异步请求 - 回复

此模式旨在为长时间运行的后端任务提供确定性。它将后端处理与前端客户端解耦。

在下图中,客户端向 API 发出同步调用,触发后端的长时间运行操作。API 返回 HTTP 202(已接受)状态码,确认请求已接收进行处理。

2. 发布者 - 订阅者

此模式旨在将发送者与消费者解耦,并避免阻塞发送者等待响应。

3. 声明检查

此模式解决大消息的传输问题。它将整个消息负载存储到数据库中,并仅传输消息的引用,该引用将用于稍后从数据库检索负载。

4. 优先级队列

此模式优先处理发送到服务的请求,以便更高优先级的请求比较低优先级的请求更快地接收和处理。

5. Saga

Saga 用于在分布式系统中管理多个服务之间的数据一致性,特别是在每个服务管理自己数据库的微服务架构中。

Saga 模式解决了在不依赖分布式事务的情况下维护数据一致性的挑战,分布式事务难以扩展并可能对系统性能产生负面影响。

6. 竞争消费者

此模式使多个并发消费者能够处理在同一消息通道上接收的消息。无需在消费者之间配置复杂的协调。但是,此模式不能保证消息顺序。

参考:Azure 消息模式

最重要的 AWS 服务

自 2006 年成立以来,AWS 已从 S3 和 EC2 等简单产品迅速发展成为一个庞大、多功能的云生态系统,拥有超过 200 项服务,为 190 个国家的数十万家企业提供动力。

对于新人和经验丰富的专业人士来说,驾驭广泛的 AWS 服务都不是一件小事。

从计算能力、存储选项和网络功能到数据库管理、分析和机器学习,AWS 提供了各种工具,理解和掌握这些工具可能令人生畏。

每项服务都针对特定需求和用例量身定制,不仅需要深入了解服务本身,还需要了解它们在 IT 生态系统中的交互和集成方式。

附图可以作为起点和快速参考,帮助任何人揭开 AWS 的神秘面纱,并将精力集中在最重要的服务上。

它提供了一个视觉路线图,概述了支撑云计算基础的基础服务,以及满足无服务器架构、DevOps 和机器学习等特定需求的高级服务。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP107: Top 9 Architectural Patterns for Data and Communication Flow

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。