八大技术架构——升级之路

news2024/9/20 21:09:26

目录

一、单机架构

简介

工作原理

架构优缺点

相关软件

二、应用数据分离架构

简介

工作原理

架构优缺点

三、应用服务集群架构

简介

出现原因

工作原理

架构优缺点

相关软件

四、读写分离/主从分离架构

简介

工作原理

架构优缺点

相关软件

五、冷热分离架构

简介

架构工作原理

架构优缺点

相关软件

六、垂直分库架构

简介

架构工作原理

架构优缺点

相关软件

七、微服务架构

微服务出现的原因?

简介

架构工作原理

架构优缺点

相关软件

八、容器编排架构

容器编排架构出现原因

简介

架构工作原理

架构优缺点

相关软件


一、单机架构


简介

单机架构是指应用服务和数据库服务公用一台服务器,出现在互联网早期,访问量比较少,单机足以满足需求

工作原理

 以电子商城为例,可以看到通过应用(划分了多个模块)和数据库在单个服务器上协作完成业务运行,具体的,用户在浏览器中输入 www.123.com,首先经过 DNS 服务将域名解析成 IP 地址,随后浏览器访问该 IP 对应的应用服务,所访问到的都是同一个服务器

架构优缺点

优点:部署简单,成本低。

缺点:存在严重的性能瓶颈,数据库和应用存在相互竞争资源。

相关软件

Web 服务器软件:Tomcat、Netty、Nginx、Apache 等

数据库软件:MySQL、Oracle、PostgreSQL、SQL Server 等

二、应用数据分离架构


简介

应用服务和数据库服务使用不同的服务器,这是由于单机存在严重的资源竞争,导致站点变慢而出现的。

工作原理

 以电子商城为例,可以看到应用(划分为很多个模块)和数据库在各自的服务器上通过网络协作完成业务运行。具体的用户输入域名经过 dns 解析后找到对应的应用服务器(Tomcat服务),再去访问 MySQL 服务器,拿到数据后返回给应用服务,最后返回给你用户。

架构优缺点

优点:成本相对可控、性能比单机有提升、数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力。

缺点:硬件成本变高、性能有瓶颈,无法应对海量并发。

三、应用服务集群架构


简介

在应用数据分离架构的基础上以集群的方式运作,并引入负载均衡(所有的用户请求会先经过负载均衡,再到服务器,当一个服务器接受请求过大时,负载均衡就会将请求分配到其他服务器上),控制集群平衡。

出现原因

单个应用不足支持海量的并发请求,高并发的时候站点响应变慢。

工作原理

 以电子商城为例,可以看到应用不再是一个,而是变成了多个,并通过负载均衡来支持海量数据并发。

那么他是如何进行流量调度的呢?常见的有一下几种方式:

  • Round-Robin 轮询算法:即非常公平地将请求依次分给不同的应用服务器。

  • Weight-Round-Robin 轮询算法:为不同的服务器(比如性能不同)赋予不同的权

    重(weight),能者多劳。

  • 一致哈希散列算法:通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈 希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我 们平时遇到的专项客户经理服务。

架构优缺点

优点:

  1. 应用服务高可用,应用满足高可用,不会一个服务出问题导致整个站点挂掉。
  2. 应用服务器具备一定的高性能:如果不访问数据库,应用相关处理通过扩展可以支持海量数据快速请求。
  3. 应用服务具有一定的扩展能力,支持横向扩展。

缺点:

  1. 数据库成为性能瓶颈,无法对数据库的量数据查询。
  2. 数据库是单点,没有高可用。
  3. 运维工作增多,扩展后部署运维工作增多,需要开发对应的工具对快速部署。
  4. 硬件成本较高。

相关软件

负载均衡软件:Nginx、HAProxy、LVS、F5 等。

四、读写分离/主从分离架构


简介

在上一层架构上,数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,那么我们可以把读操作和写操作分开,具体的,将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以,数据库主机负责写操作,从机只负责读操作

工作原理

 以电子商城为例,可以看到数据库服务器不再是一个,而是变成了多个,数据库主机负责写操作,从机负责读操作,数据库主机通过复制将数据同步到从机

架构优缺点

优点

  1. 数据库的读取性能提升。
  2. 读取被其他服务器分担,写的性能间接提升。
  3. 数据库有从库,数据库的可用性提高了。

缺点

  1. 热点数据的频繁读取导致数据库负载很高。
  2. 当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致。
  3. 服务器成本需要进一步增加。

相关软件

MyCat、TDDL、Amoeba、Cobar 等类似数据库中间件等

五、冷热分离架构


简介

在上一层架构,海量的请求导致数据库负载过高,站点响应再度变慢,那么就引入缓存,实行冷热分离,将热点数据放到缓存中快速响应。

架构工作原理

以电子商城为例,可以看到多了缓存服务器,对于热点数据全部放到缓存中,不常用数据再去查询我们的数据库。

架构优缺点

