dot Redis 8 发布了——而且它是开源的

了解更多

为您的微服务架构选择实时数据层

微服务架构可以更快地发布新产品,更轻松地扩展,并更好地响应客户需求。凭借其多种现代数据模型、任何场景下的容错能力、实现隔离的多租户以及跨多种环境部署的灵活性,Redis 使开发人员和运维人员能够针对微服务架构优化其数据层。

https://www.youtube.com/embed/1ybaY27uZA0?si=c2lCcSDcipPAbety

什么是微服务架构?

正如著名的微服务专家 Chris Richardson 所定义的那样,微服务架构是一种将应用程序构建为一组松散耦合的服务(这些服务高度可维护和可测试、可独立部署、受特定业务领域限制并由小型团队拥有)的架构风格。微服务架构能够快速、频繁且可靠地交付大型复杂应用程序。 

微服务为何重要

基于微服务的应用支持战略性的数字化转型和云迁移计划

微服务是一种架构风格,它帮助开发团队更快地创建更好的软件,并最大限度地降低应用程序现代化的成本和复杂性。因此,微服务架构已在各行各业得到采用,既适用于那些可被称为“数字化转型计划”的项目,也适用于更普通但重要的任务,例如启动云部署。 

这种架构风格及其相关的软件开发文化使微服务开发团队能够按照自己的发布周期运行,拥抱端到端的产品所有权,并采用基于持续集成/持续交付的 DevOps 框架。结果是,企业可以缩短新服务开发的上市时间,通常从以月为单位的项目缩短到以天为单位。 

微服务加速了数据层云迁移。这是因为它们主要依赖于云原生的 NoSQL 数据库。根据 2021 年 IDC InfoBrief 调查显示,NoSQL 数据库正在取代那些并非为云或独立发布周期而构建的本地关系型数据库。 

此外,一些组织无法一次性将其遗留的单体应用完全迁移到云原生环境。微服务支持将子域从单体架构逐步迁移到现代技术堆栈。

微服务的理想解决方案

微服务规模下的性能

在微服务环境中,需要实时运行的服务必须补偿网络开销。企业级 Redis 为所有 Redis 数据类型和模型提供亚毫秒级延迟。此外,它可以即时、线性地扩展到几乎任何所需的吞吐量。

为容错和弹性而设计

为了确保您的应用程序具有故障恢复能力,Redis 采用无共享集群架构。它在各个层面都具有容错能力:在进程级别、单个节点级别以及跨基础设施可用区都提供自动化故障转移。它还包括可调整的持久化和灾难恢复功能。

通过快速灵活的数据模型降低复杂性

Redis 允许开发人员选择最适合其微服务架构和领域驱动设计性能及数据访问需求的数据模型,同时通过在单个数据平台上的多租户部署保持隔离。 

通过原生 Kubernetes 部署简化运维

Redis 提供统一的运维界面,减少技术蔓延,简化运维,降低服务延迟。Kubernetes 的 Redis Operator 提供一致的自动化部署,以降低风险。这使得开发团队能够专注于创新和业务价值。

跨云和跨地域适应

选择您的数据库应该在哪里运行。Redis 可以在任何地方部署:在任何云平台、本地环境,或在多云或混合云架构中。

微服务架构的设计模式

微服务查询缓存

隔离或边界上下文是微服务架构的一个重要特征。作为领域驱动设计的一部分,每个服务都可以拥有一个专用的数据库,该数据库具有自己独特的数据模型和服务级别协议性能目标。查询缓存是常用的缓存模式,用于减少微服务响应时间,其工作原理是在每个微服务旁边部署一个 Redis 缓存,以交付单个业务上下文所需的数据。(也就是说,它只为一个微服务提供服务。) 

Redis 智能缓存是一个开源库,它可以无缝地为任何符合 JDBC 的平台、应用程序或微服务添加缓存,提高查询性能,同时降低运维复杂性——而且您无需更改应用程序代码。 Redis 支持多种数据模型,这些模型可以轻松地进行多租户部署,同时保持隔离,所有这一切都不会牺牲性能。

了解更多

通过 CQRS 缓存跨领域共享数据

微服务需要快速访问数据,但这在数十或数百个微服务尝试从同一个缓慢的基于磁盘的数据库读取数据时可能是一个挑战。跨领域数据需要实时提供给每个微服务——并且这样做不会打破其专注的业务上下文和目标的范围。

命令查询职责分离 (CQRS) 是微服务架构中一个关键的预取缓存模式,它解耦了读取(查询)和写入(命令)。这使得应用程序可以将数据写入较慢的基于磁盘的 SQL 数据库,同时使用 Redis 中集成的变更数据捕获 (CDC) 功能预取和缓存该数据,以实现极快的读取速度。这样做可以使该数据立即提供给需要它的其他微服务。

了解更多

API 网关缓存全局数据

