【重难点】【分布式 01】RESTful、RPC 对比、Dubbo、Spring Cloud 对比、Eureka、Zookeeper、Consul、Nacos 对比、分布式锁

文章目录

  • 【重难点】【分布式 01】RESTful、RPC 对比、Dubbo、Spring Cloud 对比、Eureka、Zookeeper、Consul、Nacos 对比、分布式锁
  • 一、RESTful、RPC 对比
    • 1.RESTful
    • 2.RPC
    • 3.对比
  • 二、Dubbo、Spring Cloud 对比
    • 1.Dubbo
    • 2.Spring Cloud
    • 3.对比
  • 三、Eureka、Zookeeper、Consul、Nacos 对比
    • 1.Eureka
    • 2.Zookeeper
    • 3.Consul
    • 4.Nacos
  • 四、分布式锁
    • 1.Zookeeper 实现分布式锁
    • 2.Redis 实现分布式锁

一、RESTful、RPC 对比

1.RESTful

REST(Representational State Transfer,表述性状态转移)指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是 RESTful

Web 应用程序最重要的 REST 原则是,客户端和服务器的交互请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知

在服务器端,应用程序状态和功能可以分为各种资源,资源向客户端公开。资源包括应用程序对象、数据库记录、算法等等。每个资源都是用 URI 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、POST、PUT、DELETE

特点

  1. 使用 URI 代表资源
  2. 使用标准的 HTTP 方法
  3. 通过操作资源的表现形式来操作资源
  4. 资源的表现形式是 XML 或者 HTML
  5. 客户端与服务器的交互请求之间是无状态的

2.RPC

RPC(Remote Procedure Call,远程过程调用)是一种进程间通信方式。允许像调用本地服务一样调用远程服务

RPC 框架的主要目标就是让远程服务调用更简单、透明。RPC 框架负责屏蔽底层的传输方式(TCP/UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程

3.对比

传输协议

REST 基于 HTTP 协议

RPC 一般基于 TCP 协议,也可以基于 HTTP 协议

传输效率

REST 大多使用 HTTP 1.1 协议,请求头中会包含大量冗余信息,如果是基于 HTTP 2.0 协议,效率会大大提高

RPC 一般使用自定义的 TCP 协议,可以减小请求报文体积,或者使用 HTTP 2.0 协议

性能消耗

REST 大部分通过 JSON 来实现,字节大小和序列化更消耗性能,如果是基于 HTTP 2.0 协议,性能消耗会降低

RPC 可以实现高效的二进制传输

二、Dubbo、Spring Cloud 对比

1.Dubbo

Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

2.Spring Cloud

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署

Spring Cloud 并没有重复制造轮子,它只是将各家公司开发得比较成熟、经得起实际考验得服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者流出了一套简单易懂、易部署和易维护得分布式系统开发工具包

3.对比

Dubbo 和 Spring Cloud 不能直接对比,Dubbo 是一款 RPC 框架,而 Spring Cloud 是一种微服务架构的一站式解决方案,Spring Cloud 也可以集成 Dubbo 实现 RPC

三、Eureka、Zookeeper、Consul、Nacos 对比

1.Eureka

Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务。此外,还有负载均衡和服务故障转移的功能

Eureka 包含两个组件:Eureka Server 和 Eureka Client。Eureka Server 是注册中心,每个服务都是一个 Eureka Client,需要在 Eureka Server 中进行注册

Eureka Server 通过复制、心跳检查和客户端缓存来确保系统的可用性

Eureka 遵循 AP 原则,因为 Eureka 集群没有主节点的概念,每个 Eureka 服务可以单独提供服务,不会出现重新选举的情况,也就无法保证系统的一致性

Eureka 目前已经停止开发

2.Zookeeper

Zookeeper 是一个分布式应用程序协调服务,提供的功能包括:统一命名服务、统一配置管理、统一集群管理

与 Eureka 不同的是,Zookeeper 遵循 CP 原则,在 Zookeeper 集群中,如果主节点挂掉了,为了保证数据一致性,就需要进行重新选举(Fast Paxos),这个选举过程通常是耗时比较长的,并且在选举期间整个系统都是不可用的,也就无法保证系统的可用性

3.Consul

Consul 用于实现分布式系统的服务发现与配置,使用 Golang 编写。Consul 内置了服务注册与发现框架、分布式一致性协议实现、健康检查、键值对存储、多数据中心方案

Consul 遵循 CP 原则,与 Zookeeper 类似,如果主节点挂掉了,也需要进行选举,但是使用的是更加简单的 Raft 算法,Raft 协议要求必须超过半数的节点都写入成功才认为注册成功

4.Nacos

Nacos 需要下载 Nacos 并且启动 Nacos Server,进行简单的配置就可以完成服务的注册发现。此外,Nacos 还支持动态配置服务,简单来说 Nacos 就是 Spring Cloud 注册中心 + Spring Cloud 配置中心

Nacos 默认遵循 AP 原则,也可以切换为 CP,加入选举机制

四、分布式锁

1.Zookeeper 实现分布式锁

  • Zookeeper 每接收到客户端的一个请求,就在 /locks 节点下创建一个临时顺序节点,按照顺序依次获取锁,处理完业务后删除临时节点
  • 每个临时节点都会判断自己是不是当前节点下的最小节点,是,就获取锁;不是,就监听前一个节点,一旦前一个释放了锁就可以获取锁

2.Redis 实现分布式锁

在 Redis 节点中设置一个 Key,如果 Key 存在,说明锁被占用,如果 Key 不存在,说明可以添加 Key 也就是获取锁,处理完业务后再将 Key 删除。我们可以使用 Redis 的 SETNX 命令来实现这个添加 Key 的操作

如果客户端获取了锁,但是在释放锁之前宕机了,就会导致锁永远无法释放。解决方案是在添加 Key 的时候为 Key 设置一个过期时间

但是这样又会引出另一个问题,锁被提前释放了。解决方案是让客户端在获取锁后立刻启动一个子线程给自己续命,这个子线程需要做的就是,在锁即将过期的时候就重新设置锁的过期时间

【重难点】【分布式 01】RESTful、RPC 对比、Dubbo、Spring Cloud 对比、Eureka、Zookeeper、Consul、Nacos 对比、分布式锁相关推荐

  1. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考)

    Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) 上面是我基于Spring Cloud ,Spring Boot 和 Docker 搭建的一个分布式日志系统. 目前已在我 ...

  2. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    上一篇文章,留了一个悬念,Config Client 实现配置的实时更新,我们可以使用 /refresh 接口触发,如果所有客户端的配置的更改,都需要手动触发客户端 /refresh ,当服务越来越多 ...

  3. Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务

    上一篇文章,讲了SpringCloudConfig 集成Git仓库,这一篇我们讲一下SpringCloudConfig 配和 Eureka 注册中心一起使用 在分布式系统中,由于服务数量巨多,为了方便 ...

  4. Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config

    在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config,它支持配 ...

  5. Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐

    http://blog.csdn.net/lc0817/article/details/53266212/ https://github.com/leoChaoGlut/log-sys 上面是我基于S ...

  6. Spring Cloud学习系列第六篇【分布式配置中心】

    今天来学习如何使用Spring Cloud Config在微服务中搭建一个分布式配置中心,使用了分布式配置中心之后,我们就可以通过它来管理应用资源与业务资源配置内容.Spring Cloud Conf ...

  7. Dubbo Spring Cloud 逆向分析服务注册事件变化的处理过程

    这篇介绍了如何从接收事件的方法逆向推出完整的事件处理过程,这个方法适合在解决具体问题或学习源码时,倒着把处理过程理顺. 起因 原来用的 Spring Boot + Dubbo 开发架构,在架构中有一个 ...

  8. spring cloud alibaba + tx-lcn 实现微服务的分布式事务管理

    Spring Cloud Alibaba官方文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md Sp ...

  9. b2b b2c o2o分布式电子商务平台源码 mybatis+spring cloud

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...

  10. Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh

    上一篇文章讲了SpringCloudConfig 集成Git仓库,配和 Eureka 注册中心一起使用,但是我们会发现,修改了Git仓库的配置后,需要重启服务,才可以得到最新的配置,这一篇我们尝试使用 ...

