云原生架构模式

本文主要介绍了云原生架构的主要设计模式,讨论了这些模式的优缺点及其适用场景,并探讨了在云计算环境中的应用和挑战。原文: Cloud-Native Architecture Patterns (Part 1),Cloud-Native Architecture Patterns (Part 2)

Bernard Hermant @Unsplash
Bernard Hermant @Unsplash

在云原生环境中构建应用时,软件架构可能会采用略有不同的方法。云原生应用广泛采用微服务形式构建,此外,应用程序应该能在动态调度和容器化环境中运行,以便利用云计算模型的优势。

云原生计算是一种软件开发方法,利用云计算"在现代动态环境(如公共云、私有云和混合云)中构建和运行可扩展的应用程序"。

云环境中软件架构背后的动机是关注点分离,尤其是运行在容器中的模块化软件组件,以下模式有助于实现这一目的。

边车(Sidecar)/插件(Sidekick)

如果想在不同微服务中抽象出主应用程序的某些外围部分,这种模式会很有帮助,这有助于实现服务之间的独立性,打破紧密耦合的组件。

如果应用程序使用相同的语言和库,需要共享生命周期但又能独立部署的服务,那么 Sidecar/Sidekick 模式将是一个有益的选择。如果为每个实例部署 Sidecar 服务的资源成本不值得隔离的优势,那么在应用程序中实施 Sidecar/Sidekick 模式就是一个错误的决定。如下图所示,日志、配置等功能可以抽象到另一个微服务中。该模式与主服务的关系为 1:1

Sidecar/Sidekick 模式
Sidecar/Sidekick 模式
大使(Ambassador)

大使模式通常用于扩展现有服务的网络能力,尤其是在该服务已经过时或复杂到需要修改的情况下。

大使服务可被视为与客户端同处一地的进程外代理。

通过这种模式增加额外代理会带来延迟。与 Sidecar 不同,这种模式可用于多种服务,有助于增强传统服务的连接功能。因为 Ambassador 模式有代理开销,如果对低延迟要求很高,那么这种模式就不是个好选择。

大使模式
大使模式
分散(Scatter)/聚合(Gather)

这种模式适用于使用冗余服务的传统应用,其主要思想是建立一个聚合器,汇总来自不同服务的响应,并提供最佳响应。这种模式可以很好的控制流向其他服务的消息流。

分散/聚集模式
分散/聚集模式
BFF(Backends For Frontend)

这种模式的要点是在前端和真正的后端之间再做一层后端,就是所谓的BFF(Backend For Frontend),是在广泛应用的最流行的模式之一。通过添加这一额外层,可以在不同的前端和后端服务之间进行协调,验证来自前端的过滤响应,映射和转换从后端交付的数据模型。

alt
防腐层(Anti-Corruption Layer)

如果系统中有不同的子系统或微服务,它们的语义并不相同,那么这种模式可能会非常有用。防腐层(Anti-Corruption Layer)可以翻译或整合这些服务之间的通信。Eric Evans在《领域驱动设计》(Domain-Driven Design)一书中首次介绍了这一模式。

如果你正在将遗留系统迁移到新系统,因此部分新系统使用了遗留系统的功能资源,那么就很可能出现这种情况。

可能有如下缺点和副作用:

  • 这一额外层引入了更多延迟
  • 这一层也是额外的服务,会占用资源
  • 可维护性、数据一致性、自动缩放以及连接服务的开销也需要被额外关注
ACl 模式
ACl 模式
命令与查询责任分离(CQRS, Command and Query Responsibility Segregation)

这种模式基于数据库读取和更新的 SoC(Separation of Concerns,关注点分离)。在传统架构中,如果读取执行许多查询,而写入执行非常复杂的验证和业务逻辑,就会出现数据复杂性问题。这种读写不对称,具有不同的性能和需求。

这里的解决方案可能是 CQRS,将读写分离成不同的部分,命令用于更新,查询用于读取:

  • 命令必须基于任务("预订酒店房间",而不是"将预定状态设为已预订")。
  • 通过异步通信执行命令
  • 查询从不更改数据库。查询响应的 DTO 不包含业务逻辑。

这种模式的缺点是读写组件保持同步。

CQRS 模式
CQRS 模式
事件源(Event Sourcing)

事件源模式(Event Sourcing Pattern)是近十年来针对 CRUD 应用缺乏一致性的情况而流行的技术之一。与传统 CRUD 应用一样,事件源的主要思想是以仅增加(append-only)的方式保存数据,而不仅仅保存当前状态,从而存储对数据采取的一系列完整操作。这种方式为事务性数据提供了一致性,保持了对历史版本的全面审计控制。

优势:

  • 通过实现强大的数据一致性来提高性能
  • 使用事件存储简化数据版本的实施和管理
  • 事件对于领域专家来说是可读的,而不仅是让开发人员可以理解
  • 由于事件基于时间排序,可以防止对同一数据进行并发更新
  • 事件存储作为数据操作的单一来源

缺点:

  • 被认为是对小领域应用的过度设计
  • 不适合实时数据驱动型应用

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软如何打造数字零售力航母系列科普12 - 使用Microsoft Fabric将客户数据带入人工智能时代

【世界上充斥着数据,在过去的2年里,我们都看到了人工智能如何有潜力彻底改变我们的日常业务。人们对利用生成性人工智能体验的力量的需求越来越大,但这样做需要一个干净的数据庄园,而且可能会因为各种技术堆栈、分散的团队和无处不…

