【虹科干货】如何构建弹性、高可用的微服务?

news2024/11/15 14:05:55

基于微服务的应用程序可实现战略性数字转型和云迁移计划,对于开发团队来说,这种架构十分重要。那么,如何来构建弹性、高可用的微服务呢?Redis Enterprise给出了一个完美的方案。

文况速览:

- 什么是微服务架构?
- 为什么微服务很重要?
- Redis Enterprise:微服务的完美方案
- 微服务架构的设计模式
- 适合微服务架构的Redis 企业功能

一、什么是微服务架构

正如著名的微服务专家 Chris Richardson 所定义的那样,微服务架构是一种将应用程序构建为低耦合服务集合的架构风格,这些服务具有高度的可维护性和可测试性,可独立部署,受特定业务领域的约束,并由小型团队负责。微服务架构可以快速、频繁、可靠地交付大型复杂应用程序。
Monolith架构 vs. 微服务架构
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 平台和云托管服务上使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1111017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

介绍argparse的使用【Python标准库】

文章目录 简介argparse标准库的核心功能介绍Python代码示例参考 简介 argparse 模块是Python标准库中的一个模块,用于处理命令行参数解析。它的主要作用是帮助开发者创建命令行界面,允许用户指定运行脚本时的参数,从而定制脚本的行为。本篇博…

1019hw

登录窗口头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QToolBar> #include <QMenuBar> #include <QPushButton> #include <QStatusBar> #include <QLabel> #include <QDockWidget>//浮动窗口…

2023年中国城市交通数智化发展趋势分析:城市交通数智化渗透率将达到31.0% [图]

城市交通数智化是指将自动化技术、信息技术、通信技术、数字化和智能化技术综合应用于城市交通管理领域&#xff0c;建立实时、准确、高效的城市交通管理体系&#xff0c;提升城市交通管理能力和通行效率。城市交通数智化主要应用场景包括在城市道路、交叉口、隧道、快速路、交…

React TypeScript安装npm第三方包时,些包并不是 TypeScript 编写的

npm install types/包名称 例如&#xff1a;npm install types/jquery 学习链接

C1N短网址 | 核心专利(2) - 防止程序脚本访问短链接

1. 短链接介绍 短链接是一种缩短了URL长度的链接&#xff0c;通常由网址缩短服务提供商生成。短链接可以将长URL缩短为更短的URL&#xff0c;使其更易于分享和传播。短链接通常由一些字母、数字和特殊字符组成&#xff0c;可以通过点击或复制粘贴来访问原始的长URL。短链接在社…

Spring Security认证流程分析(6)

1、认证流程分析 Spring Security中默认的一套登录流程是非常完善并且严谨的。但是项目需求非常多样化, 很多时候&#xff0c;我们可能还需要对Spring Secinity登录流程进行定制&#xff0c;定制的前提是开发者先深刻理解Spring Security登录流程&#xff0c;然后在此基础之上…

竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

Halcon 中查看算子和函数的执行时间

1、在Halcol主窗口的底栏中的第一个图标显示算子或函数的执行时间&#xff0c;如下图&#xff1a; 2、在Halcon的菜单栏中选择【窗口】&#xff0c;在下拉框中选择【打开输出控制台】&#xff0c;进行查看算子或函数的执行时间&#xff0c;如下图&#xff1a;

「神奇的锚点定位:探索UniApp中实现滚动定位效果,与1024程序员节同欢,解析技术之美」

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 文章简介 &#x1f4d8; 文章背景 &#…

小程序中如何使用自定义组件应用及搭建个人中心布局

一&#xff0c;自定义组件 从小程序基础库版本 1.6.3 开始&#xff0c;小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的…

【Godot引擎开发】简单基础,外加一个小游戏DEMO

博主&#xff1a;_LJaXi 专栏&#xff1a; Godot | 横版游戏开发 Godot 物体规律移动内置虚函数浮点计算浮点数计算数组APIInput单例与自定义单例节点NodeSprite2DArea2DCollisionShape2DKinematicBody2DRigidBody2D Pong游戏场景安排玩家1玩家2小球记分系统文件概要 下面是介绍…

软件工程与计算总结(二十一)软件维护与演化

一.软件维护 1.软件可修改性和软件维护 产品交付给用户并投入运营之后&#xff0c;接下来的工作被看做软件维护。 因为软件不存在“磨损”的情况&#xff0c;所以与其他工程学科相比&#xff0c;软件维护只需要完成少量的使用帮助、故障解决等工作——但并不意味着维护是简单…

IOday8

#include <head.h>//要发送数据的结构体类型 struct msgbuf {long mtype; /* 消息类型*/char mtext[1024]; /* 正文数据 */}; //宏定义正文大小 #define SIZE sizeof(struct msgbuf)-sizeof(long) int main(int argc, const char *argv[]) {key_t key;if((keyft…

oracle-AWR报告生成方法

AWR报告生成方法 1. 以oracle用户登陆服务器 2. 进入到要保存awr报告的目录 3. 以sysdba身份连接数据库 sqlplus / as sysdba4. 执行生成AWR报告命令 ?/rdbms/admin/awrrpt.sql5. 选择AWR报告的文件格式 6. 选择生成多少天的AWR报告 7. 选择报告的快照起始和结束ID 8. 输入生…

Java 对象是什么样子的?

Java 对象是什么样子的&#xff1f; class Student{ int age; String name; }Student s new Student(18, “zhangsan”); 这里的 s 变量&#xff0c;就是我们常说的引用&#xff0c;这里是强引用。指向对象中的 Java对象。 很多人可能认为&#xff0c;堆中存储了 age 18, na…

Linux学习之进程一

目录 一&#xff0c;什么是进程&#xff1f; 1.何为pcb&#xff08;process control block&#xff09;&#xff1f; 2.linux的task_struct 二&#xff0c;了解task_struct的核心字段 标识符 ps指令 getpid指令 ppid&#xff08;parent process id&#xff09; getppid…

DASFAA2023 | 关系数据库和图数据库关键技术融合趋势

编者按&#xff1a; 本期论文导读为大家介绍近年来关系数据库和图数据库关键技术的融合趋势及代表性工作。相关内容来自DASFAA 2023 Tutorial “Fusion of Relational and Graph Database Techniques: An Emerging Trend”&#xff0c;由北京交通大学刘钰博士、中北大学郭青松…

【持续更新】tutorial-Linux-Markdown-etc(Linux、命令、Markdown、md、Tex、LaTex)

1. Linux命令 1.1 常用 查看文件夹下文件数量: ls -l | wc -l7zip: 解压&#xff1a;7z x compressed_file.7z -o/path/to/destination # 注意-o和目标路径是连起来的&#xff0c;没有空格压缩&#xff1a;7z a compressed_file.zip destination_path conda 查看 conda 拥有的…

@JsonCreator(mode = JsonCreator.Mode.DELEGATING) @JsonValue解释

@JsonCreator(mode = JsonCreator.Mode.DELEGATING)public MessageId(Long id) {this.id = id;}<

【中级网络工程师】下午网络配置题

目录 dis ip routing-table 路由表如何查看 静态路由配置&#xff1a; rip和ospf配置 ACL配置 定义ACL过程 关键字traffic-filter inbound 和 traffic-filter outbpund 两种安装模式 DHCP服务 基于全局分配&#xff1a; 基于接口分配&#xff1a; 如何将划分的VLAN和创…