dubbo入门第一篇
dubbo简单入门,快速搭建
互联网架构演变
互联网规模不断扩大,常规的垂直应用架构已经无法支持服务的正常使用,分布式服务架构的演变,可以保证在分布式服务间的调用不断的清晰明了。
-
单一应用架构
网站流量很小,只需一台机器,一个应用,将所有功能部署在一个应用中,用于简化增删改查工作量的数据访问(ORM)是关键。 -
垂直应用架构
访问量逐步增加,单一引用逐渐达到瓶颈(系统响应时间逐渐上升),提升效率的方法之一就是将应用拆分成互不相干的几个引用,来提升效率。此时加速前端页面开发的web框架(MVC)是关键 -
分布式服务架构
当垂直应用越来越多,应用间的交互不可避免,将核心的业务独立出来一个服务,逐渐形成稳定的服务中心,使前端应用更加快速的满足多变的市场需求。此时用于提高业务复用和分布式服务框架(RPC)是关键 -
流动计算架构
当服务月来越多,容量的评估,小服务资源浪费问题逐渐显现,此时需要增加一个基于访问压力实时管理集群容量,提高集群利用率。此时,提高机器利用率的资源调度和治理中心(SOA)是关键 -
注:
- ORM:是“对象-关系映射”(object/relationl Mapping)的缩写。 面向对象开发都是将一切实体看成是对象(Object),关系型数据库是通过实体间关系映射连接数据。 也就是说 ORM是通过实例对象的语法,完成关系型数据库的操作的技术。
- MVC:
M(mode) 模型-- 模型是对应的后台系统的逻辑代码(控制层后面的代码,带有处理逻辑和连接数据库内容)
V (view) 视图-- 视图层则是用户可以直接看到和体验的界面内容
C(control)控制-- 对应用户在视图上的行为进行处理。
RPC:remote procedure call 的缩写,翻译成中文则是:远程过程调用。 即有两台应用,通过远程的调用的方式,应用A—>应用B 拿到自己想要的东西。 - SOA:面向服务的架构。 对于分布式来说,SOA就是把服务拆分成独立部署的模块,可以通过服务间调用,但是不强制绑定,也就是说的解耦合。 通过多个服务间配合最终提供一系列功能,服务间通过网络调用,而非采用进程内调用的方式进行通信。
在大规模服务化之前,应用可以通过RMI和hession等工具。 简单的暴露和引用远程服务。通过配置URL的地址进行调用。当服务越来越多时,服务URL配置就变得困难。此时需要一个注册中心。动态地注册和发现服务,使服务的位置变得透明。通过消费方获取服务提供方地址列表,实现软负载和Failover。接着 服务调用量增大,服务容量问题暴露出来,这个服务需要多少机器支撑?什么时候该添加机器。为了解决这个问题,第一步,需要将服务每天的调用量,响应时间,都统计出来,作为容量规划的指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大过程中记录响应时间变化,直到响应时间达到阈值,记录此时的访问量。在以此乘以机器数反推总量。
dubbo中涉及角色说明
下面先来看看dubbo中框架的参与者吧 (图片是在dubb官网复制的)
dubbo中节点说明
provider: dubbo服务的提供者
consumer: dubbo服务中的消费之
registry: dubbo服务中的注册中心,provider在暴露服务是链接到registy上,以 方便被consumer查找可以提供服务的节点信息。consumer在启动是链接注册中心来获取provider的信息。
monitor: 统计服务的调用次数和调用时间的监控中心。
container: 服务运行容器
接下来开始写demo了 哈哈哈,就是这么快~
6. 安装zookeeper
mac: 控制台输入: brew install zookeeper
windows: 安装Zookeeper. 在官网http://zookeeper.apache.org/下载zookeeper.
我用的是mac所以这里就不展示Windows的zookeeper安装了 如果需要 请看 windows zookeeper安装
- 安装好zookeeper后,启动zookeeper
zkServer start
- 下边进入代码编写过程~
dubbo服务提供者
先写一个接口作为要暴露的方法
public interface HelloDubboProvider {
String sayHello(String name);
}
接口实现类
@Service
public class HelloDubboProviderImpl implements HelloDubboProvider {
@Override
public String sayHello(String name) {
return " hello, "+ name +" nice too meet you";
}
}
dubbo-provider的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-provider" owner="yichen"/>
<!-- zookeeper地址 protocol 注册中心类型 -->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper"/>
<!-- dubbo 提供者暴露的协议 和暴露的端口 统一有注册中心来管理,调用时不需要关注 -->
<dubbo:protocol name="dubbo" port="20881"/>
<dubbo:service interface="com.chenyi.dubbochen.api.HelloDubboProvider" retries="0" ref="helloDubboProviderImpl"/>
</beans>
dubbo-provider项目结构图
服务消费者代码
在spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="dubbo-provider-demo"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:reference id="helloDubboProvider" check="false" interface="com.chenyi.dubbochen.api.HelloDubboProvider" retries="0" />
</beans>
因为我本地没有对应的maven私服,无法上传jar包 本来 HelloDubboProvider应该单独写在一个jar中,被provider项目和consumer项目引用
我这里就放在了各自的项目中
原因则是 dubbo会为接口生成一个代理类,在真正调用的时候,通过代理类获取远程服务的信息进行调用,这个后续我们在继续了解
现在服务提供者和服务消费者都构建好了 ,我们还需要写一个调用的方法,在consumer服务中加上一个http接口
@RestController
public class HelloController {
@Autowired
private HelloDubboProvider helloDubboProvider;
@RequestMapping("/test")
public String hello(String name){
return helloDubboProvider.sayHello(name);
}
}
服务启动后,调用consumer的接口,效果图如下
对于注册的dubbo服务提供者我们可以通过dubboadmin来看到对应的服务提供者和消费者
访问 :dubbo官网
到最底下,选择下载dubbo-admin服务
官方最新的dubbo Admin的版本是前后端分离的 后端服务需要修改以下配置(右侧部分)
启动前端vue项目,我们还需要安装npm 同样在mac下的安装命令是:
npm install npm@latest -g
安装成功后,通过右键选择下图
点击下方 dev 即可启动vue
效果图如下:
点击详情可以看到 服务的提供者 和消费者的信息
就这样,一个简单的dubbo项目已经搭建完成了。当然在实际开发场景中,要遵循接口统一放置,并提供jar的方式,来避免重复的接口定义。后续会继续讲解dubbo的其它配置参数和源码实现的。
嘿嘿~,第一次记录自己学习的过程,不喜勿喷