当前位置: 首页 > news >正文

SpringCloud与SpringCloudAlibaba的比较

一. SpringCloud组件的升级与替换

过去两年里,由于SpringCloud Netflix原先的一些组件进入停更维护状态,因此这些组件逐渐被一些新技术所替代

项目

替换前

替换后

服务注册中心

Eureka

Zookeeper、Consul、Nacos(推荐)

配置中心

Config

Nacos

服务总线

Bus

Nacos

负载均衡

Ribbon

LoadBalancer

服务调用

Feign

OpenFeign、Dubbo

服务网关

Zuul

gateway

服务降级

Hystrix

Sentinel

二. 服务注册中心的比较

根据CAP理论对注册中心进行分类:

  • 保证CP(注重一致性):Zookeeper、Consul
  • 保证AP(注重可用性):Eureka
  • 既支持CP又支持AP:Nacos

Zookeeper通过Zab协议保证强一致性

  • 所有的写请求必须经过leader节点传递给其他follower节点。
  • 但是当leader节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。

Eureka保证高可用性

  • Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用,只不过查到的信息可能不是最新的(不保证强一致性)。
  • 此外,Eureka还有自我保护机制:如果在15分钟内超过85%的节点都没有正常的心跳(短时间内丢失过多客户端),那么Eureka就认为客户端与注册中心出现了网络故障(如不是服务真的不可用了),此时会开启自我保护机制:
  1. Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
  2. Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
  3. 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。

Nacos既支持AP模式又支持CP模式

  • AP模式:不需要存储服务级别信息且服务实例是通过nacos-clinet注册,且能够保持心跳上报,可采用AP模式。如SpringCloud服务。AP模式下只支持注册临时实例
  • CP模式:如需要在服务级别编辑或存储配置信息,则需使用CP模式,如K8S,DNS。AP模式下只支持注册持久化实例。

三. 服务调用框架的比较

Ribbon:
  • Ribbon是一套客户端负载均衡的工具,使用时需与RestTemplate配合使用
  • 使用是需要模拟http请求然后使用RestTemplate发送给其他服务,步骤比较繁琐。
  • 负载均衡:支持轮询、随机、空闲策略、响应时间策略
OpenFeign
  • 同样使用HTTP协议进行通讯
  • 使用时只需创建一个接口并使用注解(@FeignClient)的方式配置, 即可完成对服务提供方的接口绑定,是对Ribbon+RestTemplate的进一步封装
  • OpenFeign内部集成了 Ribbon,本质上是通过Ribbon完成负载均衡功能
Dubbo
  • 支持多种传输协议Dubbo、Rmi、http、redis。适合数据量小、高并发和服务提供者远远少于消费者的场景
  • 负载均衡:支持随机、轮询、活跃度、Hash一致性,负载均衡的算法可以精准到某个服务接口的某个方法。

四. 服务降级框架的比较

1. 关于服务降级的概念

  • 服务雪崩:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的”雪崩效应”.
  • 服务熔断:熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回"错误的响应信息当检测到该节点微服务调用响应正常后恢复调用链路。如Hystrix默认发现5秒内20次调用失败就会启动熔断机制。
  • 服务降级:某个服务故障后,向调用方返回一个符合预期的、可处理的备选响应(Fallback)。发生降级的场景:程序运行异常、服务调用超时、服务熔断、线程池/信号量被打满
  • 服务限流:限制服务的请求速率

2. Hystrix和Sentinel的比较

  • Hystrix本身就是一个非常出色的熔断降级框架,Sentinel则是在Hystrix的基础上对其进行进一步的升级
  • Sentinel使用更方便:Sentinel提供了一个非常简洁的控制台界面,在控制台界面中即可非常方便地配置限流降级规则
  • Sentinel功能更丰富:Sentinel除了降级和熔断功能外,还可以配置限流规则、热点规则、系统规则,且规则的配置项更多更精确,使用更加灵活
    在这里插入图片描述

参考文章:https://blog.csdn.net/qq_41889508/article/details/89526874utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=1619604578378_82005&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

相关文章:

  • PostgreSQL修炼之道笔记之准备篇(四)
  • Springboot整合Redis集群实战详解
  • 聚乙烯亚胺偶联乳清白蛋白/肌白蛋白/豆清白蛋白/蓖麻蛋白/豌豆白蛋白1b ( PA1b)科研试剂
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • springBoot整合SqlSessionTemplate使用
  • jieba—第三方中文分词函数库
  • Python桌面文件清理脚本
  • STM32开发板在RT-Thread中使用segger_rtt软件包
  • SpringBoot异常处理机制之自定义404、500错误提示页面
  • Debezium系列之:深入理解Debezium是如何处理bigint unsigned类型的字段
  • MySQL基础篇【第四篇】| 连接查询、子查询(嵌套)
  • 【Linux】如何实现虚拟机系统与本地系统的通信连接
  • MyBatis 操作数据库
  • Linux权限
  • 【深度学习】6-卷积过程中数据的结构变化
  • 「面试题」如何实现一个圣杯布局?
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • centos安装java运行环境jdk+tomcat
  • JavaScript-Array类型
  • python学习笔记 - ThreadLocal
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 从输入URL到页面加载发生了什么
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 搞机器学习要哪些技能
  • 码农张的Bug人生 - 初来乍到
  • 前端面试总结(at, md)
  • 通信类
  • 写给高年级小学生看的《Bash 指南》
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #Linux(Source Insight安装及工程建立)
  • (十六)串口UART
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 服务 ServiceController
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @31省区市高考时间表来了,祝考试成功
  • @Pointcut 使用
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [04] Android逐帧动画(一)
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [Android Studio] 开发Java 程序
  • [ARC066F]Contest with Drinks Hard
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C#]科学计数法(scientific notation)显示为正常数字