文章目录
1 RPC基础知识
软件架构
- 单一应用架构 (所有功能部署到一个服务器)
- 分布式服务框架 (RPC)
分布式系统是若干独立计算机(服务器)的集合,是建立在网络之上的服务器端一种结构。
分布式系统中的计算机可以使用不同的操作系统,可以运行不同应用程序提供服务,将服务分散部署到多个计算机服务器上。
RPC
RPC 【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,是一种技术思想,而不是规范。它允许程序调用另一个地址空间(网络的另一台机器上)的过程或函数,而不用开发人员显式编码这个调用的细节。调用本地方法和调用远程方法一样。
rpc 通讯是基于** tcp 或 udp 协议**,序列化方式(xml/json/二进制)
2 dubbo框架
2.1 dubbo概述
Apache Dubbo是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:
- 面向接口的远程方法调用
- 智能容错和负载均衡
- 服务自动注册和发现
基本架构:
- 服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
- 监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
dubbo支持的协议
官方推荐dubbo协议(默认端口20880),还支持http、webservice、redis
<dubbo:protocol name="dubbo" port="20880" />
2.2 直连式dubbo
消费者直接访问服务提供者,没有注册中心。消费者必须指定服务提供者的访问地址(url)。
1)创建服务提供者
配置pom.xml(com.alibaba.dubbo)
创建订单实体类
创建订单服务接口、接口实现类
创建dubbo配置文件
安装本地 jar 到 maven 仓库
2)创建消费者
编辑pom.xml(引入服务提供者依赖)
创建购买商品接口及实现类
创建dobbo配置文件
执行消费者
2.3 dubbo服务化最佳实践
分包:建议将服务接口、服务模型、服务异常等均放在公共包中
粒度:服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤
版本:每个接口都应定义版本号,为后续不兼容升级提供可能
<dubbo:service interface="com.xxx.XxxService" version="1.0" />
2.4 常用标签
公共标签
配置应用信息
<dubbo:application name=”服务的名称”/>
配置注册中心
<dubbo:registry address=”ip:port” protocol=”协议”/>
服务提供者
配置暴露的服务
<dubbo:service interface=”服务接口名” ref=”服务实现对象 bean”>
服务消费者
配置服务消费者引用远程服务
<dubbo:reference id=”服务引用 bean 的 id” interface=”服务接口名”/>
3 Zookeeper 注册中心
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo 提供的注册中心有如下几种类型可供选:
- Multicast 注册中心:组播方式
- Redis 注册中心:使用 Redis 作为注册中心
- Simple 注册中心:就是一个 dubbo 服务。作为注册中心。提供查找服务的功能。
- Zookeeper 注册中心:使用 Zookeeper 作为注册中心
推荐使用 Zookeeper 注册中心。
3.1 Zookeeper概述
Zookeeper 是一个高性能的,分布式的,开放源码的分布式应用程序协调服务。它是一个树形结构。ZooKeeper 树中的每个节点被称为Znode,每个节点可以拥有子节点,表示一个唯一服务资源。Zookeeper 运行需要 java 环境。
orderservice
userservice
shop-web
4 dubbo的配置
配置原则:在服务提供者配置访问参数。因为服务提供者更了解服务的各种参数。
关闭检查:dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=true。通过 check="false"关闭检查
关闭某个服务的启动时检查
<dubbo:reference interface="com.foo.BarService" check="false" />
关闭注册中心启动时检查
<dubbo:registry check="false" />
重试次数:消费者访问提供者,如果访问失败,则切换重试访问其它服务器,但重试会带来更长延迟。
<dubbo:service retries="2" />
<dubbo:reference retries="2" />
超时时间:由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时
导致客户端资源(线程)挂起耗尽,必须设置超时时间。
<dubbo:reference interface="com.foo.BarService" timeout="2000" />
<dubbo:server interface="com.foo.BarService" timeout="2000" />
版本号:区分不同的接口实现使用 version。
5 监控中心
dubbo 的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入 dubbo-admin。
通过 dubbo-admin 可以对消费者和提供者进行管理。可以在 dubbo 应用部署做动态的调整,服务的管理。
运行 dubbo-admin 应用
1) 先启动注册中心
2) 执行提供者项目
3) java -jar dubbo-admin-0.0.1-SNAPSHOT.jar 启动 dubbo 管理后台
4) 在浏览器地址栏输入 http://localhost:7001 访问监控中心-控制台。