一,dubbo是什么
dubbo简介
-
轻量级,高性能的RPC框架
-
并不是要称为一个微服务的全面解决方案
-
以java语言出名,目前还包含其他语言
dobbo现状:
-
全称是apache dubbo
-
微店,网易云音乐,考拉,滴滴,中国电信,人寿都在用
-
star有30k+个,fork有20k+个
二,RPC和http
RPC介绍
-
RPC–远程过程调用
-
早期单机时代:IPC(单个电脑运行的进程间相互通信,比如a有画图功能,b只需要去调用a的功能即可,但是只局限在自己的电脑上)
-
网络时代:把IPC扩展到网络上,这就是RPC(想要调用其他电脑上的功能,通过网络来传输,有了这个之后,多台电脑之间就可以相互通信了)
-
实现RPC很头疼,于是就有了RPC框架
-
实现效果:调用其他机器上的程序和调用本地的程序一样方便
常见的RPC框架
-
阿里的dubbo:性能好
-
新浪的montan:轻量级,便于理解
-
facebook的thrift:支持的语言多
-
各个框架都有各自的优缺点
http和RPC对比
-
它们就像普通话与方言,http是普通话,rpc是方言,http通用,没有很大的沟通和学习成本,给一个接口地址,调用传参大家都懂,但是它规定了比如请求头怎么写,传输有哪些要求,这样一来效率相对降低。如果是企业内部,使用RPC更加高效,传输和运行效率会更高。
-
普通话本质上也是一种方言,只不过它是官方方言,http和rpc在本质上并没有区别,只不过http有些优势被选为官方而已。
具体区别如下:
-
传输效率:rpc可以自己定制请求,可以让整体传输内容更少,这样效率更高。http会包含一些无用内容,使用传输效率相对较低
-
性能消耗,主要在于序列化和反序列化的耗时。RPC可以实现高效二进制传输,http大部分需要用json格式传递信息,需要把json格式转换为其他对象,这样相对来说比较耗时
-
负载均衡:PRC自带负载均衡策略,http需要借助其他组件,比如eginx
-
选型建议:
-
看看公司内部的技术栈是否统一,如果是java,php,可以选择http,因为学习成本低,通信起来也没用任何障碍。
-
技术栈非常统一,都是java工程师,而且希望程序性能好,用户对延迟非常敏感,这个时候可以选择RPC框架。
三,dubbo工作原理
-
服务容器负责启动,加载,运行服务提供者
-
服务提供者在启动时,向注册中心注册自己提供的服务
-
服务消费者在启动时,向注册中心订阅自己所需的服务
-
注册中心返回服务提供者地址列表给消费者
-
从提供者地址列表中,选一台提供者进行调用
-
提供者和消费者定期发送一次统计数据到监控中心