在这篇文章中,我们将讨论以下话题:
- 9 大数据和通信流架构模式
- Netflix 如何使用 Java
- 6 大云消息模式
- 最重要的 AWS 服务
9 大数据和通信流架构模式
点对点(Peer-to-Peer) 点对点模式涉及两个组件之间的直接通信,无需中央协调器
API 网关 API 网关充当所有客户端请求到应用程序后端服务的单一入口点
发布 - 订阅(Pub-Sub) 发布 - 订阅模式通过消息代理将消息生产者(发布者)与消息消费者(订阅者)解耦
请求 - 响应 这是最基本的集成模式之一,客户端向服务器发送请求并等待响应
事件溯源 事件溯源涉及将应用程序的状态变化存储为事件序列
ETL ETL 是一种数据集成模式,用于从多个来源收集数据,将其转换为结构化格式,并加载到目标数据库
批处理 批处理涉及在一段时间内累积数据或直到满足某个阈值,然后将其作为单个组进行处理
流处理 流处理允许实时连续摄取、处理和分析数据流
编排 编排涉及中央协调器(编排器)管理分布式组件或服务之间的交互,以实现工作流或业务流程
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。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。