常见的软件架构风格

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情

以下是最常见的建筑风格:

  1. 整体式:将整个应用程序构建为一个单元,其中所有功能和组件都从一个位置进行管理和服务。整体架构的例子有OnionLayered

优点:易于实施,增强可维护性,因为问题或更新可以在特定模块或层中解决,而不影响整个系统,并且提高可重用性和可扩展性,因为模块可以在不同项目中重用,并且层可以独立扩展或修改。

缺点:由于层之间的数据传输开销以及管理和确保各个模块和层之间的交互和一致性的复杂性而导致的性能问题。

分层架构

2.面向服务(SOA):将系统划分为单独的服务,每个服务提供特定的功能并允许它们进行通信和交互,从而提高每个服务的可重用性并更易于独立管理。SOA 架构的示例有微服务代理无服务器

优点:允许软件快速适应变化,可以随着规模的扩大而正常工作,并让不同的软件系统顺利地相互通信。服务还可以在不同区域重复使用,节省时间和精力。

缺点: 可能很棘手,因为管理所有不同的服务以及它们的交互方式可能会变得复杂。由于服务之间通信的额外步骤,它可能会降低系统性能,但如果发生错误,也可能很难调试。

微服务架构

3. 基于组件:软件是使用不同的模块化组件构建的,每个组件提供特定的功能,并且这些组件可以轻松替换、更新或修改,而不会影响整个系统。基于组件的体系结构的示例有微内核、面向对象插件体系结构。

优点:允许系统演进的灵活性,因为组件可以独立添加或更新,并促进可重用性,因为组件可以在不同的项目中使用。它还支持并行开发,并有可能降低开发成本和时间。

缺点:带来了一些挑战,例如确保组件之间连贯且可靠的交互,这可能很复杂且容易出错。

微内核架构

4.分布式系统:跨多台机器或网络划分和管理软件组件,以提供统一的服务,增强可扩展性和可靠性。分布式系统的例子是点对点基于空间的体系结构。

优点:系统可以通过将负载分配到各个节点来有效地管理负载,降低单点故障的风险,并且通常可以提供针对故障或中断的鲁棒性。

缺点:确保所有节点之间的数据一致性、同步和完整性会变得复杂,特别是在网络分区或故障的情况下。

Space-based架构

5. 事件驱动:旨在响应事件或消息,其中组件执行操作以响应接收到的特定通知,使系统具有反应性并能够处理异步操作。事件驱动架构的示例是发布-订阅事件驱动架构。

优点:允许组件解耦,因为事件的生产者和消费者不需要直接交互,从而增强了可扩展性和可维护性。

缺点:由于事件处理的异步性和不确定性,事件驱动架构中的管理和调试系统可能会很复杂。

事件驱动架构

6.解释器:涉及将高级代码逐行翻译成机器代码,直接执行而不是先编译,提供灵活性,但通常以性能为代价。这些架构包括Python解释器、 JavaScript引擎(如V8)、JVM等。

优点:它允许开发人员在各种硬件平台上运行代码而无需修改,并且由于代码是逐行执行的,因此通常提供更直接的错误处理和调试,从而更容易识别和解决问题。

缺点:由于动态解释代码的开销,它的执行速度比编译语言慢。

解释器架构

7. 以数据为中心:优先考虑数据的管理和利用,确保数据完整性、存储和检索得到优化,系统功能围绕高效的数据处理构建。以数据为中心的架构的示例包括CQRS、事件溯源、KappaLambda架构。

优点:它们确保跨系统的数据一致性,并可以促进详细的审计和历史数据分析,特别是在事件溯源的情况下。它们还允许分离读写工作负载,从而增强某些用例中的性能和可扩展性。

缺点:它们可能很复杂,并且可能会带来系统设计、开发和维护方面的额外开销。确保分布式环境中的数据一致性和管理最终一致性可能具有挑战性。

CQRS架构

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

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

相关文章

Vite5 + Vue3 + Element Plus 前端框架搭建

为了开发一套高效使用的 Vite5 + Vue3 + Element Plus 前端框架,你可以按照以下步骤进行。话不多说,先上演示地址:Vue Shop Vite。 1, 安装开发环境 开发之前,确保你的电脑已经安装了 Node.js(建议使用最新稳定版 LTS),然后安装 Vite CLI。在命令行中运行以下命令: …

信息学奥赛一本通2065:【例2.2】整数的和

2065:【例2.2】整数的和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 83717 通过数: 70665 【题目描述】 求3个整数的和。 输入a、b、c这3个整数,求它们的和。 【输入】 3个整数。 【输出】 三个数的和。 【输入样例】 1 2 3 【输出样…

使用“反向代理服务器”的优点是什么?

反向代理服务器是一种网络架构模式,通常位于客户端和实际服务器之间,用于处理客户端请求并转发到实际服务器。以下是使用反向代理服务器的优点: 1.安全性:反向代理服务器可以提供额外的安全层。通过在反向代理服务器上配置防火墙和…

Prometheus-blackbox

一. 部署 apiVersion: v1 kind: ConfigMap metadata:name: blackbox-confignamespace: monitor data:blackbox.yml: |-modules:http_2xx: # http 检测模块 Blockbox-Exporter 中所有的探针均是以 Module 的信息进行配置prober: httptimeout: 10shttp:valid_http_versions: […

js实现 copy字符串 复制到剪切板