最新文章

  1. 使用List中的remove方法遇到的坑,不信你没有踩过!
  2. 如何选择正确的RAID级别
  3. java openjdk 卸载_java – 如何卸载OpenJDK?
  4. 理解正向代理与反向代理的区别
  5. SAP PP 中关于计划订单和生产订单的日期计算
  6. 基于libUSB的USB设备固件更新程序(下载数据)(转)
  7. postgresql主从备份_基于windows平台的postgresql主从数据库流备份配置
  8. 用 普通 用户欺骗登陆 获取 管理员的最高权限~~~~
  9. 操作系统swap对redis的性能的影响以及解决方案
  10. Linux 命令整理
  11. 《Java从入门到放弃》JavaSE入门篇:面向对象语法二(入门版)
  12. FTP连接报530错误(FTP Error: 530 User cannot log in, home directory inaccessible)
  13. 计算机基础技能应用查询中心,计算机基础应用教程
  14. 安装配置NTP服务器
  15. 传奇电子cq9跳高高、跳起来规则与操作技巧
  16. 创新金融科技:从零到一构建新房交易供应链金融服务 PPT分享
  17. 【高等数学】曲线的切线与法平面和曲面的切平面与法线
  18. CTF线下攻防赛总结
  19. premiere导入视频没有声音怎么办?快速解决方法,几步就搞定
  20. asic面试题目 英伟达_英伟达笔试题目ASIC|英伟达笔试题

热门文章

  1. php自动加载原理,php中的自动加载类机制原理
  2. yaml 数组_使用 YAML 保存游戏数据 !
  3. mlp参数调整_0基础搞懂自动驾驶传统算法与深度学习的鸿沟-PID控制算法与MLP优化方法...
  4. php 怎么配置邮件,PHP发邮件的配置_PHP教程
  5. kubernetes Service:让客户端发现pod并与之通信
  6. deployment:声明式的升级应用
  7. XML指南——XML元素
  8. python简说(十八)导入模块
  9. TX2017秋招笔试题之编码
  10. 20145236 《Java程序设计》 第6周学习总结