dubbo是什么?
dubbo是一个服务治理框架,在微服务中,用于对各个服务进行服务治理。
RPC是什么?
RPC是一个通信协议,与http相同,是一个远程的通信协议。SpringCloud中采用的就是这个通信协议,通过服务注册进行调用不同服务器中的不同服务,他是一中技术思想但不是规范
一个RPC框架的好坏取决于在建立RPC通讯的效率以及进行数据序列化的效率
dubbo,dubbox,springCloud三者是什么?
Dubbo
1.dubbo是一个分布式的服务框架,致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。一般只有分布式的时候,才需要dubbo这样的分布式框架。通俗的讲,Dubbo就是服务调用的东西。
2.dubbo可以和spring无缝集成
Dubbox
1.Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo.
2.特征
1、连通性:
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
2、健状性:
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
3、伸缩性:
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
4、升级性:
当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力
springcloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
微服务架构的优点
1、易于开发和维护
2、单个微服务启动较快
3、技术栈不受限
4、按需伸缩
微服务架构面临的挑战
1、运维要求较高
2、分布式固有的复杂性
3、接口调整成本高(修改某一微服务的API,所有引用都要调整)
4、重复劳动(某一个功能未达到微服务的程度,各个服务会开发此功能。方案是公共组件,但多语言环境不一定适用)
总结
Dubbo实现了服务治理的基础,但是要完成一个完备的微服务架构,还需要在各环节去扩展和完善以保证集群的健康,以减轻开发、测试以及运维各个环节上增加出来的压力,这样才能让各环节人员真正的专注于业务逻辑。而Spring Cloud依然发扬了Spring Source整合一切的作风,以标准化的姿态将一些微服务架构的成熟产品与框架揉为一体,并继承了Spring Boot简单配置、快速开发、轻松部署的特点,让原本复杂的架构工作变得相对容易上手一些。
dubbo在以前是阿里的一RPC框架,中途停更,后来在SpringCloud的出现后,阿里再次进行更新,并且结合dubbox进行合并成dubbo2.6版本,也就是说,现在的dubbo也dubbox进行了整合,在技术选型的时候,就可以更加明了,不会出现考虑dubbox的特性在dubbo中没有了。
特性
dubbo可以自动进行负载均衡,根据设置的策略进行调用,确保服务资源最大化。
dubbo是面向接口代理的高性能RPC调用,在服务中,只需要调用对应服务的接口就行,他的最小维度是接口。
dubbo支持服务注册发现,支持多种,比如eureka,zookeep等
dubbo支持高度扩展,每一个dubbo组件可进行扩展
dubbo支持在运行期间支持流量的调度,实现灰度发布
dubbo提供了可视化的服务治理与运维,通过可视化的web界面,更直接明了的查看各个服务的状态
灰度发布就是在进行版本更新的时候,为了 保证系统的稳定性,可以先升级部分服务器,通过后期的使用用户体验反馈再进行更新操作,这就是灰度发布
dubbo的执行流程:
在dubbo中,存在注册中心,监控中心还有dubbo的框架容器。系统在通过container容器初始化的时候,provider服务提供者会向registry服务注册中心注册自己的服务列表而consumer服务消费者会从服务注册中心中获取到服务列表,如过provider中有服务进行下线了就会通过注册中的链接推送给consumer,告知服务异常情况,项目启动完成后,调用接口的一些服务信息,调用情况都会发布到monitor中进行记录。
开发provider服务提供者:
引入依赖
书写配置文件
这里的ref指向的就是具体实现的,也就是bean中注册的class地址
加载spring配置
这里就完成provider的配置了,consumer的配置与provider相同,不同的地方就是xml的配置
其他的一些配置可以查看dubbo的官方文档
上面就是spring的使用方法,下面介绍一下在SpringBoot中的使用
首先导入dubbo依赖
书写配置文件
在spring的里面是需要进行配置每一个暴露的接口名称的,但是在SpringBoot中的话就不需要进行一个个的配置了,可以通过**@Service的注解进行使用暴露 服务,但这是引用的dubbo下的service,然后需要在启动类中进行配置开启dubbo的注解功能,也就是通过注解@EnableDubbo支持
在SpringBoot的consumer中,出去配置一些基本信息之外
在注入service的时候,就需要通过注解@Reference来替换掉@Autowired**注解
同样需要在启动中设置开启dubbo的注解支持功能
在进行配置dubbo的信息的时候,可以同过多种方式进行配置信息,遵循如下覆盖约定
向下降级,依次使用,其中的xml配置在SpringBoot中可使用yml文件进行替代
还有许多的一个配置策略以及使用方法,可以参考dubbo的官方开发文档,进行配置使用