js实现 copy字符串 复制到剪切板 定义方法 function copyStr(str) {var oInput document.createElement(input);oInput.value str;document.body.appendChild(oInput);oInput.select(); // 选择对象document.execCommand(Copy); // 执行浏览器复制命令oInput.className oIn…

Android中的Intent

一.显式Intent 显示Intent是明确目标Activity的类名 1. 通过Intent(Context packageContext, Class<?> cls)构造方法 2.通过Intent的setComponent()方法 3.通过Intent的setClass/setClassName方法 通过Intent(Context packageContext, Class<?> cls)构造方法 通…

羊大师解读,羊奶的口味更适合哪些人群?

羊大师解读&#xff0c;羊奶的口味更适合哪些人群&#xff1f; 羊奶作为一种营养丰富的乳制品&#xff0c;拥有许多独特的品质和口味&#xff0c;备受消费者的青睐。它不仅含有丰富的蛋白质、维生素和矿物质&#xff0c;还具有更易消化的特点&#xff0c;适合许多人群的饮用。…

【KingbaseES】实现MySql函数WEEKS_BETWEEN

WEEKS_BETWEEN CREATE OR REPLACE FUNCTION weeks_between(start_date date, end_date date) RETURNS integer AS $$ BEGIN RETURN EXTRACT(WEEK FROM end_date) - EXTRACT(WEEK FROM start_date); END; $$ LANGUAGE plpgsql IMMUTABLE;结果展示

【C语言】stdbool.h——有关bool的总结

在编程和日常生活中&#xff0c;经常需要一种只能具有两个值之一的数据类型&#xff0c;如是否、开关、真假等&#xff0c;因此&#xff0c;C 有一种bool数据类型&#xff0c;称为booleans。布尔值表示 或true的值false。 C 中的 bool 是大多数语言中的基本数据类型&#xff0…

图片上传下载

数据模型: imageUrl: , <el-form-item label"楼盘图片:" prop"pic" class"uploadImg" v-model"emp.pic"> <el-upload class"avatar-uploader" …

自制java工具实现 ctrl+c+c 翻译鼠标选中文本

前言 本功能的实现基于这篇笔记 http://t.csdnimg.cn/1I8ln&#xff0c;本文阅读过程中有疑惑都可以查看此笔记 实现思路&#xff1a;检测到按压ctrl c c 后&#xff0c;获取当前剪切板文字&#xff0c;调用百度翻译api。 实现结果&#xff1a; 完整代码在最后 实现过程 1 监控…

关于鸿蒙的笔记整理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、关于样式1 . 默认单位 vp2 . 写公共样式 二 、 加载图片三 、 父子组件传值四 、 自定义构建函数 Builder五、构建函数-BuilderParam 传递UI 一、关于样式 1 .…

Java中请求生成唯一追溯TraceId

Java中请求生成唯一追溯TraceId 一&#xff1a;背景 因为是微服务架构,平常日志太多,看日志不太好查,所以想要从一整个链路当中获取一个唯一标识,比较好定位问题&#xff0c; 原理就是从gateway网关将标识传递到下游,下游服务拿到这个标识,响应结束后将traceId反向写入响应体…

[论文笔记] Megtron_LM 0、报错:vscode调试无法传进去参数 launch.json文件获取args参数

解决方法&#xff1a; 配置好launch.json文件后&#xff0c;应该点运行和调试里面的运行按钮。而不是直接点文件右上角的debug。 可以看到terminal中&#xff0c;如果没有正常加载launch.json&#xff0c;则参数中没有args的参数。 如果正常加载&#xff0c;可以看到args的很多…

匿名内部类为什么泄漏,Lambda为什么不泄漏(案例不涉及持外部引用的情况,即:只分析匿名内部类和Lambda内部类情况)

theme: channing-cyan 在Android开发中&#xff0c;内存泄露发生的场景其实主要就两点&#xff0c;一是数据过大的问题&#xff0c;而是调用与被调用生命周期不一致问题&#xff0c;对于对象生命周期不一致导致的泄漏问题占90%&#xff0c;最常见的也不好分析的当属匿名内部类…

Java中的IO与NIO篇----第四篇

系列文章目录 文章目录 系列文章目录前言一、NIO 的非阻塞二、Channel三、Buffer四、Selector前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、NIO 的非阻塞 I…

Java:HeapMemory和DirectMemory配置与使用介绍

目录 一、Heap内存 1、查看Heap内存配置的最大值 2、配置Heap内存最大值的方式 3、配置Heap内存最小值的方式 4、查看已使用Heap内存的方式 5、查看未使用Heap内存的方式 二、Direct内存 1、查看Direct内存配置的最大值 2、配置Direct内存最大值的方式 3、获取Direct…

C++ OpenGL 3D GameTutorial 1:Making the window with win32 API学习笔记

视频地址https://www.youtube.com/watch?vjHcz22MDPeE&listPLv8DnRaQOs5-MR-zbP1QUdq5FL0FWqVzg 一、入口函数 首先看入口函数main代码&#xff1a; #include<OGL3D/Game/OGame.h>int main() {OGame game;game.Run();return 0; } 这里交代个关于C语法的问题&#x…

释放创造力:可视化页面渲染引擎在低代码开发平台的应用

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 什么是页面渲染引擎? 页面渲染引擎是低代码开发平台的核心组件之一&#xff0c;它负责将开发者设计的页面布局和用户…

计算机网络学习笔记(5)——运输层

本文继续整理计算机网络体系架构知识内容。今日主讲——运输层。 网络层只把分组发送到目的主机&#xff0c;但是真正通信的并不是主机而是主机中的进程。 运输层提供了应用进程间的逻辑通信。运输层向高层用户屏蔽了下面网络层的核心细节&#xff0c;使应用程序看 见的好像在两…