微服务应用程序可以在 API 网关级别缓存全局访问的数据,以分发并加速所有服务访问的数据。这通常包括会话数据(例如用户 ID 和偏好设置)以及身份验证数据(令牌、授权状态、权限)。这使得所有服务都能实时获取常用数据。结果是什么?在不打破每个微服务业务上下文边界的情况下,降低应用程序延迟。

速率限制,即在特定时间段内计量 API 请求的数量,也可以使用 Redis 在 API 网关实现。这可以防止系统过载并阻止 DDoS 攻击。

用于服务间通信的异步消息传递 

微服务必须在不破坏隔离的情况下相互通信状态、事件和数据,并且必须保持解耦。一个常见的解决方案是将发布-订阅消息代理引入架构——即,使服务间通信事件驱动并最终保持一致——并将微服务之间的每条消息视为一个事件。

Redis Streams 是一种不可变的、按时间顺序排列的日志数据结构,它使服务(生产者)能够发布异步消息,多个消费者可以订阅这些消息。它可以配置为处理不同的交付保证,支持消费者组,并应用其他与 Apache Kafka 主题分区相当的功能。更棒的是,Redis Streams 有助于在后端创建报告、分析、审计和取证分析。

了解更多

适用于微服务架构的 Redis 功能

主-主复制 (Active-Active Replication)

微服务架构包含许多相互连接的服务,但它面临与单体应用相同的性能要求。为了最大限度地减少延迟,数据应尽可能靠近服务。您还需要确保数据库在发生故障或更新冲突时相互保持一致。Redis 可以部署为主-主、无冲突的复制数据库,以处理来自您服务的多个本地安装的更新,而不会损害延迟或数据一致性,并在发生故障时提供连续性。

多种数据模型

Redis 提供了多种数据结构(哈希、字符串、流、列表等)和模型,包括 JSON、搜索、时序和图,让您可以选择最适合您的微服务领域、性能和数据访问需求的数据模型。所有这一切都在一个单一的数据平台中。

多租户数据库

在微服务架构数据库设计中,一个单一的 Redis 集群可以为许多不同的服务提供数据库,每个服务都有自己独立的实例,并针对给定的工作负载进行了调优。每个数据库实例都可以独立于其他实例进行部署、扩展和建模,同时利用相同的集群环境,在服务之间隔离数据而不会增加运维复杂性。

跨云灵活部署

微服务提供了极大的技术灵活性,选择数据库运行位置也应如此。Redis 可以部署在任何地方:任何云平台、本地环境,或多云或混合云架构中。它也支持 Kubernetes、Pivotal Kubernetes Service (PKS) 和 Red Hat OpenShift。

原生 Kubernetes 容器编排和管理

容器与企业实施微服务应用密切相关并提供帮助。Kubernetes 是容器部署、调度和编排的事实标准平台。Redis 是运行在容器上的顶级数据库技术,Docker Hub 下载量超过 20 亿次。Kubernetes 的 Redis Operator 提供:自动扩展性、持久存储卷、简化的数据库端点管理和零停机滚动升级。它支持多种 Kubernetes 平台和云托管服务,包括 RedHat OpenShiftVMware Tanzu Kubernetes Grid(前身为 Enterprise PKS)上游 Kubernetes,以及 Azure Kubernetes Service (AKS)、Google Kubernetes Engine (GKE) 或 Amazon Elastic Kubernetes Service (EKS)。

常见问题

  • 什么是微服务?
    • 微服务架构(通常简称为微服务)是指一种用于开发应用程序的架构风格。微服务允许将一个大型应用程序拆分成更小的独立部分,每个部分都有自己的职责范围。为了服务单个用户请求,基于微服务的应用程序可以调用许多内部微服务来组合其响应。
  • 单体架构和微服务架构有什么区别?
    • 在单体架构中,进程紧密耦合并作为一个可部署的单一制品运行。虽然这最初相对简单,但扩展或修改微服务应用程序的一部分需要更新整个服务,随着代码库规模的增长,这会导致效率低下的可扩展性和增加的复杂性。 
      • 微服务架构涉及一组松散耦合的服务,这些服务可以由小型团队独立更新和扩展。由于单个服务比单一的单体应用程序更容易构建、部署和管理,微服务使得部署更加频繁,数据存储更加自主,并增加了灵活性。
      • 组织正在将其整个应用程序迁移到微服务架构,以大幅缩短上市时间,更容易采用新技术,并更快地响应客户需求。
  • 什么是 Kubernetes?
    • Kubernetes,也称为 k8s,是一个开源的编排系统,用于自动化容器化应用程序的部署、扩展和管理,通常作为微服务和云原生架构的一部分使用。 
  • 什么是 Docker 容器?
    • Docker 容器镜像是轻量级、独立的、可执行的软件包,其中包含运行应用程序所需的一切。
  • 什么是 API 网关?
    • API 网关是一种用于 API 管理的软件应用程序,它位于客户端和一组后端微服务之间。API 网关充当反向代理,接收来自客户端应用程序的 API 调用,并将此流量转发到适当的服务。