优点

  1. 大幅降低对数据库的访问请求,性能提升非常明显。

缺点

  1. 带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题。
  2. 服务器成本需要进一步增加。
  3. 业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈。

相关软件

Memcached、Redis 等缓存软件。

六、垂直分库架构


简介

在冷热分离架构上,单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式,因此出现了垂直分库架构:数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构。

架构工作原理

以电子商城为例,数据库是由多个主从库或者存储集群构成,支持分布式大规模并行处理。

架构优缺点

优点

  1. 数据库吞吐量大幅提升,不再是瓶颈。

缺点

  1. 跨库join、分布式事务等问题,这些需要对应的去进行解决,目前的mpp都有对应的解决方案。
  2. 数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布

相关软件

Greenplum、TiDB、Postgresql XC、HAWQ 等,商用的如南大通用的 GBase、 睿帆科技的雪球DB、华为的 LibrA 等。

七、微服务架构


微服务出现的原因?

  1. 扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统。
  2. 持续开发困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本。
  3. 不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作。
  4. 不灵活:无法使用不同的技术构建单体应用程序。
  5. 代码维护难:所有功能耦合在一起,新人不知道何从下手。

简介

微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。

架构工作原理

 以电子商城为例,一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,相互之间协作支持整个商城的应用。

架构优缺点

优点

  1. 灵活性高:服务独立测试、部署、升级、发布。
  2. 独立扩展:每个服务可以各自进行扩展。
  3. 提高容错性:一个服务问题并不会让整个系统瘫痪。
  4. 新技术的应用容易:支持多种编程语言。

缺点

  1. 运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难。
  2. 资源使用变多:所有这些独立运行的微服务都需要需要占用内存和 CPU。
  3. 处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位。

相关软件

Spring Cloud、Dubbo

八、容器编排架构


容器编排架构出现原因

  1. 微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错。
  2. 微服务数量多扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数信息。
  3. 微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突

简介

借助容器化技术(如docker)将应用/服务可以打包为镜像,通过容器编排工具(如k8s)来动态分发和部署镜像,服务以容器化方式运行

架构工作原理

以电子商城为例,一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,每一个微服务打包到容器之中,相互协作来完成系统功能,通过容器编排工具完成部署运维。

架构优缺点

优点

  1. 部署、运维简单快速:一条命令就可以完成几百个服务的部署或者扩缩容。
  2. 隔离性好:容器与容器之间文件系统、网络等互相隔离,不会产生环境冲突。
  3. 轻松支持滚动更新:版本间切换都可以通过一个命令完成升级或者回滚。

缺点

  1. 技术栈变多,对研发团队要求高。
  2. 机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低,可以通过购买云厂商服务器解决。

相关软件

Docker、K8S

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

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

相关文章

JMeter数据库性能测试指南:全面掌握基础操作

