[架构之路-242]:目标系统 - 纵向分层 - 应用程序的类型与演进过程(单机应用程序、网络应用程序、分布式应用程序、云端应用程序、云原生应用程序)
目录
一、什么是计算机应用程序
1.1 什么是应用程序
1.2 应用程序的分类
二、应用程序架构分类详解与演进阶段
三、应用程序架构(Application Architecture)
3.1 基本类型
3.2 云应用程序架构
一、什么是计算机应用程序
1.1 什么是应用程序
计算机应用程序(Computer Application)是指专门为计算机系统开发的软件程序,用于执行特定的任务或完成特定的功能。计算机应用程序是通过编程语言编写的一系列指令和算法,通过计算机的硬件系统来实现特定的功能和任务。
计算机应用程序可以分为各种不同的类型,涵盖了多个领域和应用场景。常见的计算机应用程序包括文字处理软件、电子表格软件、数据库管理系统、图像编辑软件、多媒体播放器、网页浏览器、操作系统、游戏等。
计算机应用程序可以完成多种任务,例如创建文档、进行数据分析、管理数据库、图像处理、音视频播放、网络通信等。根据不同的应用需求,开发人员使用编程语言和开发工具来编写和构建计算机应用程序。用户可以通过用户界面与应用程序进行交互,输入数据、执行操作或获取所需的结果。
总的来说,计算机应用程序是为了满足特定需求而开发的软件程序,通过计算机系统的硬件执行指令来完成任务和功能。计算机应用程序在各个领域和行业中扮演着重要的角色,提供了丰富多样的功能和便利性。
1.2 应用程序的分类
应用程序可以按照不同的分类方式进行划分,以下是常见的应用程序分类方式:
-
平台分类:
- 桌面应用程序:在个人计算机的桌面操作系统上运行的应用程序,例如文字处理软件、电子表格软件等。
- 移动应用程序:专为移动设备(如智能手机和平板电脑)开发的应用程序,例如社交媒体应用、游戏等。
-
领域分类:
- 商务应用程序:用于支持商业和企业流程的应用程序,例如客户关系管理软件、项目管理工具等。
- 健康与医疗应用程序:用于健康管理、医疗辅助等领域的应用程序,例如健康记录应用、远程医疗应用等。
- 教育应用程序:用于教育和学习目的的应用程序,例如在线学习平台、课程管理工具等。
-
功能分类:
- 生产力工具应用程序:用于提高工作效率和生产力的应用程序,例如文字处理软件、电子表格软件等。
- 创意与娱乐应用程序:用于创意设计、娱乐和媒体内容的应用程序,例如图像编辑软件、音频编辑软件、游戏等。
-
访问方式分类:
- 独立应用程序:作为单独的应用程序安装在设备上,并可通过设备图标直接启动。
- Web 应用程序:通过浏览器访问,不需要安装在设备上,例如在线邮箱、在线文档编辑工具等。
-
应用架构分类:
- 单机应用程序:在单个计算机上运行的应用程序,不需要网络连接。
- 网络应用程序:通过网络进行交互和通信的应用程序,例如客户端-服务器架构的应用程序。
- 分布式应用程序:在多个计算机上并行运行的应用程序,通过网络进行协作。
- 云端应用程序:基于云计算架构部署和运行的应用程序,利用云服务提供商的基础设施和资源。
这些分类方式可以根据实际需求和特定的上下文进行灵活组合和划分来满足不同应用程序的分类和描述需求。
二、应用程序架构分类详解与演进阶段
应用程序的类型和演进过程可以大致分为以下几个阶段:
整个演进过程中,应用程序的类型不断发展和演变,从单机应用程序到网络应用程序,再到分布式应用程序和云端应用程序,最终到达云原生应用程序。
这些应用程序类型的演进主要受到技术的发展和需求的变化的影响,旨在提升应用程序的性能、可靠性和扩展性,以满足不断变化的用户需求。
-
单机应用程序:前后端一体
- 单机应用程序是最基本的应用程序类型,在单个计算机上运行,不依赖于网络连接。
- 这种应用程序可以是桌面应用程序或移动应用程序,通过本地资源进行数据存储和处理。
- 单机应用程序适用于一些简单的应用场景,不涉及多台计算机或网络通信。
-
网络应用程序:前后端分离
- 网络应用程序通过网络进行通信和交互,主要包括客户端和服务器之间的数据传输和处理。
- 客户端通过浏览器、手机应用等方式连接到服务器,通过网络请求和接收数据来实现功能。
- 这种架构更适用于需要实时更新和共享数据的应用程序,允许多个用户同时访问和操作。
-
分布式应用程序:分体式
- 分布式应用程序是指将应用程序的不同组件分布在多个计算机上,并通过网络进行协作和通信。
- 这种架构将应用程序的负载和任务分散到多个节点上,提高了系统的性能、可靠性和可扩展性。
- 分布式应用程序适用于大规模应用程序和需要处理复杂计算和大数据量的场景。
-
云端应用程序:云底座
- 云端应用程序基于云计算平台部署和运行,利用云服务提供商的基础设施和资源。
- 这种架构可以实现弹性扩展、高可用性和灵活性,用户可以根据需求按需获取和使用计算资源。
- 云端应用程序适用于需要高度可伸缩性、持续交付和容错性的应用场景。
-
云原生应用程序:微服务
- 云原生应用程序是一种基于云计算架构和开发模式进行设计和构建的应用程序。
- 这种架构关注容器化部署、自动化管理和弹性伸缩,以适应云计算环境的动态性和变化性。
- 云原生应用程序采用微服务架构和容器技术,可以更快地进行部署、更新和扩展,并满足云计算的要求。
在应用程序架构的演进阶段中,从单机应用程序到网络应用程序、分布式应用程序、云端应用程序以及云原生应用程序,每个阶段都提供了更高级别的技术和架构设计,以应对不同规模和需求的应用程序挑战。选择适合的应用程序架构需要考虑实际需求、预期扩展性、性能要求以及可用资源等因素。
三、应用程序架构(Application Architecture)
3.1 基本类型
应用程序架构(Application Architecture)是指在设计和构建应用程序时,所采用的组织结构和模式的总称。它定义了应用程序的各个组件、模块以及它们之间的关系和交互方式。
应用程序架构的设计对于应用程序的性能、可扩展性、可维护性和易用性都具有重要的影响。
下面介绍几种常见的应用程序架构:
-
单层架构(Monolithic Architecture):
- 单层架构是最简单的应用程序架构,所有的功能模块都集中在一个单一的代码库中。
- 这种架构适用于小型和简单的应用程序,但随着应用程序规模的增大和复杂性的提高,单层架构可能会导致代码的混乱和难以维护。
-
分层架构(Layered Architecture):
- 分层架构将应用程序划分为多个层次,每个层次都具有特定的职责和功能。
- 典型的分层架构包括表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)等。
- 这种架构使得各个层次的代码更加清晰、可维护,并且可以提高代码重用性,但也增加了架构的复杂性。
-
客户端-服务器架构(Client-Server Architecture):网络
- 客户端-服务器架构将应用程序的功能划分为客户端和服务器两部分。
- 客户端负责用户界面和交互,而服务器负责数据存储、业务处理和数据传输等。
- 这种架构可以实现分布式计算和资源共享,适用于需要多个客户端同时访问服务器的应用场景。
-
微服务架构(Microservices Architecture):
- 微服务架构将应用程序划分为一组小型、独立的服务单元,每个服务单元都可以独立部署和运行。
- 每个服务单元都有自己的业务逻辑和数据存储,通过轻量级的通信机制进行交互。
- 微服务架构具有高度的灵活性、可扩展性和容错性,适用于大规模和复杂的应用程序。
-
事件驱动架构(Event-Driven Architecture):
- 事件驱动架构将应用程序设计为基于事件和消息的响应式系统。
- 不同的组件通过发布/订阅模式或消息队列进行事件的传递和处理。
- 这种架构可以实现松耦合和可扩展性,适用于需要实时响应和异步处理的应用场景。
以上只是几种常见的应用程序架构,实际的应用程序架构可能结合了多种模式和技术,根据具体的需求和场景进行选择和设计。
3.2 云应用程序架构
云应用程序架构(Cloud Application Architecture)是一种基于云计算环境中开发和部署应用程序的架构设计模式。
它利用云服务提供商的基础设施和平台,构建高度可扩展、弹性和可靠的应用程序。
云应用程序架构通常具有以下特点和组件:
-
微服务架构:云应用程序架构通常采用微服务架构,将应用程序拆分为一组小型、独立的服务单元。每个服务单元都有自己的业务逻辑和数据存储,通过轻量级的通信机制进行交互。
-
弹性扩展:通过云提供商的弹性计算能力,云应用程序能够根据需求快速扩展或缩减资源。这意味着它可以根据实际负载情况动态分配计算、存储和网络资源,以实现高可用性和性能优化。
-
云存储和数据库:云应用程序可以利用云提供商的存储服务和数据库服务,例如云存储服务和云数据库服务。这样可以方便地管理和存储大量的数据,并提供高可靠性和可伸缩性。
-
服务编排和管道:云应用程序常常利用服务编排和管道工具来管理和协调各个服务之间的交互和流程。这样可以实现自动化的部署、集成和监控,提高开发和运维效率。
-
安全性:云应用程序架构注重安全性,通过身份认证、访问控制、数据加密等安全措施来保护应用程序和数据的安全性。
通过采用云应用程序架构,开发人员可以更容易地构建和部署可扩展的应用程序,同时节省了硬件和基础设施的成本。云计算环境提供了灵活性、可靠性和高性能,使得应用程序可以更好地适应用户需求和变化的市场环境。
相关文章:
[架构之路-242]:目标系统 - 纵向分层 - 应用程序的类型与演进过程(单机应用程序、网络应用程序、分布式应用程序、云端应用程序、云原生应用程序)
目录 一、什么是计算机应用程序 1.1 什么是应用程序 1.2 应用程序的分类 二、应用程序架构分类详解与演进阶段 三、应用程序架构(Application Architecture) 3.1 基本类型 3.2 云应用程序架构 一、什么是计算机应用程序 1.1 什么是应用程序 计算…...
Jackson 反序列化失败,出现JSON: Unrecognized field
问题: 这边在灰度发布的时候,其他未发布的机器出现过could not read JSON: Unrecognized field “type”,这个报错,原因是有一个表新加了一个字段,并且灰度发布了一台机器,刚好有请求命中这台机器…...
vscode代码快捷输入
Vscode代码片段快捷输入 常用的代码片段为了避免重复输入,可以使用Vsco的中用户代码片段进行设置,这样就可以实现快捷输入. 操作流程 如下 打开vscode的设置 2. 找到用户代码片段 3. 选择模板 4. 然后写入代码片段即可 上面的代码片段可以设置多个,看自己 重点关注的是 prefi…...
【微服务】Feign 整合 Sentinel,深入探索 Sentinel 的隔离和熔断降级规则,以及授权规则和自定义异常返回结果
文章目录 前言一、Feign 整合 Sentinel1.1 实现步骤1.2 FallbackFactory 示例 二、Sentinel 实现隔离2.1 隔离的实现方法2.2 Sentinel 实现线程隔离示例 三、熔断降级规则3.1 熔断降级原理及其流程3.2 熔断策略 —— 慢调用3.3 熔断策略 —— 异常比例和异常数 四、授权规则4.1…...
Kurento多对多webrtc会议搭建测试
环境ubuntu18.04 KMS版本6.13.0 多对多通信demo7.0.0 KMS运行起来后,通过运行它的一个个demo,来实现不同的功能,它的demo很多如下: https://github.com/Kurento 里面有一对一,多对多,还有一些特效的demo。…...
蓝桥杯 (饮料换购,C++)
思路: 1、先加上初始的饮料数n。 2、再加上n可以兑换的饮料数n/3,求多余的瓶盖n%3。循环直至瓶盖数无法兑换新的一瓶饮料。 #include<iostream> using namespace std; int main() {int n,a0,sum0;cin >> n;sum n;while (n){n n a;//加上上…...
《java核心卷Ⅰ》知识点总结(可作面试题)
🛫 JDK和JRE傻傻分不清?🛫 HelloWorld的输出都经历了啥?🛫 Java的三个版本都是啥?🛫 关于main方法你都知道啥?main方法被声明为private会怎样?🛫 强制and自动类型转换都…...
发成绩小程序,一键群发成绩给家长,省事
大家好!又到了学期末,是不是又开始为了学生的成绩而烦恼了?别担心,今天就给大家带来一款超级实用的成绩查询系统!从此告别繁琐的手动操作,一键群发成绩给家长,轻松又愉快! 成绩查询系…...
barzilar_borwein算法微调函数的优化收敛
import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2加载barzilar_borwein算法 import optimtool.unconstrain as ou barzilar_borwein ou.gradient_descent.barzilar_borwein初始化输入数据 f ( x ) ∑ i 1 n / 2 c ( x 2 i −…...
SpringBoot篇---第一篇
系列文章目录 文章目录 系列文章目录一、为什么要用SpringBoot二、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?三、运行Spring Boot有哪几种方式?一、为什么要用SpringBoot Spring Boot 优点非常多,如: 一、独立运行 Spring Boot而且内嵌了各种servlet容器,…...
算法通关村第二关-白银挑战反转链表拓展问题
大家好我是苏麟 , 今天聊一聊链表反转拓展问题 . 反转链表拓展问题 1.指定区间反转 描述 : 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 题目…...
【rust/树莓派】使用rppalembedded-graphics控制st7789 LCD屏幕
说在前面 树莓派版本:4bLCD模块:ST7789V2 240*280 LCD树莓派系统:Linux raspberrypi 5.15.76-v8 #1597 SMP aarch64 GNU/Linuxrust版本:rustc 1.73.0 模块详情 某雪的1.69inch LCD模块,包含杜邦线 准备工作 树莓派…...
WebSocket—STOMP详解(官方原版)
WebSocket协议定义了两种类型的消息(文本和二进制),但其内容未作定义。该协议定义了一种机制,供客户端和服务器协商在WebSocket之上使用的子协议(即更高级别的消息传递协议),以定义各自可以发送…...
淘宝/天猫获取购买到的商品订单物流信息 API分享
开发背景: 淘宝是中国最大的电商平台之一,拥有海量的用户和卖家。为了方便卖家和买家之间的交易,淘宝提供了订单物流API的开发接口。通过这个接口,卖家可以快速获取到买家的订单信息以及物流状态,从而更好地管理自己的…...
PS软件 点击 “另存为 Web 所用格式” ,提示错误 无法完成操作 系统找不到指定路径
软件:Adobe Photoshop 问题: PS 点击 另存为 Web 所用格式 ,提示错误 无法完成操作 系统找不到指定路径 解决: 如果是Win10以上的系统,出现这种情况基本就是被系统自带的杀毒软件阻止了,可以看一下电脑右…...
解决“您点击的链接已过期”;The Link You Followed Has Expired的问题
今天WP碰到一个坑。无论发布文章还是更新插件、更换主题都是这么一种状态“您点击的链接已过期”;The Link You Followed Has Expired 百度出来的答案都是修改post_max_size 方法1. 通过functions.php文件修复 这种方法更容易,只需将以下代码添加到Wor…...
说说对ajax、axios、jsonp的理解
下面是对 AJAX、Axios 和 JSONP 的简要说明: 1:AJAX(Asynchronous JavaScript and XML): AJAX 是一种用于创建异步通信的技术,通过在后台与服务器进行数据交换,实现页面的局部更新,…...
黄金代理这么多,怎么选?
目前,现货黄金代理已成为了市场中成熟的模式,我们只要在搜索引擎上搜索如何在市场中开户,会搜到各种各样的黄金代理,其中更是不乏服务非常优秀的。部分投资者早就接受了黄金代理的存在,并且率先开始在黄金代理中进行开…...
一个工作三年的前端是如何做性能优化的
你是怎么做性能优化的?关于这一个问题,也是我们前端开发程序员经常会讨论到的问题,接下来这篇文章将总结一下前端方面的性能优化及方式。 为什么要做性能优化 性能优化是为了提高网页的加载速度和相应速度,给用户带来更好的体验…...
如何确定自己的armbian系统是不是ARM64架构
使用 arch 命令: arch 命令会返回当前系统的架构信息。 arch系统是ARM64架构,返回 aarch64。系统是ARM32架构,它会返回 armv7l 或类似的值。 使用 uname 命令: 确认系统架构的方法是使用 uname 命令 uname -a这会显示系统的详…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
