Dubbo是一款高性能、轻量级的开源Java RPC(远程过程调用)框架,解决了分布式中的调用问题,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
为什么说Dubbo是高性能的?
高性能要从底层说起,既然是一个RPC框架,主要就是远程过程调用,提升性能最关键,最耗时的就是:序列化和网络通信。
序列化:本地对象在网络上传输,必须要实现Serializable接口,也就是必须序列化,序列化的方案有很多,比如,xml、json、二进制流...其中效率最高的就是二进制流,因为计算机就是二进制的,然而Dubbo采用的就是二进制流的方式
网络通信:不同于HTTP需要进行7步走(三次握手和四次挥手),Dubbo采用Socket通信机制,一步到位,提升了通信效率,并且可以建立长连接,不用反复连接,直接传输数据
Dubbo前世今生
Dubbo之前一直都作为Alibaba公司内部使用的矿机
2011年,Dubbo被托管到了GitHub上(开源)
2014年11月发布2.4.11版本宣布停止更新
2017年SpringCloud出世,Dubbo连续更新了几个版本
2018年除夕夜阿里将Dubbo贡献给了Apache基金会
2018年至今,Apache维护和更新Dubbo
Dubbo java RPC框架图
服务提供者(Provider):暴露服务的提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,在选另一台调用
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo支持的协议
Dubbo支持多种协议:dubbo、hessian、rmi、webservice、thrift、memcached、redis。
官方推荐使用Dubbo协议,Dubbo协议默认端口20880