二、分布式RPC框架Dubbo入门
2.1 Dubbo简介
-
Apache Dubbo是一款微服务开发框架,它提供了RPC通信与微服务治理两大关键能力(致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案)。这意味着,使用Dubbo开发的微服务,将具备相互之间的远程发现与通信能力,同时利用Dubbo提供的丰富服务治理能力,可以实现诸如服务实现、负载均衡、流量调度等服务治理诉求。同时Dubbo使高度可扩展的用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。 -
Apache Dubbo是一开高性能的、轻量级的Java RPC框架。其前身是阿里巴巴公司开源的一个框架,可以和Spring框架无缝继承。 -
简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)。 其核心部分包含:
- 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo官网地址:http://dubbo.apache.org
2.2 什么是RPC?
RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。
RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。
需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。
2.3 Dubbo能做什么?
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
Dubbo能做到:
- 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
- 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
- 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
2.4 什么是服务发现?
- 服务发现就是将服务提供者信息主动上报到服务注册中心进行服务注册,是微服务框架需要具备的关键能力。如将其提供的服务和对应的IP和端口注册到ZooKeeper中,服务调用者启动的时候,将ZooKeeper注册中心信息下拉倒服务调用者本机缓存,到需要用到到某个服务时,通过某种算法,去选择其中一个IP+端口,然后调用。
- 实现服务发现的方式有很多,Dubbo提供的是一种Client-Based的服务机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的Nacos、Consul、Zookeeper等,Dubbo自身也提供了对多种注册中心组件的对接,用户可以灵活选择。
2.5 Dubbo架构
Dubbo架构图(官方提供):
虚线都是异步访问,实线都是同步访问 蓝色虚线:在启动时完成的功能 绿色虚线(实线)都是程序运行过程中执行的功能
角色节点说明:
More Actions | 节点角色名称 |
---|
Provider | 暴露服务的服务提供方 | Consumer | 调用远程服务的服务消费方 | Registry | 服务注册与发现的注册中心 | Monitor | 统计服务的调用次数和调用时间的监控中心 | Container | 服务运行容器 |
服务发现的一个核心组件就是注册中心,Provider注册地址到注册中心,Consumer从注册中心读取和订阅Provider地址列表。因此要启用服务发现,需要为Dubbo增加注册中心配置。
|