【微服务】------核心组件架构选型

news2024/11/21 1:41:13

1.微服务简介    

        微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦,从而降低系统的耦合性,并提供更加灵活的服务支持。

2.微服务技术选型

区域内容分发:CDN
网络负载均衡:lvs
网关负载均衡、反向代理:nginx+lua、Kong、Spring Cloud Zuul、Spring Cloud Gateway
服务网关:zuul,kong,springcloud gateway
熔断、降级、限流:Hystrix,Sentinel
服务注册与发现:eureka,nacos,consul,zookeeper
服务配置:nacos,springcloud config,consul
服务负载均衡:ribbon,Load Balancer
组件通信:feign,RestTemplate,Dubbo RPC,OpenFeign
消息队列:RabbitMQ、Kafka、ActiveMQ、RocketMQ
链路追踪:zipkin,Skywalking
服务部署:docker,kubernetes,jenkins
服务监控:Metrics+ELK,SpringCloud Admin
分布式日志:ELK
分布式存储:fastDFS、OSS
分布式事务:seata
分布式任务调度:SchedulerX,xxl-job
短信服务:SMS
邮件服务:mail

3.微服务核心组件


注册中心
服务注册
服务发现
服务网关
安全认证和授权
路由管理
协议转换
负载限流
服务熔断
监控
断路器状态管理
故障恢复
限流
分布式配置中心
​​​​​​​集中化配置管理
配置信息动态刷新
配置信息版本控制
配置信息安全管理
配置信息监控
​​​​​​​负载均衡
服务调用

微服务系统架构:

3.1.注册中心


        在微服务架构里主要起到了协调者的一个作用。

        关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务; 服务消费者启动时,在服务注册中心订阅自己所需要的服务; 消费者从提供者中调用服务;

注册中心一般包含如下几个功能:

服务发现:
        服务注册/反注册:保存服务提供者和服务调用者的信息
        服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能
        服务路由(可选):具有筛选整合服务提供者的能力。

服务配置:
        配置订阅:服务提供者和服务调用者订阅微服务相关的配置
        配置下发:主动将配置推送给服务提供者和服务调用者

服务健康检测
        检测服务提供者的健康情况

3.1.1.注册中心对比

3.2.服务网关


        也称为API网关,对外提供API接口,是服务调用的唯一入口,可以在这个组件中实现请求路由、用户鉴权、动态路由、灰度发布、负载均衡、负载限流等功能。API 网关是微服务架构中的入口,用于接收来自客户端的请求,并根据请求的内容路由到不同的微服务。常用的 API 网关包括 Nginx、Kong、Zuul 和 Spring Cloud Gateway 等。

例如包含上图中的Gateway功能:

路由管理;
安全认证;
流量控制;
日志监控;
熔断保护等功能。
权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。

路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。当然路由的目标服务有多个时,还需要做负载均衡。

限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大

负载均衡:服务提供方一般以多实例的形式提供服务,使用负载均衡能够让服务调用方连接到合适的服务节点。当多个服务提供者时,可以根据负载均衡算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。

3.2.1.主流API网关对比
        主流网关选择有 NGINX、Kong、Apache APISIX 和 Envoy 等,Java 技术栈的有 Netfilx Zuul、Spring Cloud Gateway、Soul 等。

3.3.分布式配置中心
        集中管理应用程序的配置信息,包括数据库连接、日志级别等,将本地化的配置信息(properties、yml、yaml等)注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。

3.4.服务容错(服务熔断)
 当微服务系统的一个服务出现故障时,故障会沿着服务的调用链路在系统中疯狂蔓延,最终导致整个微服务系统的瘫痪,这就是“雪崩效应”。为了防止此类事件的发生,微服务架构引入了“熔断器”的一系列服务容错和保护机制。

在微服务系统中,Hystrix 能够帮助我们实现以下目标:

