一文搞懂应用架构的3个核心概念

news/2024/11/17 13:28:20/文章来源:https://www.cnblogs.com/tangshiye/p/18357630

如果你是一名业务开发,你可能要说,我整天就是做CRUD(增删改查),哪里需要了解什么应用架构设计?

经常有人说,程序员 35 岁之后很容易陷入瓶颈,被行业淘汰,我觉得原因其实就在此。

有些朋友在写代码的时候,可能没有太多考虑非功能性的需求、扩展性,只是完成功能,觉得能用就好。做事情的时候,也没有长远的规划,只是把眼前的事情做好就满足了。

我面试过很多大龄候选人,他们的简历长达十几页,项目经历有几十个。然而,细看之下,每个项目只是重复堆砌业务逻辑,缺乏难度递进,能力提升不明显。

这样的人,十年的积累可能与一年的积累无异。这样的人,怎么不会被行业淘汰呢?

随着年龄增长,互联网大环境也越来越卷,架构思维和设计知识是必须要掌握的。

应用架构是什么?

应用架构定义了企业中的应用系统的结构和行为。它不仅仅是搭建几个系统那么简单,更重要的是要考虑这些系统之间的关系,以及它们如何协同工作,以满足业务需要。

通过应用架构,我们可以清晰地识别出支持业务和数据处理所需的应用系统,并实现从业务需求到IT系统的转化。

一个优秀的应用架构,能让系统既稳定,又能灵活扩展和升级,快速应对市场需求变化。

应用架构的设计步骤一般包括:

  • 基于业务架构,完成业务到IT系统的转换,识别核心应用服务。
  • 划分应用结构,设计应用结构与业务流程,数据的关系。
  • 设计应用结构间的交互、集成关系。

应用服务

应用服务在应用架构中起着至关重要的作用,它将系统的核心功能打包,并提供给外部使用,可以视为系统对外的“门面”,用户或其他系统通过调用应用服务来实现特定的业务功能。

从外部视角来看,应用服务通常是带有明确的业务含义,比如下单、支付、查询库存等。这些服务的设计必须紧密围绕业务需求,确保能够高效地支撑业务流程的执行。

应用服务的概念源于SOA和微服务架构的兴起。通过将系统功能拆分为多个独立的服务,可以提高系统的可维护性、可扩展性和灵活性。

应用服务的概念源自于面向服务的架构(SOA)和微服务架构的兴起。通过将系统的功能模块化为多个独立的服务,不仅提升了系统的可维护性,还增强了系统的扩展性和灵活性。每个服务可以独立开发、部署和升级,这样即使业务需求发生变化,也只需调整相关服务,而无需大幅修改整个系统。

面向服务的架构最大的价值就在于它的敏捷性和灵活性。

敏捷性体现在服务可以快速调整,独立演化。灵活性则体现在每个服务都有清晰的业务边界,功能内聚性强,能够单独管理生命周期。

通过服务的组合和编排,系统可以快速响应业务的变化,支持复杂的业务流程,构建起一个既稳固又灵活的技术基础设施。

应用结构

应用结构描述了应用系统内部的层次结构和组织关系,它决定了系统的模块化程度,以及后续的开发和维护难度。

在应用结构设计中,我们通常会把系统抽象为不同的层次。比如,将系统划分为系统级、应用级、模块级和代码级。

这种抽象级别的划分帮助我们在不同层面处理复杂性,确保系统结构清晰且易于维护。如图所示:

  • 系统级:关注的是各个系统的整体布局和治理方式,比如各个系统之间的关系,以及它们如何协同工作。
  • 应用级:聚焦于各个应用的整体架构,包括应用与其他应用的交互方式,以及各个应用在整个系统中的角色。
  • 模块级:对应用内部的进一步细化,它涉及到代码的模块化设计、数据和状态的管理等。通过合理的模块划分,可以提高代码的可维护性、可重用性,减少重复劳动。
  • 代码级:关注的是代码本身的结构和实现方式。这一层级的设计直接影响到代码的质量和实现细节。

image.png

抽象级别的存在,主要是为了帮助我们更好地管理系统的复杂性。

1.分解复杂度

如果将所有的细节混杂在一起,整个系统将变得难以理解、维护和扩展。通过设置不同的抽象级别,我们可以将系统的复杂性分解到各个层次,每个层次只需关注特定的功能和职责。

这种分层处理方式使开发人员在专注于系统某一部分时,无需过多关注其他部分的细节,从而大大简化了系统的设计和开发过程。

2.团队协作边界清晰

在大型项目中,通常会有多个团队并行开发。如果系统没有明确的边界,各团队之间很容易产生冲突和重复劳动。

通过清晰的抽象级别划分,不同团队可以专注于系统的不同层次或模块,互不干扰。

3.扩展性强

随着业务需求的变化,系统往往需要不断地扩展和升级。如果系统的架构设计没有合理的抽象级别,扩展和升级就会变得异常困难,甚至可能引发系统的全面重构。

而在有抽象级别的系统中,变更往往只需要聚焦在特定的层次上进行,而不会影响整个系统。例如,一次业务改造只影响模块级别,我们可以在不改变系统整体架构的情况下,替换或新增某个模块,以满足新的业务需求。

应用交互

应用交互是指不同应用系统或组件之间的数据交换和通信方式。

在一个复杂的系统中,各个应用并不是孤立存在的,它们往往需要相互协作,才能完成更复杂的业务流程。

应用交互的设计就是为了确保这些系统和组件能够顺畅地“对话”,实现系统整体功能。

应用交互的形式有多种,包括同步调用、异步消息传递、事件驱动等。每种交互方式都有其特定的应用场景和优缺点。

