了解架构是什么

news2024/11/17 12:41:58

前言: \textcolor{Green}{前言:} 前言:

💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营
💞从这个专栏里面可以迅速获得Go的知识

了解架构是什么

  • 01. 什么是架构
    • 1.1 定义
    • 1.1 问题
    • 1.2 什么是架构 - 单机
    • 1.3 什么是架构 - 单体、垂直应用|垂直切分
    • 1.4 什么是架构 - SOA、微服务|水平切分
    • 小结

架构对于一个系统来说是非常重要的,因为一个完整系统的开发如果交给一个人那么这个人是吃不消的。分工合作又会导致其他的一些问题,那么最终有利于我们的结果是什么呢?先来了解一下架构是什么。

01. 什么是架构

1.1 定义

架构,又称软件架构。

  • 是关于软件整体结构与组件的抽象描述
  • 用于指导软件系统各个方面的设计

通俗点来说就是:实现一个软件有很多种方法,架构在方法选择上起着至关重要的指导作用

架构的重要性

  • 地基没打好,大厦容易倒
  • 地基坚实了,大厦才能盖的高
  • 站在巨人的肩膀上,才能看得远

1.1 问题

我们通过一个蛋糕店来将架构的例子明显表示出来

一个蛋糕坊要开张了,需要解决如下的几个问题

  • 如何做蛋糕
    • 独家秘方,还是亲自做比较好
  • 如何卖蛋糕
    • 刚开始客流量应该不大,边做边卖

此时看着问题解决了,那么开店营业试试

1.2 什么是架构 - 单机

软件系统需要具备对外提供服务,单机:就是把所有功能都实现在一个进程里,并部署在一个机器上,如下图中:

在这里插入图片描述

优点:是简单
问题:C10K problem。运维的时候需要停服

这里讲一下 C10K problem
C10K problem是指如何让服务器能够支持10k并发

此时我们想卖更多的蛋糕应该怎么做?
首先想到的就是,卖蛋糕,一个人不够,那么我就多雇几个蛋糕师傅做。

1.3 什么是架构 - 单体、垂直应用|垂直切分

在这里插入图片描述

单体架构:分布式部署
垂直应用架构:按应用垂直切分的单体
优点:

  • 水平扩容
  • 运维不需要停服
    问题:
  • 职责太多,开发效率不高
  • 爆炸半径大

此时就出现了新的问题:如何提高做蛋糕的效率。
那么就需要分工协作了。

把进程部署在多个机器上,并引入负载均衡层,经过垂直拆分,就到了单体架构。多个机器就好比把蛋糕切成几大块,负载均衡层引导用户去事先切好的几块蛋糕处。在单体架构基础上,进一步地再把不同应用的代码从之前一个大的进程中拆分出来,就来到了垂直应用架构。按应用拆分进程,就例如不同种类的蛋糕在不同的点发配。

经过垂直切分,尝试解决了单机服务的水平扩容、运维停服问题,当然只是简单的,细节的如多个机器上部署的进程如何保证数据一致性等会在后面进行讨论。
解决了两个重要问题,也面临着很多挑战,导致我们必须放弃单体和垂直应用架构。
随着业务场景的复杂,服务的职责也越来越多。在软件架构中,开发者需要关心 Web 后端业务逻辑,还要关心缓存、持久化存储,甚至机器。至此,开发人员很难专注于业务能力的开发。

1.4 什么是架构 - SOA、微服务|水平切分

在这里插入图片描述
将原本包含了众多复杂逻辑的进程按照功能单元抽象成多个服务,以服务为一等公民,并为它们之间的通信定义标准,得到了SOA架构(Service-Oriented Architecture)。
服务:是根据功能抽象出来的概念。例如:处理用户登录信息的 Passport 服务,负责持久化存储的数据库服务,以及为了加快查询速度的缓存服务等。(将应用的不同功能单元抽象为服务)
通信标准:是服务之间通信的基石。没有定义好的通信标准,就像多个做蛋糕的师傅语言不通,难以协作。
为了服务之间更好的通信,有两个发展方向:中心化和去中心化。去中心化的最终形态就是微服务架构。(定义服务之间的通信标准)

此时。不同模块的RD可以专心于自己的业务逻辑,开发迭代效率得到了显著提高。各个服务独立运维,变更操作的影响面可控,应用整体的稳定性得到了提高。

再次看一下垂直拆分和水平切分产生的一系列问题:
由单机部署演进来的分布式架构,如何解决数据一致性。(装货台共支付了多少蛋糕)
服务越来越多,依赖越来越复杂,如何做到高可用。(这么多的师傅,如何合作)
一个团队甚至一个人可能同时管理多个微服务,如何运维。(烤箱坏了,怎么容灾)
微服务的目标是强化单一职责,控制爆照半径,如何在解耦和过微之间取舍。(运维成本高了,值当吗?)

小结

架构的演进初衷:好比做蛋糕

  • 需求量越来越大,终归要增加人手
  • 越做越复杂,终归要分工合作

架构的演进思路:就像切蛋糕。蛋糕越来越大,一口吃不下终归要切分

  • 竖着切(垂直切分)
  • 横着切(水平切分)

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

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

相关文章

Linux服务器同步Windows目录同步-rsync

前言 最近需要,Linux的服务器同步Windows的一个目录。查了下,大概有三种方法:网盘同步;rsync同步;挂载目录。 网盘同步,可以选择搭建一个Nextcloud 。但是问题在于,我需要的是,客户…

