一篇文章掌握系统架构的演变和常见微服务框架

目录

前言

一、系统架构的演变

1、单体应用架构

优点:

缺点:

2、垂直应用架构

优点:

缺点:

3、分布式SOA架构

3.1 什么是SOA

3.2 SOA架构

优点:

缺点:

4、微服务架构

优点:

缺点:

5、SOA与微服务的关系

SOA( Service Oriented Architecture )

微服务架构

二、常见微服务框架

1、Spring Cloud

1.1 主要功能

1.2 主要组件

2、Spring Cloud Alibaba

2.1 主要功能

2.2 主要组件

三、总结


前言

随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对分布式服务架构以及

微服务架构势在必行,急需一个治理系统确保架构有条不紊的演进。

一、系统架构的演变

1、单体应用架构

Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,dao层代码)是将所有的功能模块,打包到一起并放在一个web容器中运行

比如搭建一个电商系统:客户下订单,商品展示,用户管理。这种将所有功能都部署在一个web容器中运行的系统就叫做单体架构

优点:

  • 所有的功能集成在一个项目工程中

  • 项目架构简单,前期开发成本低,周期短小型项目的首选

缺点:

  • 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护

  • 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈

  • 技术栈受限

2、垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。

优点:
  • 项目架构简单,前期开发成本低,周期短小型项目的首选

  • 通过垂直拆分,原来的单体项目不至于无限扩大。

  • 不同的项目可采用不同的技术

缺点:
  • 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护

  • 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈

3、分布式SOA架构

3.1 什么是SOA

SOA 全称为 Service-Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。

站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。

通过上面的描述可以发现 SOA 有如下几个特点:分布式、可重用、扩展灵活、松耦合。

3.2 SOA架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。

优点:
  • 抽取公共的功能为服务,提高开发效率

  • 对不同的服务进行集群化部署,解决系统压力。

  • 基于ESB/Dubbo减少系统耦合。

缺点:
  • 抽取服务的粒度较大

  • 服务提供方与调用方,接口耦合度较高。

4、微服务架构

优点:
  • 通过服务的原子化拆分,以及微服务的独立打包、部署和升级小团队的交付周期将缩短,运维成本也将大幅度下降。

  • 微服务遵循单一原则。微服务之间采用Restful等轻量协议传输。

缺点:
  • 微服务过多服务治理成本高不利于系统维护。

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

5、SOA与微服务的关系

SOA( Service Oriented Architecture )

面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系

列的功能。

一个服务,通常以独立的形式存在与操作系统进程中,各个服务之间通过网络调用。

微服务架构

其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻

底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。

这些小应用之间通过服务完成交互和集成。

功能SOA微服务
组件大小大块业务逻辑单独任务或小块业务逻辑
耦合度通常松耦合总是松耦合
公司架构任何类型小型、专注于功能交叉团队
管理着重中央管理着重分散管理
目标确保应用能够交互操作执行新功能、快速拓展开发团队

二、常见微服务框架

1、Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统

基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可

以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将

目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行

再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分

布式系统开发工具包。

SpringCloud, 基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,

全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之

外,还有一些选型中立的开源组件

SpringCloud是目前国内使用最广泛的微服务框架

官网地址:https://spring.io/projects/spring-cloud

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而

供了良好的开箱即用体验。

Spring Cloud Netflix,主要由:EurekaRibbonFeignHystrixZuul|GatewayConfig等组件组成。

1.1 主要功能

  1. 服务注册与发现:Spring Cloud Eureka可以实现服务的注册与发现,使得服务之间可以方便地进行通信和调用。

  2. 负载均衡:Spring Cloud Ribbon提供了负载均衡的功能,可以根据配置的负载均衡策略将请求分发到不同的服务实例上。

  3. 服务调用:Spring Cloud Feign可以简化服务之间的调用,通过声明式的方式定义服务接口,实现服务之间的远程调用。

  4. 服务容错:Spring Cloud Hystrix提供了服务容错的功能,可以实现服务的降级、熔断和限流,保证系统的稳定性和可靠性。

  5. 配置管理:Spring Cloud Config可以集中管理应用程序的配置,支持动态刷新配置,方便应用程序的部署和管理。

  6. 服务网关:Spring Cloud Gateway提供了统一的API网关,可以对外暴露统一的接口,并提供路由、过滤和限流等功能。

  7. 消息总线:Spring Cloud Bus可以实现消息总线的功能,方便在分布式系统中传播状态变化和配置变更。

  8. 分布式追踪:Spring Cloud Sleuth可以实现分布式系统的请求追踪和日志聚合,方便排查和解决问题。

  9. 监控聚合:使用 Hystrix 监控,我们需要打开每一个服务实例的监控信息来查看。而 Turbine 可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。

