背景
什么是RPC?RPC协议
远程过程调用,对JAVA来说,也就是远程方法调用
RPC协议:指定了调用方法(http啊、socket啊)和数据格式。
springcloud、dubbo对比
1、dubbo是RPC框架,基于TCP的长链接,二进制传输,效率会高一些
2、springcloud是短连接,http协议,一般使用json报文,消耗大
dubbo只是springcloud的一个子集,解决的是分布式服务间调用。
Dubbo
官网定义
apache dubbo 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
dubbo工作流程图
0. start 服务端启动.
1. register注册 服务提供者在启动时,向注册中心注册自己提供的服务。
2. subscribe订阅 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. notify通知 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. invoke调用 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo为什么要与zookeeper/Consule一起使用?
1、 zookeeper用来注册服务和进行负载均衡
2、可以保证高可用,无论服务挂了还是新增了,zk可以通过心跳机制可以检测,通知到消费。
dubbo架构设计
1、proxy服务代理层: JDK 动态代理、javassist等代理机制
2、registry注册中心层:如常用的 Nacos、Consul、Zookeeper 等
3、protocol远程调用协议层:http、dubbo
4、transport网络传输层:支持netty、mina等网络传输框架
5、serialize数据序列化层:JSON、Hessian
dubbo的工作流程
1、start: 启动spring容器时,自动启动dubbo的provider
2、register:provider注册:IP、端口、接口列表、版本、协议
3、subscribe: 订阅,消费者启动后会订阅 (会将provider缓存本地)
4、notify:通知,provider信息发生变化(挂了),自动registry向Consumer推送通知
5、count:次数, 默认2分钟
注册中心的好处
原来对应集群,是通过ng做负载均衡。有了注册中心,可以通过调用方的框架负载均衡。
dubbo
背景:
对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。以及SOA(Service-Oriented Architecture)服务治理方案。远程服务调用的分布式框架
dubbo协议默认端口20880
服务通过配置到注册中心:dubbo://ip:20880
常用标签:
服务提供方: @service (这个是dubbo下的,能被注册发现)
消费方:@Reference ( 引入服务 可以有参数:timeout )
参数:loadbalance 负责均衡配置,可以消费、也可以随机
集群容错模式:
服务降级:
mock参数或者stub参数
泛化依赖