云原生架构模式

本文主要介绍了云原生架构的主要设计模式,讨论了这些模式的优缺点及其适用场景,并探讨了在云计算环境中的应用和挑战。原文: 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 多平台发布

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

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

相关文章

【产品经理】总篇章

引言: 在最近频繁的产品职位面试中,我深刻体会到了作为产品需要的不仅仅是对市场和技术的敏锐洞察,更多的是在复杂多变的环境中,如何运用沟通、领导力和决策能力来引导产品从概念走向市场。这一系列博客将分享我多年经历和所学到的所以知识&a…

java —— 集合

一、集合的概念 集合可以看做是一个存储对象的容器,与数组不同的是集合可以存储不同类型的对象,但开发中一般不这样做。集合不能存储基本类型的对象,如果存储则需要将其转化为对应的包装类。 二、集合的分类 集合分为 Collection 和 Map 两…

React-表单受控绑定

概念:使用React组件的状态(useState)控制表单的状态 1.准备一个React状态值 2.通过value属性绑定状态,通过onChange属性绑定状态同步的函数

2024年5月总结及随笔之快乐五一

1. 回头看 日更坚持了517天。 读《天才与算法:人脑与AI的数学思维》更新完成 2023年至2024年5月底累计码字1177253字,累计日均码字2277字。 2024年5月码字95875字,同比增长66.7%,环比增长9.3%,日均码字数3092字&am…

STM32 定时器与PWM的LED控制

学习目标: 1. 使用定时器的某一个通道控制LED周期性亮灭; 2. 采用定时器PWM模式,让 LED 以呼吸灯方式渐亮渐灭。 一、定时器 1、STM32定时器介绍 STMicroelectronics是STM32微控制器中的重要块,具有丰富的外设和功能&#xff0…

Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言: Dijkstra算法博客讲解分为两篇讲解,这两篇博客对所有有难点的问题都会讲解,小白也能很好理解。看完这两篇博客后保证收获满满。 本篇博客讲解朴素Dijkstra算法,第二篇博客讲解堆优化Dijkstra算法Dijkstra求最短路篇二(全网…

知识运维概述

文章目录 知识运维研究现状技术发展趋势 知识运维 由于构建全量的行业知识图谱成本很高,在真实的场景落地过程中,一般遵循小步快走、快速迭代的原则进行知识图谱的构建和逐步演化。知识运维是指在知识图谱初次构建完成之后,根据用户的使用反馈…

小白跟做江科大32单片机之对射式红外传感器计次

原理部分 1中断示意图,中断会打断主函数的执行,终端执行完成之后再返回主函数继续执行 2.STM32中断 这些灰色的是内核中断 这些白色的是普通中断 3.NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组…

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类:(发展史) 1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、…

Filter和ServletContext和Listener

目录 Filter案例 解决全站乱码问题 登录权限校验 ServletContext对象 Listener(监听器) Filter案例 解决全站乱码问题 我们每次访问每个servlet都要书写处理请求和响应乱码的代码,这样代码十分冗余,所以我们可以在过滤中 We…

Java——变量

一、变量介绍 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 1、变量声明和初始化 变量的声明: int a; i…

44-1 waf绕过 - WAF的分类

一、云 WAF 通常包含在 CDN 中的 WAF。在配置云 WAF 时,DNS 需要解析到 CDN 的 IP 上。请求 URL 时,数据包会先经过云 WAF 进行检测,如果通过检测,再将数据包流向主机。 二、硬件IPS/IDS防护、硬件WAF 硬件IPS/IDS防护&#xff…

VS Code 开发小技巧

VS Code的开发小技巧 添加代码片段 平时开发的时候,可以快速创建一个空白的模板。 一个快速生成代码片段的网站:https://snippet-generator.app/ 打开网站,把常用的模板代码复制进去,就会自动生成VS Code可以使用的代码片段了。…

从零到一建设数据中台 - 关键技术汇总

一、数据中台关键技术汇总 语言框架:Java、Maven、Spring Boot 数据分布式采集:Flume、Sqoop、kettle 数据分布式存储:Hadoop HDFS 离线批处理计算:MapReduce、Spark、Flink 实时流式计算:Storm/Spark Streaming、…

2024.05.30更新票星球抢购软件

文章目录 软件功能订阅须知早期代码软件功能 自持自定义搜索演唱会信息支持添加、删除观影人信息支持多账号并发抢票支持捡漏模式支持IP代理订阅须知 订阅后如果有问题,请联系博主,如果不懂可以免费提供讲解和远程服务早期代码 def enter_concert(self):print(u###打开浏览器…

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…

Science:论文写不出来?这三个方法让你一天完成一篇论文

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 众所周知,干了学术研究这一行,论文就是你研究质量和数量的衡量标准,可以说,你的一切“输入”-读文献、做实验、分析数据&#x…

k8s之PV、PVC

文章目录 k8s之PV、PVC一、存储卷1、存储卷定义2、存储卷的作用2.1 数据持久化2.2 数据共享2.3 解耦2.4 灵活性 3、存储卷的分类3.1 emptyDir存储卷3.1.1 定义3.1.2 特点3.1.3 用途3.1.4 示例 3.2 hostPath存储卷3.2.1 定义3.2.2 特点3.2.3 用途3.2.4 示例 3.3 NFS存储卷3.3.1 …

【C语言】柔性数组

前言 你是否听说过柔性数组呢?如果没有的话,就一起了解一下吧。 (没有malloc free calloc realloc 四个函数的前置知识的朋友最好先阅读一下我的“动态内存管理”一文,因为下面会涉及到。) 介绍 C99中,…

python找出100~999之间的水仙花数字

水仙花数字:个位,十位,百位的立方之和等于这个数本身 例如:153 1^35^33^3 for i in range(100, 1000):bw i // 100sw i % 100 // 10gw i % 10if bw ** 3 sw ** 3 gw ** 3 i:print(i)