1.2 主要组件

  1. Netflix Eureka:服务的注册与发现(注册中心)。

    Eureka就是用来管理微服务的通信地址清单的,有了Eureka之后我们通过服务的名字就能实现服务的调用。

  2. Netflix Ribbon:客户端负载均衡,主要负责负载均衡,针对每次请求,Ribbon会从Euraka client服务列表中选择一个服务发起请求,均匀的把请求分发到各个服务中。

  3. Netflix Feign:服务接口调用, Feign是一个声明式 REST 客户端,主要是为了简便服务调用,更快捷、优雅地调用 HTTP API。主要是实现原理是用动态代理。

    Ribbon和Feign都是客户端负载均衡器,它的作用是在服务发生调用的时候帮我们将请求按照某种规则分发到

    多个目标服务器上,简单理解就是用来解决微服务之间的通信问题。

  4. Spring Cloud Config:分布式配置

    分布式配置管理中心,用来统一的管理服务的配置文件,运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取自己的配置。

  5. Netflix Zuul:服务网关

    我们可以把它看作是微服务的大门,所有的请求都需要经过zuul之后才能到达目标服务,根据这一特性,我们

    可以把微服务公共的是事情交给zuul统一处理。

  6. Netflix Hystrix:断路器

    Hystrix是用来解决微服务故障,保护微服务安全的组件,避免因为服务器故障,导致整个调用链上的微服务

    全都出现异常。

  7. Spring Cloud Bus:消息总线

    消息总线是在微服务中给各个微服务广播消息的一个组件,我们使用消息总线构建一个消息中心,其他微服务

    来接入到消息中心,当消息总线发起消息,接入的微服务都可以收到消息从而进行消费。

  8. Spring Cloud Sleuth:微服务链路追踪。

    链路追踪的作用就是来监控维护之间的调用关系,让程序员方便直观的感受到一个请求经历了哪些微服务,以

    及服务的请求时间,是否有异常等。

  9. Netflix Turbine:聚合Hystrix监控数据,监控聚合,使用 Hystrix 监控,我们需要打开每一个服务实例的监

    控信息来查看。而 Turbine 可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。

2、Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供微服务开发一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,你只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案通过阿里中间件来迅速搭建分布式应用系统。

Spring Cloud Alibaba,主要由:NacosSentinelSeata等组件组成。

2.1 主要功能

  1. 服务限流降级 :默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

  2. 服务注册与发现 :适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

  3. 分布式配置管理 :支持分布式系统中的外部化配置,配置更改时自动刷新。

  4. 消息驱动能力 :基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

  5. 分布式事务 :使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。

  6. 阿里云对象存储 :阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

  7. 分布式任务调度 :提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分

  8. 布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

  9. 阿里云短信服务 :覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

2.2 主要组件

  1. Sentinel:阿里巴巴源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

  2. Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  3. RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

  4. Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

  5. Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

  6. Alibaba Cloud OSS : 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

  7. Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

  8. Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

三、总结

随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对分布式服务架构以及

微服务架构势在必行,急需一个治理系统确保架构有条不紊的演进。


系统架构的演变:1、单体应用架构。2、垂直应用架构。3、分布式SOA架构。4、微服务架构

常见微服务框架有Spring Cloud、Spring Cloud Alibaba

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

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

相关文章

2024年01月数据库流行度最新排名

点击查看最新数据库流行度最新排名(每月更新) 2024年01月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

《Linux系列》Linux磁盘MBR分区扩容

文章目录 Linux磁盘MBR分区扩容1.前言2.控制台磁盘扩容3.分区扩容3.1 fdisk3.2 lsblk3.3 扩容分区 4.扩容文件系统4.1 df4.2 扩容文件系统 Linux磁盘MBR分区扩容 1)参考阿里云扩容分区文档,整理MBR分区扩容 2)本文档适用于MBR分区(fdisk -lu查…

springboot 双数据源配置

1:pom <!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</group…

CISSP 第1章:实现安全治理的原则和策略

作者&#xff1a;nothinghappend 链接&#xff1a;https://zhuanlan.zhihu.com/p/669881930 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 CIA CIA 三性&#xff1a; 机密性&#xff1a;和数据泄露有关。完整性…

freeCodeCamp:编程学习之旅的起点

一、产品介绍 freeCodeCamp是一个提供免费编程课程的学习平台。它包含了数百个编程挑战&#xff0c;覆盖了从基础的HTML、CSS和JavaScript到高级的算法和数据结构等各个方面的知识。freeCodeCamp不仅提供了丰富的学习资源&#xff0c;还帮助我通过实践提高编程技能。 二、应用…

中科2023

1、检材一硬盘的MD5值为多少?(1分) 80518BC0DBF3315F806E9EDF7EE13C12 2、检材一bitlocker的恢复密钥是多少?(5分) 看了一下不解密寸步难行,必须解密。18中科一样的,老题目一样出 感觉这个有点慢,下面看到潘姐的1小时。 然后我自己的 我自己的,1小时18分钟终于是恢…

go语言``反引号用法归纳——多行输出和Tag标签(指定json名称、MySQL名称))

