架构师成长之路之Dubbo接口一(快速入门)
一、什么是Dubbo接口
Dubbo 接口是阿里巴巴开源的致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,dubbo框架告别了传统的web service的服务模式,进而改用provider和consumer模式进行服务。为什么是高性能的呢?可以在某个服务器集群中提供单一专注的服务,这样不与其他服务混杂,同时dubbo接口有SOA调度通过监控每台服务器而实现负载均衡。consumer端无需关注provider端如何实现,只需在注册中心订阅即可到相应服务器请求服务,这样就实现了高性能和透明化。说到底,Dubbo接口就是一个分布式服务框架。
二、为什么要使用Dubbo接口(以下引用来自duboo接口官方文档)
“随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。”
这是官方给出的架构演变图
image.png
从图中看出,各种架构对应的服务数量了,dubbo接口也不是一定要是使用的。现在的公司,一般规模稍微大点的都会用到Dubbo,相信在学习了Dubbo接口,应聘时能更胜一筹。
三、Dubbo架构图解析
image.pngProvider 是服务的生产者,用于提供服务的;在服务启动时,向注册中心注册。
Container是服务容器,Container负责启动,加载,运行Provider,同时也监控Provider并发送统计给Monitor(监控)。
Consumer 是服务的消费者,在启动时向注册中心订阅服务,在收到注册中心的通知后在有需要调用的服务的情况向Provider请求服务。同时也需要将调用情况统计给Monitor。
Registry 是注册中心,负责服务的发现和服务的推送。
Monitor监控服务的消费生产情况,并进行治理调度。
四、Dubbo接口快速入手
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。
使用IDEA环境(你懂的)创建Maven工程
pom.xml 引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
即可,稍后我会给出详细的源代码
新建一个DemoService,这里定义一个公共接口
image.png新建一个实现类(Provider提供的服务)
image.png接下来就是Provider和Consumer的配置了
Consumer.xml
image.png
Provider.xml
image.png
消费方的Spring加载类 image.png
生产者的Spring加载类
image.png
先启动Provider 再启动Consumer(注意在命令行参数中添加-Djava.net.preferIPv4Stack=true )只使用ipv4
Provider日志
image.png
Consumer日志
image.png
首先注册中心收到广播说 192.168.10.688:20888有什么服务,这个时候生产者处于监听状态,然后Consumer去注册中心订阅,注册中心通知Consumer,当Consumer请求后进行处理,最后返回结果,断开连接,输出hello world。