保护线程资源:防止单个服务的故障耗尽系统中的所有线程资源。
快速失败机制:当某个服务发生了故障,不让服务调用方一直等待,而是直接返回请求失败。
提供降级(FallBack)方案:在请求失败后,提供一个设计好的降级方案,通常是一个兜底方法,当请求失败后即调用该方法。
防止故障扩散:使用熔断机制,防止故障扩散到其他服务。
监控功能:提供熔断器故障监控组件 Hystrix Dashboard,随时监控熔断器的状态。

通过断路器(也称熔断器)等一系列的服务保护机制,保证服务调用者在调用异常服务时快速地返回结果,避免大量的同步等待。

服务熔断可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。

服务熔断的实现,大体流程如下图所示:

3.5.负载均衡


负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。

当集群里的1台或者多台服务器down的时候,剩余的没有down的服务器可以保证服务的继续使用。
使用了更多的机器保证了机器的良性使用,不会由于某一高峰时刻导致系统cpu急剧上升。


3.5.1.负载均衡有好几种实现策略,
常见的有:

随机 (Random)
轮询 (RoundRobin)
一致性哈希 (ConsistentHash)
哈希 (Hash)
加权(Weighted)


3.5.2.负载均衡分类
常见的负载均衡系统包括:DNS负载均衡、硬件负载均衡和软件负载均衡。 

3.5.3.微服务实现负载均衡的三种架构模式
服务提供者端集中式负载均衡模式

这种模式在微服务架构模式之前普遍使用,指的是在消费者和服务提供方中间使用独立的代理方式进行负载,一般都是使用Nginx来实现。

  • 客户端负载均衡模式

在微服务架构中普遍使用,通过服务的注册中心将服务提供者的访问地址发送出去,服务消费者得到地址后在消费者端进行负载均衡,一般使用Ribbo来实现。

  • 边车负载均衡模式

下一代微服务架构中将对负载均衡进行沉淀到独立的进程中,最大的变化就是和业务应用完全解耦了。

3.6.其它


3.6.1.监控与日志


        微服务架构中的服务拓扑比较复杂,每个服务的调用链也比较长,因此需要进行分布式跟踪和监控,以便及时发现和解决问题。常用的分布式跟踪与监控组件包括 Zipkin、SkyWalking 和 Jaeger 等。

3.6.2.分布式数据存储


        由于微服务架构中的每个服务都需要独立部署和管理,因此数据的存储和访问也需要进行分布式处理。常用的分布式数据存储包括关系型数据库(如 MySQL、PostgreSQL)、NoSQL 数据库(如 MongoDB、Cassandra)和分布式缓存(如 Redis、Memcached)等

4.微服务架构有哪些


        一个微服务框架至少需要的组件有:网关、注册中心、微服务,如果想要通过服务来统一管理我们的配置文件,那么就还需要一个配置中心,目前国内企业使用的微服务架构,主要是这三个体系:

Spring Cloud
Spring Cloud Alibaba
ServiceMesh


5.常用微服务架构


5.1.SpringCloud与SpringCloud Alibaba的关系


        SpringCloud Alibaba是阿里研发的一套微服务架构的落地技术方案,可以很好的兼容SpringCloud,只需修改一些配置和注解,原生SpringCloud就可以接入到SpringCloud Alibaba中。
SpringCloud Alibaba提供了一些新组件,来落地微服务架构,阿里之所以要开发这套技术架构,主要是为了推广相关的产品,当然有付费产品。
下面看SpringCloud与Alibaba组件对比:

5.2.版本说明

5.2.1.组件版本关系

5.2.2.毕业版本依赖关系(推荐使用)

5.3.Spring Cloud&Dubbo系和阿里系组件对比

6.Spring Cloud Alibaba

 Spring Cloud Alibaba 系列组件,其中包含了阿里开源组件,阿里云商业化组件,以及集成Spring Cloud 组件

6.1.主要功能


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


服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。


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


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


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


分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。


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


