DevOps + 架构

一、DevOps

1定义

开发,测试,运维,甚至运营。出一个东西,就能马上走完一个流程,看效果
软件交付的速度和质量很重要

二、架构

1、解决系统复杂度

首先找到系统复杂度在哪里。
经典案例:

假设我们需要设计一个大学的学生管理系统,其基本功能包括登录、注册、成绩管理、课程管理等。当我们对这样一个系统进行架构设计的时候,首先应识别其复杂度到底体现在哪里。
性能:一个学校的学生大约 1 ~ 2 万人,学生管理系统的访问频率并不高,平均每天单个学生的访问次数平均不到 1 次,因此性能这部分并不复杂,存储用 MySQL 完全能够胜任,缓存都可以不用,Web 服务器用 Nginx 绰绰有余。
可扩展性:学生管理系统的功能比较稳定,可扩展的空间并不大,因此可扩展性也不复杂。
高可用:学生管理系统即使宕机 2 小时,对学生管理工作影响并不大,因此可以不做负载均衡,更不用考虑异地多活这类复杂的方案了。但是,如果学生的数据全部丢失,修复是非常麻烦的,只能靠人工逐条修复,这个很难接受,因此需要考虑存储高可靠,这里就有点复杂了。我们需要考虑多种异常情况:机器故障、机房故障,针对机器故障,我们需要设计 MySQL 同机房主备方案;针对机房故障,我们需要设计 MySQL 跨机房同步方案。
安全性:学生管理系统存储的信息有一定的隐私性,例如学生的家庭情况,但并不是和金融相关的,也不包含强隐私(例如玉照、情感)的信息,因此安全性方面只要做 3 个事情就基本满足要求了:Nginx 提供 ACL 控制、用户账号密码管理、数据库访问权限控制。
成本:由于系统很简单,基本上几台服务器就能够搞定,对于一所大学来说完全不是问题,可以无需太多关注。
对应的架构如下:

在这里插入图片描述

1) 性能

a 单机的复杂度

计算机内部复杂度最关键的地方就是操作系统。计算机性能的发展本质上是由硬件发展驱动的,尤其是 CPU 的性能发展。著名的“摩尔定律”表明了 CPU 的处理能力每隔 18 个月就翻一番;而将硬件性能充分发挥出来的关键就是操作系统,所以操作系统本身其实也是跟随硬件的发展而发展的,操作系统是软件系统的运行环境,操作系统的复杂度直接决定了软件系统的复杂度。

操作系统和性能最相关的就是进程和线程。最早的计算机其实是没有操作系统的,只有输入、计算和输出功能,用户输入一个指令,计算机完成操作,大部分时候计算机都在等待用户输入指令,这样的处理性能很显然是很低效的,因为人的输入速度是远远比不上计算机的运算速度的。

为了解决手工操作带来的低效,批处理操作系统应运而生。批处理简单来说就是先把要执行的指令预先写下来(写到纸带、磁带、磁盘等),形成一个指令清单,这个指令清单就是我们常说的“任务”,然后将任务交给计算机去执行,批处理操作系统负责读取“任务”中的指令清单并进行处理,计算机执行的过程中无须等待人工手工操作,这样性能就有了很大的提升。

批处理程序大大提升了处理性能,但有一个很明显的缺点:计算机一次只能执行一个任务,如果某个任务需要从 I/O 设备(例如磁带)读取大量的数据,在 I/O 操作的过程中,CPU 其实是空闲的,而这个空闲时间本来是可以进行其他计算的。

为了进一步提升性能,人们发明了“进程”,用进程来对应一个任务,每个任务都有自己独立的内存空间,进程间互不相关,由操作系统来进行调度。此时的 CPU 还没有多核和多线程的概念,为了达到多进程并行运行的目的,采取了分时的方式,即把 CPU 的时间分成很多片段,每个片段只能执行某个进程中的指令。虽然从操作系统和 CPU 的角度来说还是串行处理的,但是由于 CPU 的处理速度很快,从用户的角度来看,感觉是多进程在并行处理。

多进程虽然要求每个任务都有独立的内存空间,进程间互不相关,但从用户的角度来看,两个任务之间能够在运行过程中就进行通信,会让任务设计变得更加灵活高效。否则如果两个任务运行过程中不能通信,只能是 A 任务将结果写到存储,B 任务再从存储读取进行处理,不仅效率低,而且任务设计更加复杂。为了解决这个问题,进程间通信的各种方式被设计出来了,包括管道、消息队列、信号量、共享存储等。

