技术架构演进

news2025/1/20 22:07:25

架构演进

  • 单机架构
  • 应用数据分离架构
  • 应用服务集群架构
  • 读写 主从分离架构
  • 冷热分离架构
  • 垂直分库架构
  • 微服务架构
  • 容器编排架构
  • 实际互联网架构

单机架构

单机架构:

  • 用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队
  • dns解析网址,返回ip,浏览器访问ip对应的应用服务
    在这里插入图片描述

优点:部署简单,成本低
缺点:存在严重的性能瓶颈,数据库和应用互相竞争资源

应用数据分离架构

应用数据分离架构:

  • 性能压力,应用服务和数据库服务使用不同服务器
    在这里插入图片描述

优点:成本相对可控,性能相比单机有提升,数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力
缺点:硬件成本变高,性能有瓶颈,无法应对海量并发

应用服务集群架构

应用服务集群架构:

  • 服务器遇到瓶颈,水平扩展,引入一个新的组件:负载均衡:解决用户流量向哪台应用服务器分发的问题,负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中
  • 流量调度算法有很多种,比如
    Round-Robin 轮询算法,即非常公平地将请求依次分给不同的应用服务器。
    Weight-Round-Robin 轮询算法。为不同的服务器(比如性能不同)赋予不同的权重(weight),能者多劳。
    一致哈希散列算法。通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务
  • 负载均衡相关软件: Nginx、 HAProxy、 LVS、 F5
    在这里插入图片描述

优点:应用服务高可用:应用满足高可用,不会一个服务出问题整个站点挂掉,应用服务具备一定高性能:如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应,应用服务有一定扩展能力:支持横向扩展
缺点:数据库成为性能瓶颈,无法应对数据库的海量查询,数据库是单点,没有高可用,运维工作增多,扩展后部署运维工作增多,需要开发对应的工具应对快速部署,硬件成本较高

读写 主从分离架构

读写分离 / 主从分离架构(R/W M/S):

  • 数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,所以把读操作和写操作分开
  • 将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以,数据库主机负责写操作,从机只负责读操作,将读请求由各个从库分担之后,数据库的压力就没有那么大了,这个过程不是无代价的,主库到从库的数据同步其实是由时间成本的
  • 数据库中间件: MyCat、 TDDL、 Amoeba、 Cobar
    在这里插入图片描述

优点:数据库的读取性能提升,读取被其他服务器分担,写的性能间接提升,数据库有从库,数据库的可用性提高了
缺点:热点数据的频繁读取导致数据库负载很高,当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致,服务器成本需要进一步增加

冷热分离架构

冷热分离架构:

  • 业务中一些数据的读取频率远大于其他数据的读取频率,这部分数据称为热点数据,与之相对应的是冷数据
  • 为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,实现冷热分离,缓存热点数据。通过缓存能把绝大多数请求在读写数据库前拦截掉,降低数据库压力
  • 使用 memcached 作为本地缓存,使用Redis 作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题
    在这里插入图片描述

优点:大幅降低对数据库的访问请求,性能提升非常明显
缺点:带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题,服务器成本需要进一步增加,业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈

垂直分库架构

垂直(纵向)切分:把单一的表拆分成多个表,并分散到不同的数据库(主机)上

  • 垂直分库:例如把图书库分为用户库,价格库等

水平(横向)切分:根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上

  • 水平分表:用户id是最常用的分表字段。因为大部分查询都需要带上用户id,这样既不影响查询,又能够使数据较为均衡地分布到各个表中(当然,有的场景也可能会出现冷热数据分布不均衡的情况)

垂直分库架构:

  • 单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式
  • 数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构
  • 相关软件: Greenplum、 TiDB、 Postgresql XC、 HAWQ 等,商用的如南大通用的 GBase、睿帆科技的雪球 DB、华为的 LibrA
    在这里插入图片描述

优点:数据库吞吐量大幅提升,不再是瓶颈
缺点:跨库join、分布式事务等问题,这些需要对应的去进行解决,目前的mpp都有对应的解决方案,数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布