6.2.阿里开源组件


        Spring Cloud Alibaba 的核心组件包括 Nacos、Sentinel、Dubbo 和 RocketMQ。下面将分别介绍这些组件及其架构设计和流程。

Sentinel:Sentinel 是一款轻量级的流量控制和熔断降级框架。把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。能够帮助用户解决高并发场景下的稳定性问题。它提供了实时的监控和告警功能,能够对服务的 QPS、RT、异常率等指标进行实时监控和统计,同时也支持基于规则的熔断降级、流量控制和系统保护。

Sentinel 的架构设计基于两个核心模块:流量控制和熔断降级。其中,流量控制负责限制服务的流量,避免系统被过载;熔断降级负责在服务异常或不可用时进行自动熔断,避免系统崩溃。

Nacos:Nacos 是一款开源的注册中心和配置中心,帮助用户动态服务发现、配置管理和服务治理,Nacos 的架构设计基于三个核心模块:命名服务(Naming)、配置服务(Configuration)和服务治理(Governance)。其中,命名服务负责服务的注册和发现,配置服务负责配置的管理和发布,服务治理负责服务的负载均衡和流量控制。

Nacos就是注册中心 + 配置中心的组合 等价于 Nacos = Eureka + config + Bus

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

Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。Dubbo 是一款高性能的 RPC 框架,能够帮助用户快速构建分布式应用程序。它支持多种协议和序列化方式,并提供了负载均衡、服务降级、集群容错等多种功能。

Dubbo 的架构设计基于三个核心模块:注册中心、提供者和消费者。其中,注册中心负责服务的注册和发现,提供者负责提供服务的实现,消费者负责调用服务的接口。Dubbo 的架构设计基于三个核心模块:注册中心、提供者和消费者。其中,注册中心负责服务的注册和发现,提供者负责提供服务的实现,消费者负责调用服务的接口。

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

6.3.阿里商业化组件 


        作为一家商业公司,阿里巴巴推出Spring Cloud Alibaba,很大程度上市希望通过抢占开发者生态,来帮助推广自家的云产品。

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

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

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

7.Spring Cloud各组件介绍


        Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其功能结构。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。

        SpringCloud为开发人员提供了快速构建分布式系统架构的工具,例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态等。作为开发人员,我们只负责写业务代码即可。SpringCloud为我们提供的轮子如下:

Spring Cloud Consul、Eureka、Nacos:服务治理组件,包括服务端的注册中心和客户端的服务发现机制。

Spring Cloud Config:集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。

Spring Cloud Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;

Spring Cloud Hystrix、Sentinel:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;

Spring Cloud Gateway、Zuul:API网关组件,对请求提供路由及过滤功能。

Spring Cloud OpenFeign:基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在SpringCloud 2.0中已经取代Feign成为了一等公民。;

Spring Cloud Security:安全工具包,对网关代理中的负载均衡OAuth2客户端及登录认证进行支持。

Spring Cloud Task:用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。

Spring Cloud Bus:用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置。

Spring Cloud Sleuth:SpringCloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。
Spring Cloud Stream:轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。

Spring Boot Admin、Spring Boot Actuator:Spring Boot Admin 可以对SpringBoot应用的各项指标进行监控,可以作为微服务架构中的监控中心来使用。

8.SpringCloud与SpringCloud Alibaba抉择


来自阿里云的说法:

❝ Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架,而 Spring Cloud Alibaba 的开源为开发者们提供了这套规范的实现方式。同时,Spring Cloud Alibaba 提供的完整的微服务组件、中文文档和本地化的开源服务提高了开发者们接入微服务的速率,并降低了后续的运维难度。


8.1.为什么使用SpringCloud Alibaba


        因为上面提到的SpringCloud官方版,或者说SpringCloud Netflix版一些重要组件如注册中心Euraka、Ribbon已经不再迭代更新了。