多进程让多任务能够并行处理任务,但本身还有缺点,单个进程内部只能串行处理,而实际上很多进程内部的子任务并不要求是严格按照时间顺序来执行的,也需要并行处理。例如,一个餐馆管理进程,排位、点菜、买单、服务员调度等子任务必须能够并行处理,否则就会出现某个客人买单时间比较长(比如说信用卡刷不出来),其他客人都不能点菜的情况。为了解决这个问题,人们又发明了线程,线程是进程内部的子任务,但这些子任务都共享同一份进程数据。为了保证数据的正确性,又发明了互斥锁机制。有了多线程后,操作系统调度的最小单位就变成了线程,而进程变成了操作系统分配资源的最小单位。

多进程多线程虽然让多任务并行处理的性能大大提升,但本质上还是分时系统,并不能做到时间上真正的并行。解决这个问题的方式显而易见,就是让多个 CPU 能够同时执行计算任务,从而实现真正意义上的多任务并行。目前这样的解决方案有 3 种:SMP(Symmetric Multi-Processor,对称多处理器结构)、NUMA(Non-Uniform Memory Access,非一致存储访问结构)、MPP(Massive Parallel Processing,海量并行处理结构)。其中 SMP 是我们最常见的,目前流行的多核处理器就是 SMP 方案。

操作系统发展到现在,如果我们要完成一个高性能的软件系统,需要考虑如多进程、多线程、进程间通信、多线程并发等技术点,而且这些技术并不是最新的就是最好的,也不是非此即彼的选择。在做架构设计的时候,需要花费很大的精力来结合业务进行分析、判断、选择、组合,这个过程同样很复杂。举一个最简单的例子:Nginx 可以用多进程也可以用多线程,JBoss 采用的是多线程;Redis 采用的是单进程,Memcache 采用的是多线程,这些系统都实现了高性能,但内部实现差异却很大。

b 集群

以下是任务分配器和任务分解,每句话都是重点
在这里插入图片描述
在这里插入图片描述

2) 高可用–(无中断)

高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。

通俗点来讲,就是一台机器不够就两台,两台不够就四台;一个机房可能断电,那就部署两个机房;一条通道可能故障,那就用两条,两条不够那就用三条(移动、电信、联通一起上)

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

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

相关文章

Vue3实战笔记(22)—路由Vue-Router 实战指南(路由传参)

文章目录 前言一、路由router-link二、路由传参1.query方式2.params方式3.props传参 总结 前言 vue-router 是 Vue.js 官方路由管理器。它和 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得易如反掌。 前面提到过简单的使用路由,直到上文使用404界面…

僵尸网络的威胁值得关注

僵尸网络(botnet)是指一组受到恶意软件感染并遭到恶意用户控制的计算机。术语“僵尸网络”由“机器人(bot)”和“网络(network)”两个词组合而成,每台受感染设备被称为“机器人”。僵尸网络可用…

【Linux:进程概念】

目录 了解冯诺依曼思想: 操作系统如何管理软硬件资源? 进程与程序的区别 了解冯诺依曼思想: 1.所有的数据采用二进制的存储 2.数据存储在内存中 CPU处理器只做俩种运算:逻辑&&算数运算 操作系统的组成?…

视频下载器 - 网页视频自动嗅探2.2.4

【应用名称】:视频下载器 - 网页视频自动嗅探 【适用平台】:#Android 【软件标签】:#Video #Downloader 【应用版本】:2.2.4 【应用大小】:33MB 【软件说明】:软件升级更新。支持多种格式的看片神器&am…

【HarmonyOS NEXT】获取卸载APP后不变的设备ID

1. 背景 在HarmonyOS NEXT中,想要获取设备ID,有3种方式 UDID: deviceinfo.udid ,仅限系统应用使用 AAID: aaid.getAAID(),然而卸载APP/恢复设备出厂设置/后会发生变化 OAID:identifier.getO…

【AI+agent智能助手】使用Dify新手小白也能分分钟构建属于自己的 AI 原生应用

最近有读者看了我这篇文章 【人工智能】字节版GPTs「扣子」coze免费使用chatGPT4模型操作步骤 , 私信我有没有本地私有化 智能体推荐。 这里推荐一款, Dify支持私有化部署,新手小白也能分分钟构建属于自己的 AI 原生应用。 官方地址&#…

如何将Git仓库中的文件打包成zip文件?