1.网络请求时间 2.数据库查询的时间 数据库性能指标 TPS:每秒事务数(一秒钟服务器处理的事务数,事务指,请求出去到响应回来的整个过程的时间) QPS:每秒查询量(就是数据库每秒执行的SQL数量,包含insert/…

239:设置extent:bbox,限制瓦片图的加载范围,不加载空白瓦片

第239个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载geoserver发布的数据,这里主要介绍extent,设置bbox附加载layer上,目的是bbox在可视范围内才加载瓦片,否则不加载,好处是不用加载空白的瓦片数据。 直接复制下面的 vue+openlayers源代码,操作…

Odoo 16的docker部署以及vscode环境配置

之前一直使用Odoo源码配置开发环境,安装的步骤比较多,费时。趁着升级到16版本的机会,尝试使用docker快速配置Odoo的VSCode开发环境。 1 系统环境 (1)操作系统:ubuntu 20.04 Alternative downloads | Ubu…

Eclipse 教程 完结中

Eclipse 快捷键 关于快捷键 Eclipse 的很多操作都提供了快捷键功能,我们可以通过键盘就能很好的控制 Eclipse 各个功能: 使用快捷键关联菜单或菜单项使用快捷键关联对话窗口或视图或编辑器使用快捷键关联工具条上的功能按钮 Eclipse 快捷键列表可通过…

可节省60% MCU开发成本的NV080D-S8,单片机语音芯片在恒温碗上的应用

社会在不断进步,科技在不断发展,如今的恒温碗不仅带有温度显示功能,更附带有语音播报,能更好地知晓当前饭菜,变凉或过烫的情况,有效避免伤害宝宝脆弱的肠胃; 广州九芯电子推出了一款&#xff0c…

dynamic-datasource动态数据源学习

学习链接 spring整合mybatis的核心思路 & 数据源动态切换 & 多数据源事务控制 - 自己的链接(本篇文章的上篇) Mybatisplus生成代码配置 & p6spy打印sql & mybatis日志打印 & mybatisplus用法 dynamic-datasource-spring-boot-sta…

LabVIEWCompactRIO 开发指南第六章44 同步模块

同步模块 某些应用(如振动或声音测量)需要通道之间的高电平(低于100nS)同步。本节讨论基于增量Σ的模块和扫描(SAR)模块的时序和同步。任何未被归类为三角积分的NIC系列I/O模块都被归类为SAR。 同步增量西…

ThreadLocal源码

介绍 ThreadLocal是一个线程的本地变量,也就意味着这个变量是线程独有的,是不能与其他线程共享的。这样就可以避免资源竞争带来的多线程的问题。 但是,这种解决多线程安全问题的方式和加锁方式(synchronized、Lock) 是有本质的区…

过来人建议:强烈安利本科生都去学Java编程!现在转行还不晚!

为什么标题这么说呢,因为Java的工资香啊,刚入门的小白就有 1w,转正后更多,而且越老越吃香! 我们学一门技术在身,走到哪里都不怕,java是技术岗,不带销售性质,加班要分公司…

unity与oculus quest开发设置流程

目录 预准备quest项目的构建PC运行参考文章 版本: unity:2021 adb(保证用USB连接PC和头显的时候能允许调试和数据访问) macOS 当USB连接之后,需要带上头显将是否允许数据调试和访问的对话框选择允许。 文件中assets放…

2.6 Hello World 及简单语法规则

2.6 Hello World 及简单语法规则 新建文件夹,用于存放代码 新建一个Java文件 早期我们只是会建立txt文本文件,或者word,Java文件的后缀名是.java 新建Hello.java文件 // 输入Java代码public class Hello{public static void main(String[…

Vue3 小兔鲜:Pinia入门

Vue3 小兔鲜:Pinia入门 Date: May 11, 2023 Sum: Pinia概念、实现counter、getters、异步action、storeToRefs保持响应式解构 什么是Pinia Pinia 是 Vue 的专属状态管理库,可以实现跨组件或页面共享状态,是 vuex 状态管理工具的替代品&…

PHP7 连接数据库 MySQL8.0 报错 Call to undefined function mysqli_connect() 的解决方法

前提 如题所示使用的是PHP7的版本,连接MYSQL8.0数据库遇到的问题,提供我个人的解决办法。 我的报错是:Call to undefined function mysqli_connect() 首先明确 保证PHP与MySQL可以正常使用 访问localhost:80【或者你设置的端口号】是有页面…

shell编程之SNAT与DNAT的应用

SNAT与DNAT的应用 一、SNAT的介绍1.SNAT概述2.SNAT源地址转换过程二、SNAT转换 三、DNAT的介绍1.DNAT概述2.DNAT转换前提条件 四、DNAT的转换五、防火墙规则的备份和还原六、tcpdump抓包工具的运用 一、SNAT的介绍 SNAT(SNAT)一般指源地址转换 1.SNAT概…

VMware安装Centos7图形化GUI系统全过程

1、打开vmware,点击文件然后新建虚拟机 2、然后自定义直接下一步 3、下一步 4、这里我们稍后安装操作系统,继续下一步 5、随后选择Centos7 64位,继续下一步 6、选择你所需要安装的虚拟机存放的位置,虚拟机名字看自己来设置&#x…

docker-安装minio集群

目录 1.服务器列表 2.NTP时间同步 1.服务端 minio_01配置 2.客户端配置-minio_02、minio_03、minio_04配置 3.Minio集群 1.在对应的主机执行对应的语句 2.创建文件夹 3.创建容器 4.访问 5.查看集群 4.nginx代理集群192.168.1.3 1.nginx安装 2.访问代理 1.服务器列…

[web]关于过滤器Filter

前言 为了避免在没有登录的情况下也可以通过路径访问到所有页面, 如果在每一个需要请求的资源里面都通过Session去判断有没有登录的用户对象就需要书写大量的判断代码,此时就可以用到Filter过滤器 作用 让请求的某些资源在之前或之后经过过滤器&#xff…

uni-app路由配置使用和页面跳转传参

uni-app路由配置使用和页面跳转传参 uni-app路由配置使用和页面跳转传参 文章目录 uni-app路由配置使用和页面跳转传参前言一、组件式路由跳转传参二、函数式路由跳转传参总结 前言 UNI-APP学习系列之路由配置使用和页面跳转传参 一、组件式路由跳转传参 组件式路由跳转 示例…

Java设计模式(一)

系列文章目录 单一职责原则 接口隔离原则 依赖倒转原则 文章目录 系列文章目录前言一、单一职责原则1.单一职责原则注意事项和细节 二、接口隔离原则1.接口隔离原则基本介绍(Interface Segregation Principle)2.应传统方法的问题和使用接口隔离原则改进 三、依赖倒转原则1.依赖…

【Linux】——调试器-gdb的使用

序言: 本期,我将带领大家学习的关于linux下的调试器gdb的使用,废话不多说跟着我一起去看看吧!! 目录 前言 (一)背景介绍 1、debug模式和release模式 2、为什么Release不能调试但DeBug可以调…