Dubbo 高性能轻量级的 RPC 框架
可以理解为三层,业务逻辑层提供接口和实现,RPC 层封装了 RPC 调用过程,负载均衡,集群容错,服务监控等,remoting 封装了 netty
面向接口代理的高性能 RPC 调用
智能容错和负载均衡
服务自动注册和发现
可视化服务治理和运维
———————————————
Dubbo 工作原理
服务启动的时候,服务提供者会连接注册中心注册服务,服务消费方会连接注册中心订阅服务
注册中心会根据订阅关系把服务提供者的信息返回给服务消费者,服务消费者会本地缓存服务提供者的信息
如果服务列表变更,注册中心会推送给消费者更新缓存
消费者会生成代理对象,代理支持负载均衡,定时向 monitor 发送接口调用次数和时间信息
服务消费者通过代理调用远程接口,服务提供者收到请求后,反序列化数据,通过代理调用具体接口的实现
———————————————
spring
服务提供方
<dubbo:application name=”user-service” />
<dubbo:registry address=”N/A” />
<!– 用 dubbo 协议在 20880 端口暴露服务 –>
<dubbo:protocol name=”dubbo” port=”20880″ />
<!– 声明需要暴露的服务接口 –>
<dubbo:service interface=”com.gupaoedu.book.dubbo.IUserService” ref=”userService” />
<!– 和本地 bean 一样实现服务 –>
<bean id=”userService” class=”com.gupaoedu.book.dubbo.UserServiceImpl” />
服务消费方
<dubbo:application name=”order-service” />
<dubbo:registry address=”N/A” />
<!– 生成远程服务代理,可以和本地 bean 一样使用 userService –>
<dubbo:reference id=”userService” interface=”com.gupaoedu.book.dubbo.IUserService”
url=”dubbo://192.168.13.1:20880/com.gupaoedu.book.dubbo.IUserService”/>
———————————————
springcloud
服务提供方
1.pom
com.alibaba.cloud/spring-cloud-starter-dubbo
2.application.properties
spring.application.name=spring-cloud-dubbo-sample
dubbo.protocol.port=20880
dubbo.protocol.name=dubbo
spring.cloud.zookeeper.discovery.register=true
spring.cloud.zookeeper.connect-string=192.168.13.106:2181
3.启动类
// 扫描当前注解所在包路径下的 @Service
@DubboComponentScan
4.dubbo 服务
// 发布远程服务
@Service
————————–
服务消费方
1.pom
com.alibaba.cloud/spring-cloud-starter-dubbo
2.application.properties
dubbo.cloud.subscribed-services=spring-cloud-dubbo-sample
spring.cloud.zookeeper.discovery.register=false
spring.cloud.zookeeper.connect-string=192.168.13.106:2181
3.服务
@Reference
private IHelloService helloService;
———————————————
集群容错 6种模式
@Reference(cluster = “failfast”)
————————-
Failover Cluster
失败自动切换其他节点 retries=2,适合查询
————————-
Failfast Cluster
只调用一次,失败就报错,适合增删改
————————-
Failsafe Cluster
只调用一次,失败忽略异常
————————-
Forking Cluster
并行调用多个服务,一个成功就返回
forks=2
————————-
Broadcast Cluster
广播调用所有服务,任一服务报错表示整体调用失败
———————————————
负载均衡 4种策略
@Reference(loadbalance = “RoundRobin”)
————————-
Random 随机算法
————————-
RoundRobin 轮询
————————-
LeastActive 最少活跃,处理慢的节点会收到较少的请求
————————-
ConsistentHash 一致性 Hash, 同参数的请求发送同一个服务实例
———————————————