要将Git仓库中的文件打包成zip文件,您可以使用git archive命令。这个命令允许您将任何git可访问的树或提交导出成一个归档文件。以下是一些基本的步骤: 打开命令行或终端。切换到您的Git仓库的目录。执行git archive命令。 git archive --formatzip --o…

3D Tiles资源大全

本文汇总整理3D Tiles相关的各种资源,包括查看器、生成器、示例数据集、教程、演示等。 1、3D Tiles特色演示 注意:这些演示是基于 CesiumJS 1.87.1 Release 发布的,其中包括对 3D Tiles Next 扩展的实验性支持。这些演示中显示的大多数功能现…

Linux进程(三) --- 状态和优先级

运行,阻塞,挂起 运行 (Running) 当一个进程处于运行状态时,它正在使用CPU执行指令。进程在以下两种情况下可能被认为是运行状态: 实际运行(Running on CPU): 进程当前正在CPU上执行。可运行&…

如何利用R包进行主成分分析和可视化

一. 使用R包“FactoMineR”进行主成分分析(PCA) 基本步骤如下: 安装和加载包:如果尚未安装,首先安装“FactoMineR”包,然后加载它: install.packages("FactoMineR")library(FactoM…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面,然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了,那么怎么能自定义404页面呢? 很简单,在我们的springboot的静态资源目录下创建一个error包,然…

ue引擎游戏开发笔记(41)——行为树的建立(2)--丰富ai行为:巡逻后返回原处

1.需求分析: 就敌人ai而言,追踪到敌人有可能丢失目标,丢失目标后应该能返回原来位置,实现这一功能。 2.操作实现: 1.思路:利用clear value函数,禁用掉当前的追踪功能,执行之后的返…

积温空间分布数据、气温分布数据、日照数据、降雨量分布、太阳辐射数据、地表径流数据、土地利用数据、npp数据、ndvi数据

引言 积温是某一时段内逐日平均气温之和,它是研究植物生长、发育对热量的要求和评价热量资源的一种指标,是影响植物生长的重要因素之一,对指导农业生产和生态建设具有非常重要的意义。作为重要的气候资源,积温与其它资源的区别在于存在很大的地域差异和时…

Python | Leetcode Python题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution:def numDecodings(self, s: str) -> int:n len(s)# a f[i-2], b f[i-1], c f[i]a, b, c 0, 1, 0for i in range(1, n 1):c 0if s[i - 1] ! 0:c bif i > 1 and s[i - 2] ! 0 and int(s[i-2:i]) < 26:c aa,…

Flutter 中的 FlutterLogo 小部件:全面指南

Flutter 中的 FlutterLogo 小部件&#xff1a;全面指南 在 Flutter 应用中&#xff0c;FlutterLogo 是一个展示 Flutter 官方图标的小部件。它不仅可以作为一个应用启动时的占位符&#xff0c;也可以作为装饰性图标使用&#xff0c;以展示对 Flutter 的支持。本文将详细介绍 F…

统计学中的新进展与研究领域

统计学领域一直处于不断发展和演变之中&#xff0c;涌现出许多新的研究方向和方法。以下是一些统计学领域的最新研究进展和热点&#xff1a; 1. **贝叶斯统计&#xff1a;** 贝叶斯统计作为一种概率推断的方法&#xff0c;在近年来受到越来越多的关注。随着计算技术的不断进步…

C++——STL容器——List

1. 前言 List也是STL容器的一种&#xff0c;是C提供的链表结构的容器。C中所提供的list是双向带头循环链表&#xff0c;我们这篇文章通过自己模拟实现来学习list的使用。 为了避免和库中的命名冲突&#xff0c;也为了封装的考虑&#xff0c;我们将我们的list放入一个命名空间之…

微服架构基础设施环境平台搭建 -(七)Kubesphere pod内安装vimping命令

微服架构基础设施环境平台搭建 -&#xff08;七&#xff09;Kubesphere pod安装vim&ping命令 在K8s集群运维过程&#xff0c;需要进入pod容器内通过ping来测试网络是否通畅&#xff0c;或使用vim进行编辑文件&#xff0c;但是pod容器默认情况下是不支持ping、vim命令的&…

前端面试题日常练-day05 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 1. 下列哪个 CSS 属性用于设置元素的背景颜色&#xff1f; A) color B) font-size C) background-color D) text-align2. 在 JavaScript 中&#xff0c;以下哪个函数可以用于将字符串转换为小写&a…

2024.05.15学习记录

1、完成Ts重构Axios项目中更多功能的开发 2、刷题&#xff1a;二叉树&#xff08;代码回忆录&#xff09; 3、复习diff算法源码解读