8.2.SpringCloud的几大痛点
SpringCloud部分组件停止维护和更新,给开发带来不便;
SpringCloud部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制;
SpringCloud配置复杂,难以上手,部分配置差别难以区分和合理应用。
8.3.SpringCloud Alibaba的优势:
阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用;
成套的产品搭配完善的可视化界面给开发运维带来极大的便利;
搭建简单,学习曲线低。
8.4.结合SpringCloud Alibaba最终的技术搭配方案
SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)
SpringCloud Alibaba - Nacos:配置中心(动态配置管理)
SpringCloud - Ribbon:负载均衡
SpringCloud - Feign:声明式HTTP客户端(调用远程服务)
SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)
SpringCloud - Gateway:API网关(webflux 编程模式)
SpringCloud - Sleuth:调用链监控
SpringCloud Alibaba - Seata:原Fescar,即分布式事务解诀方案

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

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

相关文章

爬虫学习第一天

爬虫-1 爬虫学习第一天1、什么是爬虫2、爬虫的工作原理3、爬虫核心4、爬虫的合法性5、爬虫框架6、爬虫的挑战7、难点8、反爬手段8.1、Robots协议8.2、检查 User-Agent8.3、ip限制8.4、SESSION访问限制8.5、验证码8.6、数据动态加载8.7、数据加密-使用加密算法 9、用python学习爬…

汽车疲劳测试试验平台技术要求(北重厂家)

汽车疲劳测试试验平台技术要求通常包括以下几个方面: 车辆加载能力:测试平台需要具备足够的承载能力,能够同时测试多种车型和不同重量的车辆。 动力系统:测试平台需要具备稳定可靠的动力系统,能够提供足够的力和速度来…

C++ 指针与数组

指针与数组名都是地址,可以混合使用访问数组元素。 用指针访问数组,计算数组元素之和。 总结 如图所示,获取数组起始地址的方法有两种, 其一为数组名, 其二为通过数组的首元素地址。指针变量p是通过数组名获得指向…

通用开发技能系列:SQL基础学习

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能 SQL基础 进行学习 1.数据库简介 1.1.数据库中的一些名称 DataBase:数据库 程序员只负责怎么维护存取数据,不管数据库是什么 DBA…

Deep Unsupervised Learning using Nonequilibrium Thermodynamics

就直接从算法部分开始了: 2 算法 我们的目标是定义一个前向(或者推理)扩散过程,这个过程能够转换任意的复杂数据分部到一个简单、tractable、分布,并且学习有限时间扩散过程的反转 从而 定义我们的生成模型分布。我们…

“人性化设计”技术概要

本文是由《埃森哲技术愿景 2024:“人性化设计”技术将通过提高生产力和创造力来重塑行业并重新定义领导者》这个文章来翻译解读的。原文地址如下,大家可以自行下载: 下载地址 其实看到这篇文章的时候,联想到这些年机器人的市场发展…

使用 HTMX 和 Bun 进行全栈 Web 开发

将 HTMX 放在前端,Bun 放在后端,然后将它们与 Elysia 和 MongoDB 连接起来,形成快速便捷的技术栈,使开发 Web 应用程序变得轻而易举。 Bun 和 HTMX 是目前软件领域最有趣的两个事情。 Bun 是一个速度极快的一体化服务器端 JavaSc…

SpringBoot快速入门笔记(3)

文章目录 一、MybatisPlus1、ORM2、添加依赖3、全局配置4、Navicat5、UserController6、CRUD操作7、BaseMapper8、两个注解 二、多表查询1、模拟用户订单2、通过用户查相关订单3、UserMapperNew4、查询订单和所属用户5、OrderMapper6、OrderController 三、条件查询四、分页查询…

爬虫 新闻网站 并存储到CSV文件 以红网为例 V2.0 (控制台版)升级自定义查询关键词、时间段,详细注释

爬虫:红网网站, 获取指定关键词与指定时间范围内的新闻,并存储到CSV文件 V2.0(控制台版) 爬取目的:为了获取某一地区更全面的在红网已发布的宣传新闻稿,同时也让自己的工作更便捷 对比V1.0升级的…