微服务架构

微服务架构:

  • 微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代
  • 出现原因:
    ①扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统
    ②持续开发困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本
    ③不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作
    ④不灵活:无法使用不同的技术构建单体应用程序
    ⑤代码维护难:所有功能耦合在一起,新人不知道何从下手
  • 相关微服务框架:Spring Cloud、 Dubbo
    在这里插入图片描述

优点:灵活性高:服务独立测试、部署、升级、发布,独立扩展:每个服务可以各自进行扩展,提高容错性:一个服务问题并不会让整个系统瘫痪;新技术的应用容易:支持多种编程语言
缺点:运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难,资源使用变多:所有这些独立运行的微服务都需要需要占用内存和 CPU ,处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位

容器编排架构

容器编排架构:

  • 借助容器化技术(如docker)将应用/服务可以打包为镜像,通过容器编排工具(如k8s)来动态分发和部署镜像,服务以容器化方式运行
  • 出现原因:
    ①微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错
    ②微服务数量多扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数信息
    ③微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突
  • 相关软件:Docker、 K8S

大致过程:
在这里插入图片描述
在这里插入图片描述

优点:部署、运维简单快速:一条命令就可以完成几百个服务的部署或者扩缩容,隔离性好:容器与容器之间文件系统、网络等互相隔离,不会产生环境冲突,轻松支持滚动更新:版本间切换都可以通过一个命令完成升级或者回滚
缺点:技术栈变多,对研发团队要求高,机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低,可以通过购买云厂商服务器解决。

实际互联网架构

实际互联网架构:
在这里插入图片描述

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

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

相关文章

Pilota:为什么一个代码生成工具如此复杂丨GOTC Rust系列分享

对于一个 Rust RPC 框架来说,根据 IDL 做代码生成是为了让用户更方便地使用框架。而生成代码的质量以及周边能力都会对用户的开发体验有着非常非常直接的影响。 所以,字节跳动 CloudWeGo 开发了 Pilota 这样的一个框架,来为用户生成良好的代码…

Redis延时双删

1.为什么缓存和MySQL数据没有保持一致性? 数据一致性是什么意思,“一致性”包含如下情况: 若缓存中有数据,则缓存的数据值需要和DB值相同若缓存无数据,则DB值必须是最新值 不符合这两种情况的,都属于缓存…

【OJ比赛日历】快周末了,不来一场比赛吗? #06.10-06.16 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 2023-06-10(周六) #4场比赛2023-06-11…

实验五 标准ACL的配置【网络安全】

实验五 标准ACL的配置【网络安全】 前言推荐实验五 标准ACL的配置问题方案步骤 最后 前言 2023-6-8 18:54:22 以下内容源自《【网络安全】》 仅供学习交流使用 推荐 配置标准ACL 实验五 标准ACL的配置 问题 络调通后,保证网络是通畅的。同时也很可能出现未经…

软件测试与打螺丝

单元测试中的FIRST代表下面五组英文单词对应的原则: FastIsolated / IndependentRepeatableSelf-validatingTimely / Thorough 软件开发中,往往会因为我们没有注意到的逻辑或难以理解的代码,而引进Bug来。 怎么尽早地发现Bug,…

【springCloud-2】Ribbon负载均衡

负载均衡,一般分为服务端负载均衡和客户端负载均衡。 服务端:如Nginx,F5等,请求到达服务器后进行负载均衡。 客户端:客户端获取到服务端的列表,自己经过一定的计算后选择某一台访问。 ribbon实现的就是客…

Monica: 您的又一个免费ChatGPT 4.0

最近 ChatGPT 又开始封号了,主要原因如下: 违反使用条款:如果用户违反了平台或应用的使用条款,例如发布违法、恶意或滥用行为的内容,侵犯他人的权利,或者从事垃圾信息传播等,管理员可能会采取封…

