我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章,点击查看活动详情
学习这三大核心框架,最好方式是:源码 + 官网
Spring Cloud
Spring Cloud 是一套完整的微服务解决方案,主要实现为Spring Cloud Netiflix。以SpringBoot为核心,提供服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等功能,是微服务领域的里程碑基础设施。
Spring官网:spring.io
Spring Boot和Spring Cloud的关系
正如Spring基于JDK,Spring MVC基于Spring,Spring Boot基于Spring MVC一样,Spring Cloud也是基于上一级SpringBoot架构的。
有一些区别,具体细节如下所示:
- SpringBoot专注于开发方便的开发单个微服务;
- SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务,整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、为代理、事件总栈、全局锁、决策竞选、分布式会话等等集成服务;
- SpringBoot可以离开SpringCloud独立使用,开发项目,但SpringCloud离不开SpringBoot,属于依赖关系;
- SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架;
Spring Cloud的特点
- 服务注册和发现
- 路由
- 服务间调用
- 负载均衡
- 断路器
Spring Cloud的组件
- Netflix:核心组件
- Eureka:服务治理
- Config:分布式配置中心
- Hystrix:服务熔断
- Ribbon:客户端负载均衡器
- Feign:基于ribbon和hystrix的声明式服务调用组件
- Bus:消息总线
- Zuul:网关组件,提供智能路由、访问过滤等功能。
Spring Cloud Alibaba
Spring Cloud Alibaba 提供分布式应用开发的一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用 Spring Cloud 开发应用程序。使用 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,即可将 Spring Cloud 应用连接到阿里巴巴的分布式解决方案,并通过阿里巴巴中间件构建分布式应用系统。
Spring Cloud Alibaba五大核心组件
- Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Spring Cloud Alibaba全部组件
- Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
- Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
- Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
- Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。
其他配套组件
- Gateway:服务网关
- Openfeign:远程过程调用
- Sleuth + zipkin:链路追踪
- Caffeine:客户端缓存
- LoadBalancer:客户端负载均衡器
- Resilience4J:服务保护
Spring Cloud、Spring Cloud Alibaba、Dubbo的区别
Spring Cloud、Spring Cloud Alibaba、Dubbo的主要区别如下表格所示:
| 核心组件 | Spring Cloud | Spring Cloud Alibaba | Dubbo |
|---|---|---|---|
| 服务注册中心 | Eureka | nacos | zookeeper/nacos |
| 调用方式 | Rest API | Rest API | RPC |
| 服务网关 | Zuul | gateway | 无 |
| 断路器 | Hystrix | Sentinel | 不完善 |
| 分布式配置 | Spring Cloud Config | nacos | 无 |
| 分布式追踪系统 | Sleuth | Sleuth | 无 |
| 消息总线 | Bus | Bus RocketMQ | 无 |
| 数据流 | Stream | Stream | 无 |
| 批量任务 | Task | Task | 无 |
| 消息中间件 | 无 | RecketMQ | 无 |
| 分布式事务解决方案 | 无 | Seata | Seata |
| 分布式调度服务 | 无 | Alibaba Cloud SchedulerX | 无 |
| 短信平台 | 无 | Alibaba Cloud SMS | 无 |
Spring Cloud Alibaba框架,是对Spring Cloud Netiflix生态中部分停止维护的组件进行的扩展和替换。由于Eureka、Zuul、Hystrix等组件目前已不再开源,导致Spring开源基金会无法免费获取其授权,原Spring Cloud生态也就停止更新和维护了。因此阿里分别推出nacos、gateway、Sentinel来替代,并加入了Alibaba Cloud SchedulerX、Seata和Alibaba Cloud SMS等组件,功能相比Spring Cloud 更丰富。
注意:阿里开源微服务框架目的是为了推广阿里的产品,如果使用了Spring Cloud Alibaba的某一个组件,那么最好使用alibaba整个体系的产品。
Dubbo
Dubbo是阿里巴巴开源的一个高性能RPC服务框架,Dubbo经常与Zookpeer一起搭配使用。 使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。
- Dubbo:是一个远程调用服务的分布式框架,可以实现远程通讯、动态配置、地址路由等等功能。
- Zookpeer:是一个分布式的注册中心,提供服务注册和发布推送的功能。
其他RPC框架:Thrift、gRPC、OpenFeign
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
配置服务发布和调用端过多特别是集群的方式提供服务的时候,就会暴露许多的问题:增加节点需要修改配置文件、服务端机器宕机后不能被感知等。它可以通过集成注册中心,来动态地治理服务发布和服务调用。相当于把服务注册和发布推送的功能分摊给了(zookeeper)注册中心。
什么是RPC?
因为微服务中有多个服务之间相互调用,那么就诞生了RPC的概念:RPC的就是通过像调用本地服务一样远程调用另一台服务器上的服务来完成需求。
RPC(Remote Procedure Call)也叫远程过程调用,为了解决通信问题和远程控制调用问题而产生的技术。
rpc只是对底层协议的封装,对具体使用什么通信协议没有太多的要求
rpc主要包含两个方面,一个是传输协议,一个是序列化协议。
- 传输协议:grpc 用的就是http2协议,dobbo很多框架用的是tcp协议.
- 序列化协议:基于二进制的protobuf,基于字符的xml,json.
关于序列化协议,其实大rpc支持的二进制编码的序列化,用http也能实现,当然http头还是需要字符编码,但body可以用二进制编码。
为什么需要使用RPC框架?
首先要明确两个概念,rpc的中文全称是远程进程调用,意思就是一个机器调用另外一个机器的进程。更像是操作系统里的概念,而http是网络传输协议。
所以主要的原因在传输协议上。http传输有一个缺陷就是header在一个包中的占比会大,并且是字符编码的,所以会增加了很多无用的噪比。而tcp的报文头只有16byte相对来说要更小一些。
rpc更像是一个操作系统的概念,或者说是一个思想,那就是程序员只管像调用本地的函数一样取调用一个远程函数,而不用管IO。
所以这个问题应该是,为什么用自定义的tcp而不是http?
什么是http接口?
http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段。
优点是简单、直接、开发方便,利用现成的http协议进行传输。
什么是RPC接口?
但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了:
- 首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;
- 其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作;
- 第三个来说就是安全性;
- 最后就是流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。
RPC一般配合netty框架、spring自定义注解来编写轻量级框架,其实netty内部是封装了socket的,较新的jdk的IO一般是NIO,即非阻塞IO,在高并发网站中,RPC的优势会很明显。
Dubbo框架的缺点
由于 dubbo对 jar包的依赖性,许多大型项目都不能满足 dubbo的需求,所以 dubbo开发起来比较困难。
比较完成上面的三种微服务形态,其中三种生态相互依存,实际开发中都有用到的。至于为什么要用Spring Cloud Alibaba?这个问题其实很简单,因为Spring Cloud Aliaba很强大。强大的其实不是技术栈,真正强大的其实是生态!
欢迎点赞,谢谢大佬ヾ(◍°∇°◍)ノ゙