【虹科干货】如何构建弹性、高可用的微服务?
基于微服务的应用程序可实现战略性数字转型和云迁移计划,对于开发团队来说,这种架构十分重要。那么,如何来构建弹性、高可用的微服务呢?Redis Enterprise给出了一个完美的方案。
文况速览:
- 什么是微服务架构?
- 为什么微服务很重要?
- Redis Enterprise:微服务的完美方案
- 微服务架构的设计模式
- 适合微服务架构的 Redis 企业功能
一、什么是微服务架构
正如著名的微服务专家 Chris Richardson 所定义的那样,微服务架构是一种将应用程序构建为低耦合服务集合的架构风格,这些服务具有高度的可维护性和可测试性,可独立部署,受特定业务领域的约束,并由小型团队负责。微服务架构可以快速、频繁、可靠地交付大型复杂应用程序。
Monolith架构 vs. 微服务架构
二、为什么微服务很重要
基于微服务的应用程序可实现战略性数字转型和云迁移计划。
1.微服务是一种架构风格,有助于开发团队更快地创建更好的软件,并最大限度地降低应用现代化的成本和复杂性。这种架构风格及其相关的软件开发文化使微服务开发团队能够按照自己的发布周期运作,拥抱端到端产品的所有权,并采用基于持续集成/持续交付的 DevOps 框架。这样的好处是,企业可以缩短新服务开发的上线时间,通常可将以月为单位的项目缩短至以天为单位。
2.微服务可加速数据层云迁移。这是因为微服务主要依赖于云原生 NoSQL 数据库。2021 年 IDC InfoBrief 调查显示,NoSQL 数据库正在取代内部部署的关系型数据库,因为后者不是为云或独立发布周期而构建的。
此外,一些企业无法一次性将其传统的单体应用迁移到云原生应用。微服务可实现子域从单体架构向现代技术栈进行增量迁移。
三、Redis Enterprise:微服务的完美方案
1.微服务规模的性能
在微服务环境中,需要实时运行的服务必须平衡网络开销。Redis Enterprise 为所有 Redis 数据类型和模型提供亚毫秒级延迟。 此外,它可以立即线性扩展,以满足几乎任何吞吐量需求。
2.为容错和恢复而设计
为确保您的应用程序具有故障恢复能力,Redis Enterprise 采用了无共享集群架构。它在各个故障级别都具有容错能力:在进程层面、单个节点甚至跨基础架构可用区自动进行故障切换。它还包括可调整的持久性和灾难恢复能力。
3.利用快速灵活的数据模型降低复杂性
Redis Enterprise允许开发人员为他们的微服务架构和领域驱动设计选择最适合他们的性能和数据访问要求的数据模型,同时在单个数据平台上保持多租户部署的隔离。
4.利用原生 Kubernetes 部署简化操作
Redis Enterprise 提供统一的操作界面,可减少技术学习成本、简化操作并降低服务延迟。
针对 Kubernetes 的 Redis Enterprise 运营商为您提供一致的自动化部署,从而降低风险。这让开发团队能够专注于创新和业务价值。
5.可跨云跨地域适应
Redis Enterprise 可部署在任何地方:任何云平台、内部部署、多云或混合云架构。
四、微服务架构的设计模式
1.微服务查询缓存
独立或有界上下文是微服务架构的一个重要特征。作为领域驱动设计的一部分,每个服务都可以拥有一个专用数据库,该数据库有自己独特的数据模型和SLA(Service Level Agreement,服务水平协议)性能目标。查询缓存是一种常用于缩短微服务响应时间的缓存模式,其工作原理是在每个微服务旁部署 Redis Enterprise 缓存,以提供单一业务上下文中所需的数据。(也就是说,它只服务于一个微服务)。
Redis Smart Cache 是一个开源库,可将缓存无缝添加到任何符合 JDBC 标准的平台、应用程序或微服务中,在提高查询性能的同时降低操作复杂性,而且无需更改应用程序代码。Redis Enterprise 支持多种数据模型,可轻松实现多租户部署,保持数据隔离的同时,不降低性能。
2.通过 CQRS 缓存跨域共享数据
微服务需要快速访问数据,但当数十或数百个微服务试图从同一个缓慢的磁盘数据库中读取数据时,就会产生许多问题。跨域数据需要实时提供给每个微服务,而且不能超出其重点业务环境和目标的范围。
命令查询责任隔离(Command-Query Responsibility Segregation, CQRS)是微服务架构中一种重要的预取缓存模式,它将读取(查询)和写入命令分离开来,这使应用程序能够将数据写入速度较慢的基于磁盘的 SQL 数据库,同时使用 Redis Enterprise 中集成的变更数据捕获(CDC)功能预取和缓存该数据,以实现高速读取。这样,其他需要数据的微服务就能立即获得这些数据。
3.全局数据的 API 网关缓存
微服务应用程序可以在 API 网关级别缓存全局访问数据,以分发和加速所有服务都会访问的数据。通常情况下,这些数据包括会话数据(如用户 ID 和偏好设置)和验证数据(令牌、授权状态和权限)。这样,所有服务都能实时获得频繁请求的数据。结果如何?减少应用延迟,同时不打破每个微服务业务上下文的界限。
在 API 网关上还可以使用 Redis Enterprise 实现速率限制,即在一定时间范围内对 API 请求的数量进行计量。这可以防止系统超载,并防止 DDoS 攻击。
4.用于服务间通信的异步消息传递
微服务必须在不破坏隔离的情况下相互通信状态、事件和数据,而且必须保持解耦。常见的解决方案是在架构中引入发布-订阅消息代理,即让服务间通信由事件驱动并最终保持一致,并将微服务之间的每条消息都视为一个事件。
Redis Streams 是一种不可变的按时间排序的日志数据结构,可让服务(生产者)发布异步消息,多个消费者可订阅这些消息。可以对其进行配置,以处理不同的交付保证、支持消费者群组,并应用与 Apache Kafka 主题分区类似的其他功能。更棒的是,Redis Streams 可帮助在后端创建报告、分析、审计和取证分析。
五、适合微服务架构的 Redis 企业功能
1.双活备份
微服务架构有许相互多连接的服务,但它面临着与单体应用程序相同的性能需求。为尽量减少延迟,数据应尽可能靠近服务。您还需要确保数据库在发生故障或更新冲突时彼此保持一致。Redis Enterprise 可以部署为双活、无冲突复制的数据库,以处理来自多个本地服务安装的更新,而不会影响延迟或数据一致性,并在发生故障时提供连续性服务。
2.多种数据模型
Redis Enterprise 提供多种数据结构(哈希值、字符串、流、列表等)和模型,包括 JSON、搜索、时间序列和图形,可让您选择最适合您的微服务领域、性能和数据访问要求的数据模型,这一切都在一个数据平台中实现。
3.多用户数据库
在微服务架构的数据库设计中,单个 Redis Enterprise 集群可为多个不同的服务提供数据库,每个服务都有自己的独立实例,并针对给定的工作负载进行了调整。每个数据库实例的部署、扩展和建模都独立于其他实例,同时利用相同的集群环境,在不增加操作复杂性的情况下隔离服务之间的数据。
4.灵活跨云
微服务提供了极大的技术灵活性,选择在哪里部署数据库也不例外。Redis Enterprise 可以部署在任何地方:任何云平台、企业内部、多云或混合云架构。它还可在 Kubernetes、Pivotal Kubernetes Service (PKS) 和 Red Hat OpenShift 上使用。
5.本地 Kubernetes 容器编排和管理
容器与企业部署微服务应用程序密切相关,并有助于企业部署微服务应用程序。Kubernetes 是容器部署、调度和编排的标准平台。Redis 是在容器上运行的顶级数据库技术,Docker hub 启动次数超过 20 亿次。用于 Kubernetes 的 Redis Enterprise Operator 提供:自动可扩展性、持久存储卷、简化的数据库端点管理和零停机时间滚动升级。它可在多个 Kubernetes 平台和云托管服务上使用。