react context上下文与vue中 provide inject的用法区别

一、react中: 数据传递 1、引入createContext import { createContext } from "react"; 2、创建并导出 export const FspThemeContext createContext({}); 3、传递数据(value项不能缺少!!) ①不解构…

微流控芯片压力和流量的超高精度串级控制解决方案

摘要:针对微流控芯片压力驱动进样系统中压力和流量的高精度控制,本文提出了国产化替代解决方案。解决方案采用了积木式结构,便于快速搭建起气压驱动进样系统。解决方案的核心是采用了串级控制模式,结合高精度的传感器、电气比例阀…

JMeter如何进行多服务器远程测试

JMeter是Apache软件基金会的开源项目,主要来做功能和性能测试,用Java编写。 我们一般都会用JMeter在本地进行测试,但是受到单个电脑的性能影响,往往达不到性能测试的要求,无法有效的模拟高并发的场景,那么…

云计算服务模式、PaaS、SaaS都是啥?

什么是云计算服务模式 云计算服务模式是指云服务提供商提供的不同类型的云计算服务,包括基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)等。这些服务可以帮助企业在云端进行资源共…

Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来explain 慢SQL分析show Profile。(比explain还要详细…

WideResNet(宽残差网络)算法解析-鸟类识别分类-Paddle实战

文章目录 一、理论基础1.前言2.设计理念2.1 ResNet算法2.1.1 residual(残差结构)模块2.1.2 residual的计算方式2.1.3 ResNet中两种不同的residual2.1.4 Batch Normalization(批归一化) 2.2 WideResNet(WRNs)算法2.2.1 宽残差块2.2…

vue2项目引入vant组件库

Vant官网 Vant 2 - Mobile UI Components built on Vue

【零基础入门学习Python---Python数据处理和存储保姆级教程】

🚀 Python 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

记一次Tomcat控制台弱口令爆破事件应急响应

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 事件背景介绍02 流量分析过程03 事件分析结果04 安全加固建议 01 事件背景介绍 某内部应急演练中,安全部门在安全设备上观察到大量Tomcat控制台登录请求,现需根据流量情况进…

多线程的CAS(Compare and Swap)机制与乐观锁、AtomicInteger等原子包装类的使用

一.乐观锁 与 CAS机制 在java的多线程并发过程中: ​ 1.当一个对象在多个内存中都存在副本时,如果一个线程在自己的工作内存修改了共享变量,其它线程也应该能够看到被修改后的值。常常用volatile关键字来保证多线程数据的可见性。 ​…

Nginx Rewrite 重写跳转

文章目录 一.Nginx Rewrite概述1.Rewrite跳转场景2.Rewrite跳转场景3.Rewrite跳转实现4.Rewrite实际场景4.1Nginx跳转需求的实现方式4.2 rewrite放在 server{},if{},location{} 段中4.3对域名或参数字符串 5.nginx正则表达式5.1 常用的正则表达式元字符 …

Jmeter(jmeter-plugins插件的安装使用)

目录 一、安装JMter Plugins 二、Custom Thread Groups插件 Stepping Thread Group 元件 Ultimate Thread Group 一、安装JMter Plugins 1、官网下载 JMeter Plugins 的jar包 2. 将下载的jar包复制到 %JMETER_HOME%\lib\ext 目录下 3. 启动 JMeter --> Options -->…

学习系统编程No.26【信号处理实战】

引言: 北京时间:2023/6/26/13:35,昨天12点左右睡觉,本以为能和在学校一样,7点左右起床,设置了7点到8点30时间段内的4个闹钟,可惜没想到啊,没醒,直接睡到了12点&#xff…

rust基本语法

文章目录 变量与可变性变量与常量Shadowing(隐藏)数据类型标量类型1.整数类型2.浮点类型3.布尔类型4.字符类型 复合类型1.Tuple2.数组 函数if表达式循环1.loop2.while3.for 变量与可变性 声明变量使用let关键字,默认情况下,变量是…

kafka初学入门

kafka概述 消息中间件对比 特性ActiveMQRabbitMQRocketMQKafka开发语言javaerlangjavascala单机吞吐量万级万级10万级100万级时效性msusmsms级以内可用性高(主从)高(主从)非常高(分布式)非常高&#xff0…

大模型显存占用分析

大模型显存占用由以下几部分组成: 1. 模型本身参数,假设是1个单位 2.模型的梯度,同样也是一个单位 3.优化器参数(占大头):以Adam参数为例,还需要在显卡中额外存储m和v两个参数,因…

File学习

1.构造方法 1.File(String pathname) 根据路径名创建抽象File对象 //1. 通过路径进行创建 pathname是字符串格式的路径名public File(String pathname) {if (pathname null) {throw new NullPointerException();}// 和系统交互 获取最近的File文件目录文件this.path fs.nor…

10分钟快速入门UI自动化-Puppeteer

目录 先简单介绍一下: 工欲善其事必先利其器,首先把所需要的工具装好 1. 安装node 2. 安装npm (node安装时会自动安装npm,如果已安装node,此步请忽略) 3. 安装cnpm (npm下载包失败,选择cnpm安装) 4. 新建一个nod…

【ICer必备 4】IC封装设计流程

【ICer必备 3】模拟IC设计全流程 ------------------------------------------------文末附往期文章链接--------------------------------------前言一、IC封装设计过程二、常见IC封装类型三、常见封装特点四、封装设计常用软件五、EM仿真常用EDA(1)HFS…