瑞吉外卖实战学习--14、菜品上传

添加菜品接口 前言效果图1、菜品分类查询接口2、上传图片和下载图片3、创建接收数据的Dto4、创建提交的方法 前言 本项目gitee位置:gitee网址 本篇文章是学习了添加菜品的总结,其中包括菜品分类的接口,图片上传接口,数据整体上传…

【Spring篇】Spring IoC DI

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring系列】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 前言一、IoC二、…

语义分割——自动驾驶鱼眼数据集

一、重要性及意义 环境感知:语义分割技术能够精确识别道路、车辆、行人、障碍物、交通标志和信号等各种交通场景元素。这为自动驾驶系统提供了丰富的环境信息,有助于车辆准确理解周围环境的结构和动态变化。决策规划:基于语义分割的结果&…

AI Kimi:帮助教师做好试卷命题

原文:https://www.toutiao.com/article/7353661304307778083/?log_fromcfd0a50014034_1712243146922 最近,Kimichat工具很火。这款软件不仅仅是一个聊天和阅读工具,还是一个强大的教学辅助工具。作为一位教师,尝试使用Kimichat&…

【React】useState为何返回数组而非对象

useState的正确语法如下 const [count, setCount] useState(0)通过打印可以看到useState返回一个数组,那么为何不返回对象呢 涉及到数组与对象间解构方式的差异 数组的解构:根据索引 const [a,,b] [1,2,3] console.log(a) // 1 console.log(b) // 3…

蓝桥集训之垒骰子

蓝桥集训之垒骰子 核心思想&#xff1a;矩阵乘法 f[i]存顶面数值 构造a矩阵 使得*f[i] f[i-1]a 则f[i] f[1] * an 快速幂优化 #include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int N 6,m…

xilinx AXI CAN驱动开发

CAN收发方案有很多&#xff0c;常见的解决方案通过是采用CAN收发芯片&#xff0c;例如最常用的SJA1000,xilinx直接将CAN协议栈用纯逻辑实现&#xff0c;AXI CAN是其中一种&#xff1b; 通过这种方式硬件上只需外接一个PHY芯片即可 上图加了一个电平转换芯片 软件设计方面&…

Unity:2D SpriteShape

1.1 简介 Sprite Shape 可以很灵活的更改sprite的轮廓。比如&#xff1a; 它由两部分组成&#xff1a;Sprite Shape Profile、Sprite Shape Controller&#xff0c;需要导入2D Sprite Shape Package. 1.1.1 Sprite导入要求 Texture Type - ‘Sprite (2D and UI)’.Sprite Mo…

【动手学深度学习】深入浅出深度学习之RMSProp算法的设计与实现

目录 &#x1f31e;一、实验目的 &#x1f31e;二、实验准备 &#x1f31e;三、实验内容 &#x1f33c;1. 认识RMSProp算法 &#x1f33c;2. 在optimizer_compare_naive.py中加入RMSProp &#x1f33c;3. 在optimizer_compare_mnist.py中加入RMSProp &#x1f33c;4. 问…

C#/WPF Inno Setup打包程序

Inno Setup介绍 Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年&#xff0c;现在已经更新到Inno Setup 6了。Inno Setup是一个十分简单实用的打包小工具&#xff0c;可以按照我们自己的意愿设置功能&#xff0c;稳定性也很好。 官方网址&#xff1…

考研人千万不能犯的错误——什么情况下求极限可以直接带入值?

博主最近在复习考研的过程中&#xff0c;做了武忠祥老师的每日一题发现有一个题型错的很集中&#xff0c;就是关于极限数值带入的问题&#xff0c;相信也有不少的宝子容易在这种题型上犯错&#xff0c;今天带大家梳理总结一下常见的计算极限时容易犯的错误 极限的四则运算定义…