微服务之架构演变

news/2024/11/28 14:43:28/

随着互联网的发展,网站应用规模不断扩大,网站架构随之不断演变,演变历史大致分为单体应用架构-垂直应用架构-分布式架构-SOA架构-微服务架构-云原生架构

架构演变

单体应用架构

以前网站流量小,只需要一个应用就可以把所有功能部署在一起,比如一个电商系统,包含很多模块,我们部署到一个tomcat里服务器上。
在这里插入图片描述

优点:

架构简单,容易开发,部署

缺点:

不易维护、扩展(模块耦合,难以针对某个模块性优化以及水平扩展)
单点容错率低

垂直应用架构

随着访问量增大,单一架构只能依靠增加节点来应对,但是不是多有模块都有较大访问量,所以产生垂直应用架构,把一个应用拆成几个互不相干的应用。
在这里插入图片描述

优点

流量分担
解决并发问题
进行优化和水平扩展
提高容错率(一个系统的问题不会影响到其他系统)

缺点:

系统之间相互独立, 无法进行相互调用, 会有重复的开发任务

分布式架构

当垂直应用越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码 抽取出来,做成统一的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢?

这就产生了新的分布式系统架构。它将把工程拆分成表现层和服务层两个部分,服务层中包含业务 逻辑。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。
在这里插入图片描述

优点

抽取公共的功能为服务层,提高代码复用性

缺点

系统间耦合度变高,调用关系错综复杂,难以维护

SOA架构

在分布式架构下,当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加 一个调度中心对集群进行实时管理。
在这里插入图片描述

优点

使用注册中心解决了服务间调用关系的自动调节

缺点

服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )
服务关系复杂,运维、测试部署困难

微服务架构

微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步,它更加强调服务的"彻底拆分"。
在这里插入图片描述

优点

服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
微服务之间采用Restful等轻量级http协议相互调用

缺点

分布式系统开发的技术成本高(容错、分布式事务等)

云原生架构

云原生架构是为了更好地适应云计算环境而提出的一种软件架构方式。其产生原因包括:

  • 弹性和可扩展性需求: 云计算提供了弹性和可扩展性的优势,可以根据负载情况动态调整资源。云原生架构可以更好地利用这些特性,使应用能够快速地响应变化。
  • 容器化技术的兴起: 容器化技术如Docker的出现,使得应用能够以一种轻量级、可移植的方式打包和交付。云原生架构将容器作为核心组件,从而使应用更具可移植性和一致性。
  • 持续集成/持续交付(CI/CD): 云原生架构鼓励使用自动化的持续集成和持续交付流程,使得软件交付更加频繁、可靠,从而更好地适应快速变化的市场需求。
  • 微服务架构的兴起: 云原生架构通常采用微服务架构,将应用拆分成一组小型、独立部署的服务。这样可以提高开发速度、可维护性和可伸缩性。
  • 基础设施即代码(IaC): 云原生架构鼓励使用基础设施即代码的方法来管理基础设施,使得基础设施的创建、配置和管理变得更加灵活和可重复。

在这里插入图片描述

优点:

  • 灵活性和可伸缩性: 云原生架构允许应用根据需要自动伸缩,以适应不断变化的负载情况,从而提供更好的用户体验。
  • 高可用性: 通过将应用拆分成多个微服务,并在多个地理位置部署,可以实现更高的可用性和容错性。
  • 快速交付: 采用云原生架构,应用可以更快地进行持续集成和持续交付,从而更快地交付新功能和修复。
  • 资源利用率: 云原生架构可以更好地利用云计算的资源弹性,避免资源浪费。
  • 跨平台兼容性: 云原生架构使用容器作为交付机制,可以在不同的云平台和环境中运行,提高了可移植性。

缺点:

  • 学习曲线: 云原生架构需要开发团队熟悉新的技术和方法,可能需要一定的学习曲线。
  • 复杂性: 拆分成微服务和使用容器等技术增加了系统的复杂性,需要更高的管理和维护成本。
  • 安全性: 由于微服务的分布和容器化,可能增加了一些安全风险,需要额外的安全措施。
  • 资源消耗: 由于容器化技术本身会带来一定的资源开销,可能需要更多的资源来支持同样的工作负不适用于所有应用: 云原生架构不适用于所有应用,特别是那些对基础架构依赖较大的传统应用。
    总之,云原生架构在适应现代云计算环境和提高开发效率方面具有明显优势,但也需要考虑到其带来的复杂性和管理挑战。是否选择采用云原生架构取决于具体应用场景和团队的技术能力。

http://www.ppmy.cn/news/1086736.html

相关文章

【网络安全带你练爬虫-100练】第22练:数据包中参数提取与处理

目录 一、目标1:GET数据包的处理 1、GET数据包中参数的提取 2、GET请求中 统计参数个数 二、目标2:POST数据包的处理 1、post中参数个数的提取 2、POST请求中 统计参数个数 一、目标1:GET数据包的处理 1、GET数据包中参数的提取 impo…

华为云云服务器评测 | 从零开始:云耀云服务器L实例的全面使用解析指南

文章目录 一、前言二、云耀云服务器L实例要点介绍2.1 什么是云耀云服务器L实例2.1.1 浅析云耀云服务器L实例 2.2 云耀云服务器L实例的产品定位2.3 云耀云服务器L实例优势2.4 云耀云服务器L实例支持的镜像与应用场景2.5 云耀云服务器L实例与弹性云服务器(ECS&#xf…

向openssl中添加一个最简单的算法

文章目录 一、尝试在sha.c中添加新的函数二、添加自定义算法2.1 添加对应文件2.2 相关配置2.3 编译运行 一、尝试在sha.c中添加新的函数 在尝试添加新算法前,我先尝试在原有的旧算法中添加一个新函数,看是否能被编译并生成对应的动态链接库。 关于open…

《Python魔法大冒险》006 变量的迷雾

小鱼和魔法师走了很久,终于来到了一个神秘的森林前。这片森林与众不同,它被一层厚厚的迷雾所包围,仿佛隐藏着无尽的秘密。 小鱼好奇地看着这片森林:“这是什么地方?” 魔法师:这是魔法森林,一个充满魔法和挑战的地方。但要进入这片森林,我们首先要解开这层迷雾。 小…

Hive 表注释乱码解决

文章目录 出现原因MySQL 字符集修改调整元数据库字符集测试 出现原因 一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_server 和 character_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器…

Mysql底层数据结构为什么选择B+树

索引底层采用什么数据结构,为什么使用B树而不是其他数据结构: (1)如果采用二叉树:使用递增字段作为索引时,二叉树会退化成链表,查找效率太低 (2)如果采用红黑树&#xf…

玩转Mysql系列 - 第12篇:子查询(非常重要,高手必备)

这是Mysql系列第12篇。 环境:mysql5.7.25,cmd命令中进行演示。 本章节非常重要。 子查询 出现在select语句中的select语句,称为子查询或内查询。 外部的select查询语句,称为主查询或外查询。 子查询分类 按结果集的行列数不…

drf之请求、drf之响应、两个视图基类、5个视图扩展类(不是视图类)、原生django,怎么写向响应头写入数据

1 drf之请求 1.1 drf 之请求Request类 # 新的request对象---》之前聊过一部分# from rest_framework.request import Request# 1 以后视图类的方法中的request都是这个类的对象 # 2 以后使用request.data 取请求体中的数据 # 3 以后使用request.query_params 取请参数中的数…