多方合作时,系统间的交互是怎么做的?

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 文章背景 我们最近做了很多…

【资料分享】ESD基本概念及ESD产生来源详解

CMOS工艺集成电路制造技术已经进入纳米时代,随着特征尺寸的降低,ESD (Electro-Static Discharge,静电放电)问题越来越成为集成电路中最主要的可靠性问题。 ESD基本概念 ESD定义:ESD(Electro-Static disc…

垄断与市场力量

五力竞争分析模型 供应商的判断能力购买者的判断能力新进入者的威胁现有的竞争对手产品和服务的替代品的压力产品和服务的互补品 政府决策价值定位 服务哪些客户?满足这些客户的哪些需求?收取什么价格?垄断企业的经营 竞争企业是价格接受者,而垄断企业是价格制定者。 市场…

PURE:A Frustratingly Easy Approach for Entity and Relation Extraction

原文链接: https://aclanthology.org/2021.naacl-main.5.pdf ACL 2021 介绍 对于命名实体识别和关系提取,最近的研究要么在这两个任务上使用一个预训练结构,要么通过共享表征来进行多任务学习。作者认为实体模型和关系模型在上下文表征中学到…

kotlin的abstract抽象类与interface接口建模按钮android点击事件处理

kotlin的abstract抽象类与interface接口建模按钮android点击事件处理 例如: abstract class View {private var listener: OnClickListener? nullprivate var enabled: Boolean falseconstructor() {println("view constructor")}fun setClickListen…

用法详解!postman接口自动化如何进行环境变量

目录 前言: 1.设置环境变量 2.设置全局变量 3.检查response body中是否包含某个string 4.检测JSON中的某个值是否等于预期的值 5.转换XML body为JSON对象 6.检查response body是否与某个string相等 7.测试response Headers中的某个元素是否存在(如:Content-…

自然语言处理: N-Gram实战

自然语言处理: 第一章N-Gram 一. 理论 定义: 语言模型在wiki的定义是统计式的语言模型是一个几率分布,给定一个长度为 m 的字词所组成的字串 W1 , W2 , ,Wn ,派几率的字符串P(S) P(W1 , W2 , ,Wn , )而其…

web audio音效播放器/音乐播放器

这是一个基于Web Audio API、HTML和CSS构建的高级网页音频播放器。它允许用户播放音频文件、控制播放、可视化音频,并应用音频效果和过滤器。 Github仓库: https://github.com/sonichen/Web-Based-Audio-Player 希望大家多多star 环境 操作系统&#…

Android逆向解析加壳与脱壳技术

加壳 加壳是指在 APK 文件中插入额外的代码或数据,使得原始代码难以被分析和反编译。通常加壳是为了保护软件的知识产权或者防止逆向工程。下面是 Android 加壳的一般流程: 选择加壳工具:选择合适的加壳工具进行加壳,比如市面上…

【SpringCloud-1】注册中心-Eureka

springcloud微服务,相对于dubbo这种SOA架构,提供了一站式的全套解决方案,什么意思呢?就是说springcloud不需要依赖其他组件,自己提供了全套的 常规项目需要使用的技术和解决问题的方案。 比如dubbo需要依赖zk作为注册…

一文读懂二叉树

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 什么是二叉树 二叉树是一种由节点(Node)组成的数据结构,每个节点最多有两个子节点。它具有良好的层次结构,便于搜索和…

chatgpt赋能python:Python如何将IP地址转换为整数

Python如何将IP地址转换为整数 在计算机网络中,IP地址是一个包含32位的二进制数字,通常由四个8位二进制数字(即“点分十进制”)表示。但在某些情况下,需要将IP地址转换为整数,例如在网络编程中检查网络连接…

C语言:编写代码,演示多个字符从两端移动,向中间汇聚

题目: 给出第一个字符串,如:"welcome to school!!!!!", 设置第二个字符串:"######################", 两字符串字符数相等。 从第二个字符串两端开始移动,向中间汇聚&#…