常见仪表盘指示灯的含义,这次够全了!

汽车是当前主要的交通工具之一,给人们的工作、生活提供了便利。大家在学会开车的同时,也得了解一些基本的汽车常识,可以及时的发现车辆的问题,并作出正确的判断,以此降低车辆的损耗和维修成本。其中最基本的&#xff0…

Redis-重定向

实验环境(3主3从的Redis-Cluster) 一、Redis重定向基础篇 1、MOVED重定向 Redis Custer 中,客户端可以向集群中任意节点发送请求。此时当前节点先对 Key 进行 CRC 16 计算,然后按 16384 取模确定 Slot 槽。确定该 Slot 槽所对应的…

C语言(字符、字符串函数)2

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记,在这里撰写成文一…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与TM1638芯片连接的按键的按键值应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与TM1638芯片连接的按键的按键值应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

⌈ 传知代码 ⌋ 命名实体识别

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

windows操作系统提权之服务提权实战rottenpotato

RottenPotato: 将服务帐户本地提权至SYSTEM load incognito list_tokens –u upload /home/kali/Desktop rottenpotato.exe . execute -Hc -f rottenpotato.exe impersonate_token "NT AUTHORITY\SYSTEM" load incognito 这条命令用于加载 Metasploi…

Pytorch线性回归

使用pytorch来重现线性模型的过程,构造神经网络module,构造损失函数loss,构造随机梯度下降的优化器sgd。 一 revise 首先确定我们的模型,我们希望完成的目标就是得到较小的loss,所以我们就需要一个标量值的loss。 那…

Linux入门攻坚——24、BIND编译安装、Telnet和OpenSSH

BIND编译安装 对于没有rpm包,需要源代码编译安装。 1、下载源代码:bind-9.12.2-P1.tar.gz,解压:tar -xf bind-9.12.2-P1.tar.gz 2、完善环境: 1)增加用户组named:groupadd -g 53 named 2&…

Multipass虚拟机磁盘扩容

Multipass 是一个用于轻松创建和管理 Ubuntu 虚拟机的工具,特别适合开发环境。要使用 Multipass 扩大虚拟机的磁盘容量,你需要经历几个步骤,因为 Multipass 自身并不直接提供图形界面来调整磁盘大小。不过,你可以通过结合 Multipa…

程序员上岸指南

如果你还在996,大小周,感觉身体被掏空,那么你可以看看下面这篇文章,我特意搜集了一些苦逼程序员的上岸教程。 人生真的就是做几道选择题,选错了,忙也是瞎忙。选对了,躺着都能赢。总的来说&#…

MQTT之使用mosquitto

1、下载并安装mosquitto 参考:04 Windows下mosquitto安装_mosquitto-1.6.9-install-windows-x64 windowsserver系-CSDN博客 2、启动 2.1添加用户 .\mosquitto_passwd -c pwfile.example user1 报错信息如下: Error: Unable to open file C:\Program…

Go-Admin后台管理系统源码(GO+VUE)编译与部署

1.克隆源码: # Get backend code git clone https://github.com/go-admin-team/go-admin.git# Get the front-end code git clone https://github.com/go-admin-team/go-admin-ui.git3.下载并安装GO开发环境: 3.编译管理后台后端 # Enter the go-admin backend project cd ./…

深入解析智慧互联网医院系统源码:医院小程序开发的架构到实现

本篇文章,小编将深入解析智慧互联网医院系统的源码,重点探讨医院小程序开发的架构和实现,旨在为相关开发人员提供指导和参考。 一、架构设计 智慧互联网医院系统的架构设计是整个开发过程的核心,直接影响到系统的性能、扩展性和维…

IO流(1)

定义:存取和读取数据的解决方案 作用:用于读写数据(本地文件、网络) 分类: 一种是:输出流和输入流。 一种是:字节流和字符流。 字节流 字节流——FileOutputStream(字节输出流&…

MoeCTF 2022 usb

直接找 URB的第一个输入协议 我们需要提取的数据 HID Data 提取过滤器 tshark -r usb.pcapng -Y "usb.src\"2.2.1\"" -T json >1.json 拿 usbhid.data 字段 tshark -r usb.pcapng -Y "usb.src\"2.2.1\"" -T json -e usbhid.data …

【记录】打印|用浏览器生成证件照打印PDF,打印在任意尺寸的纸上(简单无损!)

以前我打印证件照的时候,我总是在网上找在线证件照转换或者别的什么。但是我今天突然就琢磨了一下,用 PDF 打印应该也可以直接打印出来,然后就琢磨出来了,这么一条路大家可以参考一下。我觉得比在线转换成一张 a4 纸要方便的多&am…

Git常用命令1

1、设置用户签名 ①基本语法: git config --global user.name 用户名 git config --global user.email 邮箱 ②实际操作 ③查询是否设置成功 cat ~/.gitconfig 注:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…

2.1 OpenCV随手简记(二)

为后续项目学习做准备,我们需要了解LinuxOpenCV、Mediapipe、ROS、QT等知识。 一、图像显示与保存 1、基本原理 1.1 图像像素存储形式 首先得了解下图像在计算机中存储形式:(为了方便画图,每列像素值都写一样了)。对于只有黑白颜色的灰度…

OSM历史10年(2014-2024)全国数据下载(路网、建筑物、POI、水系、地表覆盖利用······)

点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 零、前沿 这次向大家介绍一下OSM(OpenStreetMap)十年历史数据(2014—2014)的下载方法。当然我们也下载好分享给大家&#xff…