常见的软件架构风格

我的新书《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,一经查实,立即删除!

相关文章

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

反向代理服务器是一种网络架构模式,通常位于客户端和实际服务器之间,用于处理客户端请求并转发到实际服务器。以下是使用反向代理服务器的优点: 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: […

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 监控…

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的很多…

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

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

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;使应用程序看 见的好像在两…

python+selenium爬虫笔记

本文只是做例子&#xff0c;具体网站路径麻烦你们换下&#xff0c;还有xpath路径也换下 一、安装所需要的组件&#xff08;此处采用谷歌&#xff09; 1、安装驱动 查看你的浏览器版本&#xff0c;去安装对应的版本 下载驱动 下载驱动路径 之前版本的 输入这个路径下载下来解压…

TikTok革新游戏规则:解读短视频对社交媒体的影响

在社交媒体的巨浪中&#xff0c;TikTok以其独特的短视频形式和强大的创意社区&#xff0c;重新定义了游戏规则。这个以15秒视频为核心的平台&#xff0c;不仅让用户获得了表达自我的新方式&#xff0c;更深刻地影响了社交媒体的演进。本文将深入解读TikTok对社交媒体的影响&…

支持下载和阅读的漫画管理工具Teemii

什么是 Teemii &#xff1f; Teemii 是一款专为狂热漫画读者设计的精简 Web 应用程序。它为阅读和管理漫画集提供了一个简单而高效的平台。主要功能包括跨平台访问、浏览器内阅读、强大的元数据聚合器以及馆藏自动更新。Teemii 是专为那些寻求更加个性化和自主的方法来管理漫画…

[Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目

前面讲解了通过命令行方式来部署k8s项目,下面来讲讲通过腾讯云TKE来快速创建Pod、Deployment、Service部署k8s项目,云平台搭建Kubernetes可参考[Kubernetes]1.Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群 一.通过腾讯云TKE创建集群 1.创建集群 参考上…

Kibana 自定义索引连接器告警

一、 创建索引 PUT ipu-cbs-warning-info{"settings" : {"number_of_shards" : 1},"mappings" : {"properties" : {"timestamp": {"type": "date"},"rule_id" : { "type" : "…

经纬度的作用

当我们在手机上使用导航软件或者在网上查找地址时&#xff0c;经常会发现一个选项&#xff0c;就是显示当前位置的经纬度。那么&#xff0c;什么是经纬度&#xff0c;它有什么作用呢&#xff1f; 经纬度是用来确定地球上任何一个点位置的坐标系统。它由两个数值组成&#xff0…