一、认识SpringCloud
1.SpringCloud基本概念
官网说明:Spring Cloud 为开发人员提供了在分布式系统中快速构建一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了样板模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。它们可以在任何分布式环境中很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和托管平台,如Cloud Foundry。
自我理解:Spring Cloud是一个基于Spring Boot实现的服务治理工具包,用于微服务架构中管理和协调服务的。Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。有了SpringCloud之后,让微服务架构的落地变得更简单。
2. SpringCloud常用组件
SpringCloud最核心的几大组件如下:
Netflix Zuul : 服务网关:微服务的访问入口,可以做(登录检查、权限检查、监控)有负载均衡
zuul作为服务网关,我们可以把它看作是微服务的大门,所有的请求都需要经过zuul之后才能到达目标服务,根据这一特性,我们可以把微服务公共的是事情交给zuul统一处理,如:用户鉴权,请求监控等。
Netflix Eureka: 注册中心:维护各个服务的通信地址的(服务名、IP、端口等)
当我们的微服务过多的时候,管理服务的通信地址是一个非常麻烦的事情,Eureka就是用来管理微服务的通信地址清单的,有了Eureka之后我们通过服务的名字就能实现服务的调用
Spring Cloud Config:分布式配置:将服务的配置文件进行统一管理
微服务架构中的服务实例非常的多,服务的配置文件分散在每个服务中,每次修改服务的配置文件和重新服务实例都是一个很麻烦的工作,Spring Cloud Config作为分布式配置管理中心就是用来统一的管理服务的配置文件。
Netflix Ribbon\Feign:客户端负载均衡:服务之间进行调用的
Ribbon和Feign都是客户端负载均衡器,它的作用是在服务发生调用的时候帮我们将请求按照某种规则分发到多个目标服务器上,简单理解就是用来解决微服务之间的通信问题。
注意:Feign针对Ribbon进行了封装
Netflix Hystrix:断路器:服务调用如果出现故障可以通过Hystrix来做一些处理
微服务的调用是非常复杂的,有的时候一个请求需要很多的微服务共同完成,那么一旦某个服务发生故障,导致整个调用链上的微服务全都出现异常,甚至导致整个微服务架构瘫痪。Hystrix就是用来解决微服务故障,保护微服务安全的组件。
Spring Cloud Bus:消息总线:给服务做消息广播的
消息总线是在微服务中给各个微服务广播消息的一个组件,我们使用消息总线构建一个消息中心,其他微服务来接入到消息中心,当消息总线发起消息,接入的微服务都可以收到消息从而进行消费。
Spring Cloud sleuth:微服务链路追踪:监控服务调用的线路、链路的
当我们的应用采用微服务架构之后,后台可能有几十个甚至几百个服务在支撑,一个请求请求可能需要多次的服务调用最后才能完成,链路追踪的作用就是来监控维护之间的调用关系,让程序员方便直观的感受到一个请求经历了哪些微服务,以及服务的请求时间,是否有异常等。
SpringCloud最核心的几大组件图解:
二、服务通信协议
1.RPC
RPC(Remote Produce Call)远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型
2.Http
Http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。 现在热门的Rest风格,就可以通过http协议来实现
注意:我们可以认为SpringCloud就是基于Http协议实现服务之间的通信。
3.如何选择
如果架构师选择Dubbo作为微服务开发框架,通信方式自然就是RPC,
如果架构师选择了SpringCloud作为微服务开发框架,那么通信方式自然就是基于Http协议
当然,如果服务的通信方式成为了微服务的性能瓶颈,那么架构师自然需要去考虑更换微服务的通信协议。
SpringCloud与Dubbo
1.Dubbo简介
Dubbo最早是有阿里巴巴提供的一个服务治理和服务调用框架,现在已经成为Apache的顶级项目,Dubbo跟SpringCloud最显著的区别是Dubbo的定位只是一个RPC框架,相比SpringCloud来说它缺少很多功能模块,如:网关,链路追踪等,所以往往在使用Dubbo作为微服务开发框架的时候,还需要去配合其他的框架一起使用,如:加入zookeeper作为注册中心。
SpringCloud与Dubbo的区别
下面是网上比较流行的Dubbo和Spring Cloud功能对比表:
功能 |
Dubbo |
SpringCloud |
服务注册中心 |
Zookeeper |
Spring Cloud Netfix Eureka |
服务调用方式 |
RPC |
REST API |
服务监控 |
Dubbo-monitor |
Spring Boot Admin |
熔断器 |
不完善 |
Spring Cloud Netflix Hystrix |
服务网关 |
无 |
Spring Cloud Netflix Zuul |
分布式配置 |
无 |
Spring Cloud Config |
服务跟踪 |
无 |
Spring Cloud Sleuth |
数据流 |
无 |
Spring Cloud Stream |
批量任务 |
无 |
Spring Cloud Task |
信息总线 |
无 |
Spring Cloud Bus |