Apache Dubbo 是一个高可用的,基于Java的开源RPC框架。
- Dubbo是最开始是阿里巴巴内部使用的RPC框架。
- 2011年对外提供。
- 2012年停止更新。
- 2017年开始继续更新。
- 2019年捐献给Apache,由Apache维护2.7以上版本。
虚线
虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。
Provider
提供者。编写持久层和事务代码。
Container
Registry
注册中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。
Consumer
消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以报页面等)。调用XXXXServiceImpl中的方法。
Monitor
监控中心。监控Provider的压力情况等。每隔2分钟Consumer和Provider会把调用次数发送给Monitor,由Monitor进行统计。
-
-
register:把Provider相关信息注册到Registry里
-
subscribe:Consumer从Registry中订阅Provider的信息
-
notify:通知给Consumer
-
invoke:Consumer根据Registry通知的信息进行调用Provider中方法。
-
Dubbo协议(官方推荐协议)
采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)
缺点:
大文件上传时,可能出现问题(不使用Dubbo文件上传)
RMI(Remote Method Invocation)协议
优点:
JDK自带的能力。
缺点:
偶尔连接失败.
Hessian协议
优点:
可与原生Hessian互操作,基于HTTP协议
缺点:
需hessian.jar支持,http短连接的开销大
1.Zookeeper(官方推荐)
1) 优点:
支持分布式.很多周边产品.
2) 缺点:
受限于Zookeeper软件的稳定性.Zookeeper专门分布式辅助软件,稳定较优
2.Multicast
1) 优点:
去中心化,不需要单独安装软件.
2) 缺点:
2.2.1 Provider和Consumer和Registry不能跨机房(路由)
3.Redis
1) 优点:
支持集群,性能高
2) 缺点:
要求服务器时间同步.否则可能出现集群失败问题.
4.Simple
1) 优点:
标准RPC服务.没有兼容问题
2) 缺点:
不支持集群.