架构演进之路

devtools/2024/12/22 9:57:46/

架构演进

  • 前言
  • 1. 单机架构
  • 2. 应用数据分离架构
  • 3. 应用服务集群架构
  • 4. 读写分离 / 主从分离
  • 5. 冷热分离架构
  • 6. 业务拆分 —— 微服务
  • 7. 总结

前言

架构之所以会进行演变,是因为硬件的限制导致没办法容纳更多的请求
解决方法一般有:开源、节流
开源:即增加某台服务器的配置
节流:将流量分摊

1. 单机架构

顾名思义,将所有的服务放到一台服务器上
在这里插入图片描述

缺陷:一台服务器的可扩展能力有限,如果对硬件需求高于服务器最大能力则导致无法正常提供服务
优点:简单、方便、便宜

2. 应用数据分离架构

在单机架构的基础上,将应用服务和数据库部署到不同的服务器上,应用服务通过网络访问数据,可以最小代价的提升系统的承载能力
在这里插入图片描述

3. 应用服务集群架构

随着访问量越来越多,一台应用服务器已经无法满足大量的请求时,应用服务器集群孕育而生,将应用服务部署到多台服务器上,由负载均衡器来调度分配请求到应用服务器上
在这里插入图片描述
负载均衡策略:

  1. Round-Robin轮询:即非常公平地将请求依次分给不同的应用服务器。
  2. Weight-Round-Robin 轮询:为不同的服务器(比如性能不同)赋予不同的权重(weight),能者多劳。
  3. 一致哈希散列:通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务.

有朋友就要问了,虽然请求被分摊到了每个应用服务器上去处理,但是负载均衡器可是接收了所有的请求,那负载均衡器不就也会有请求达到上限的时候吗?
对的,负载均衡器的处理能力也会达到上限

  1. 负载均衡器只需要做分发的工作,这意味着他需要处理的事难度很低,能够比应用服务器容纳更多的请求
  2. 可以横向扩充负载均衡器的个数,形成多个集群,就类似于有的大学,因为招收学生不断的增多,一个校区已经容纳不下那么多的学生,就可以新建新的校区

4. 读写分离 / 主从分离

应用服务器集群架构虽然解决了单个应用服务器访问量过大的问题,但是应用服务器都连着同一个数据服务器,这就导致数据服务器的访问量过大,所以就有了读写分离架构
在这里插入图片描述
在实际应用中,大多数情况都是读的次数比写的次数多很多的,所以可以让读写分离,分别取访问不同的服务器,当用户写数据时,修改主数据库,并且同步到从数据库

5. 冷热分离架构

虽然主从服务器解决服务器访问量的问题,但是并没有解决效率问题,由于数据库是要和磁盘交互的,这就意味着效率很低。
解决方法:引入缓存服务器,计算机也有“二八”定律,即百分之二十的数据能够支撑百分之八十的访问量,正是因为这个原因,便可以把少量数据存在缓存中(即内存),访问内存的速度可比访问磁盘速度快多了
Redis就可以用做缓存服务器“在这里插入图片描述

6. 业务拆分 —— 微服务

由于有多台应用服务器但是代码只有一份,会导致代码的复杂程度分成的高,而且维护困难,最重要的是管理难度非常高微服务就是为了解决"人"的问题而生的

将业务分给不同的开发团队去维护,每个团队独立实现自己的微服务,然后互相之间对数据的直接访问进行隔离,可以利用 Gateway、消息总线等技术,实现相互之间的调用关联。甚至可以把一些类似用户管理等业务提成公共服务。
在这里插入图片描述
优点:代码复用,模块之间解耦,维护较容易

缺点: 效率会有所降低,因为服务之间需要通过网络交互,比访问内存慢很多

7. 总结

并不是演进越后的架构就越好,架构越靠后,就意味着投入的成本会很高,且每个架构有自己的优点,也会有自己的缺点,只有适合业务的才是最好的。


http://www.ppmy.cn/devtools/144333.html

相关文章

大数据相关标准——GB/T 42130-2022 智能制造 工业大数据系统功能要求(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据相关标准…

前端通过new Blob下载文档流(下载zip或excel)

当后端返回这样的预览: 前端该如何下载呢?首先在axios请求里,加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回&#xff0c…

Java项目--仿RabbitMQ的消息队列--虚拟主机设计

目录 一、引言 二、VirtualHost类 1.准备工作 2.交换机操作 3.队列操作 4.绑定操作 三、完善Router类 四、测试Router类 五、完善VirtualHost类 六、完善ConsumerManager类 七、总结 一、引言 本篇文章我们就消息队列中的虚拟主机进行设计,将内存和硬盘上…

云手机有哪些用途?云手机选择推荐

云手机的使用范围日益扩大,无论是个人使用,还是各种规模的中小型工作室需要进行养号、挂机、参加活动甚至完成各种测试需求,都已经开始大量采用云手机。以前,许多公司或工作室都自行建设手机批量控制的设备,但需要自行…

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔?孔径多大可以做机械孔,孔径多小必须做激光孔?请问激光微型孔可以直接打在元件焊盘上吗,为什么? 通孔是贯穿整个PCB的过孔,盲孔是从PCB表层连接到内层的过孔,埋孔…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架,与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis,包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …

mybatisservlet报错:Request processing failed; Parameter ‘meeting_id‘ not found

消息 Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter meeting_id not found. Available parameters are [arg2, arg1, arg0, param3, param1, param…

关于开发C# WinForms 应用程序的方法介绍

前提:首先默认大家已经有了一个完整的项目,并且现在所需的是进行C#界面的开发设计。 本文介绍的项目是使用C与C#联合开发的客户端软件 1 首先定义一个窗体类: 定义了一个窗体类 Formxxxxxxxx,该窗体类继承自 EF.EFFormMain。该…