一、多行输出 示例 func main() {str1 : 反引号多行字符串str2 : "双引号" " 多行" " 字符串"//str3 : 单引号" //" 多行" //" 字符串str4 : "双引号\n" " 多行\n" &quo…

C#上位机与欧姆龙PLC的通信08----开发自己的通讯库读写数据

1、介绍 前面已经完成了7项工作&#xff1a; C#上位机与欧姆龙PLC的通信01----项目背景-CSDN博客 C#上位机与欧姆龙PLC的通信02----搭建仿真环境-CSDN博客 C#上位机与欧姆龙PLC的通信03----创建项目工程-CSDN博客 C#上位机与欧姆龙PLC的通信04---- 欧姆龙plc的存储区 C#上…

注册 Mongodb 官网个人账号

上文 Mongodb基础介绍与应用场景我们简单说了一下 Mongodb 的场景 那么 我们先在他的官网创建一个个人账号 我们先访问官网 https://www.mongodb.com/zh-cn 这里 我们需要注册一下 这里 我们按要求填写信息 然后 点击下面创建账户 然后 点击下面创建账户 然后 他会要求我们邮…

Spring Boot 3 集成 Jasypt详解

随着信息安全的日益受到重视&#xff0c;加密敏感数据在应用程序中变得越来越重要。Jasypt&#xff08;Java Simplified Encryption&#xff09;作为一个简化Java应用程序中数据加密的工具&#xff0c;为开发者提供了一种便捷而灵活的加密解决方案。本文将深入解析Jasypt的工作…

常用环境部署(十三)——GitLab整体备份及迁移

一、GitLab备份 注意&#xff1a;由于我的GitLab是docker安装的&#xff0c;所以我的操作都是在容器内操作的&#xff0c;大家如果不是用docker安装的则直接执行命令就行。 1、Docker安装GitLab 链接&#xff1a;常用环境部署(八)——Docker安装GitLab-CSDN博客 2、GitLab备…

Docker部署系列之Docker Compose安装Redis三主三从集群

总结/朱季谦 在日常开发或者编程当中&#xff0c;经常需要用到redis集群&#xff0c;若是按照传统的方式&#xff0c;一个机器一个机器搭建&#xff0c;难免过于繁琐&#xff0c;故而可以通过dock er-compose编排方式&#xff0c;快速搭建。我在搭建过程当中&#xff0c;将操作…

今天用vite新建的vue3的项目 启动遇到报错

UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token ??at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18) (Use node --trace-warnings ... to show where the warning was created) (node:30304) UnhandledPromiseRejectionWarning: U…

普中STM32-PZ6806L开发板(HAL库函数实现-USART2 中断接收)

简介 实现USART2 的 中断接收&#xff0c; 发送数据。电路原理图 USART2接线 原理图USART2 在主芯片引脚 实物图 其他知识 APIs stm32f1xx_hal_uart.h /* 堵塞发送, pData是发送数据, Size发送数据大小, Timeout是超时时间 */ HAL_StatusTypeDef HAL_UART_Transmit(UAR…

安卓在SOA中的运用

安卓在运用SOA研发的过程中&#xff0c;会针对实际情况对研发的架构和流程进行优化&#xff0c;通过优化过的架构和实施方案&#xff0c;不仅可以大大提升了整车开发的效率和灵活行以及功能落地的稳定性&#xff0c;同时也增加了系统的向上兼容性。 目前基于车载SOA系统的研发…

如何在Mendix中实现全文检索

功能背景 在日常的应用使用过程中&#xff0c;存在大量希望使用全文检索技术的场景&#xff0c;对资料库中的内容进行查询。Mendix默认的结构化查询方式&#xff0c;适合对特定业务实体进行类似数据库单表的基于SQL语句的查询。那如何在Mendix实现全文检索的功能呢&#…

Windows CPU部署llama2量化模型并实现API接口

目录 模型部署本地运行llama2使用fastapi实现API接口常用git仓库 模型部署 从huggingface下载模型 https://huggingface.co/ 放在本地文件夹&#xff0c;如下 本地运行llama2 from ctransformers import AutoModelForCausalLMllm AutoModelForCausalLM.from_pretrained(&q…

微软好听的tts语音包下载,粤语,韩语,日语

微软的 tts 语音库&#xff0c;都是离线的&#xff0c;所以速度非常快 但资源比较少&#xff0c;比如粤语&#xff0c;韩语&#xff0c;日语 我发现一个老牌语音技术供应商。 资源丰富&#xff0c;可自行下载免费或收费语音包。 网站&#xff1a;正版用户专用配套播音员下载…

gitee添加仓库人员

1.进入gitee项目&#xff0c;点击管理 2.点击仓库成员管理&#xff0c;展开仓库成员管理节点&#xff0c;选择所有或者开发者 3.点击添加仓库成员 4. 邀请用户

深度生成模型之GAN的评估 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN的评估图像翻译的应用1. 风格迁移2. 数据增强3. 经典图像任务4. 内容创作5. 人脸图像编辑6. 人体图像编辑 图像翻译模型1. 有监督图像翻译模型2. 无监督图像翻译模型3. 多域图像翻译模型 深度生成模型之GAN的评估 图像翻译的应用 1. 风格迁移 各类…