例如,同步调用通常用于那些需要即时响应的场景,用户在前端提交订单后,系统会立即调用订单服务创建订单,这种方式的优点是可以保证请求的实时性,但也要求系统的各个部分在调用时都能正常工作。

相对的,异步消息传递则适用于那些不需要即时响应的场景,比如订单创建后,订单服务可以将订单创建的消息发送到消息队列,而履约服务可以在适当的时候处理这条消息。这种方式的优势在于能够提高系统的解耦性,避免系统在高负载时,因为同步调用导致性能瓶颈。

通过合理的交互设计,系统中的各个部分能够高效协同,减少耦合度,增加系统的灵活性。同时,良好的交互设计还能显著提升系统的性能和容错能力,即使在大流量访问、业务需求复杂的情况下,也依然保持稳定运行。

写在最后

应用架构定义了企业应用系统的结构和行为,强调系统间的关系和协同工作。

通过应用架构,可以识别支持业务和数据处理的系统,实现从业务需求到IT系统的转化。设计步骤包括业务到IT系统的转换、应用结构设计及其交互关系。

应用服务是系统的核心功能模块,源于SOA和微服务架构,提升了系统的可维护性和灵活性。

应用结构则描述了系统的层次结构,帮助管理复杂性,促进团队协作和系统扩展。应用交互设计确保系统组件间的数据交换和通信方式高效,提升系统性能和容错能力。

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

Openwrt 配置 PS5 端口转发

ps5 端口转发前言前阵子申请了公网IP通过了想远程串流玩PS5 通过Socat配置端口转发后仅桌面端Chiaki可以远程串流PS5 改用Openwrt的防火墙转发使PSPlay+Chiaki都可串流环境Openwrt 22.03.6 状态 > 概览 > 固件版本步骤打开 网络 > 防火墙 > 端口转发 点击 添加 配置…

vue绑定属性的指令

前面学习的插值表达式{{}},并不能更改标签的属性。因此,以下的写法是错误的,<h1 titlle="{{title}}" >我是h1标签的内容</h1>如果想要给标签的属性绑定动态值,需要借助v-bind 的指令语法:v-bind:原生HTML标签的属性="data中定义的值",可以…

P5535 【XR-3】小道消息

先介绍伯特兰切比雪夫定理:伯特兰—切比雪夫定理说明:若整数n>3,则至少存在一个质数p,符合n<p<2n − 2。另一个稍弱说法是:对于所有大于1的整数n,至少存在一个质数p,符合n<p<2n。 知道这个之后这道题就很简单了,我们先简单想想一个质数在一天可以通知除去它的倍数…

CMake 构建 C++ 项目

使用 CMake 构建C++项目便于跨平台开发,在Linux上可以生成 makefile ,并通过 make来进行编译。在Windows上可以生成 .sln 项目,并结合VS继续进行开发,或 MSVC 编译器来直接将项目编译成目标文件。 1、 创建 .cpp 文件,以编译成exe程序 #include <iostream>int main(…

【专题】2024无人驾驶网约车乘坐意愿调查报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37335科技迅猛发展,无人驾驶技术从科幻走进现实,2024 年无人驾驶网约车成热议话题。 阅读原文,获取专题报告合集全文,解锁文末208份无人驾驶网约车相关行业研究报告。 报告表明,近 60%受访者期待,00 后更积极,80 后较谨慎。性别上男性更…

.NET周刊【8月第1期 2024-08-04】

国内文章 EF Core性能优化技巧 https://www.cnblogs.com/baibaomen-org/p/18338447 这篇文章介绍了在代码层面上优化EF Core实例池和拆分查询的方法。首先,文章建议使用DbContext实例池来重复利用实例,避免资源浪费,并提供相关使用示例。其次,文章讨论了笛尔卡乘积对复杂查…

【视频讲解】滚动回归Rolling Regression、ARIMAX时间序列预测Python、R实现应用

原文链接: https://tecdat.cn/?p=37338 原文出处:拓端数据部落公众号 分析师:Jixin Zhong 本文将通过视频讲解,展示如何用滚动回归预测,并结合一个R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析实例的代码数据,为读者提供一套完整的实践数据分析流程。 滚动回…

25.python模块(加密,os,re,json)

一.加密讲解 加密算法: md5\rsa\AES\des\base (一)base64加解密 import base64 a=base64.b64encode(b"123456") print(a) #加密#bMTIzNDU2 b=base64.b64decode(bMTIzNDU2) print(b) #b123456http://encode.chahuo.com/ 在线加解密hashlib: md5\sha3_51\sha3_512()\s…

25.python模块(加密,os,re)

一.加密讲解 加密算法: md5\rsa\AES\des\base (一)base64加解密 import base64 a=base64.b64encode(b"123456") print(a) #加密#bMTIzNDU2 b=base64.b64decode(bMTIzNDU2) print(b) #b123456http://encode.chahuo.com/ 在线加解密hashlib: md5\sha3_51\sha3_512()\s…

java异常体系

每天坚持,终会抵达!

海康网络相机C#封装库

前言 最近做项目过程中,使用到了海康相机,官方只提供了C/C++的SDK,没有搜寻到一个合适的封装了的库,故自己动手,简单的封装了一下,方便大家也方便自己使用和二次开发 项目地址:https://github.com/martixjohn/HikvisionNetworkCameraSdkForCsharp 项目结构 ├─Dlls/ │…

我们常用的地铁卡/银行卡,竟然运行着一个 Java 虚拟机

我们日常使用 NFC 卡可以用来刷地铁,进出门禁,但是你有没有想过, 当我们使用一个 NFC 的 IC 卡刷卡进入地铁的时候,此时系统是如何知道我这个卡上有多少充值余额的? 这个薄薄的 NFC 卡到底有什么魔力,除了可以刷卡进地铁,还可以去银行取钱,进出小区门禁。 今天我在看到…