1、RPC
RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。 需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。
2、Dubbo架构
节点 | 角色名称 |
---|
Provider | 暴露服务的服务提供方 | Consumer | 调用远程服务的服务消费方 | Registry | 服务注册与发现的注册中心 | Monitor | 统计服务的调用次数和调用时间的监控中心 | Container | 服务运行容器 |
虚线都是异步访问,实线都是同步访问 蓝色虚线:在启动时完成的功能 红色虚线(实线)都是程序运行过程中执行的功能
3、服务注册中心Zookeeper
Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。 Zookeeper树型目录服务: 流程说明: 1.服务提供者(Provider)启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的URL 地址 2.服务消费者(Consumer)启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址 3.监控中心(Monitor)启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者URL 地址
安装Zookeeper
下载地址:http://archive.apache.org/dist/zookeeper/ 安装步骤:(以3.4.6为例) 第一步:安装 jdk(略) 第二步:把 zookeeper 的压缩包(zookeeper-3.4.6.tar.gz)上传到 linux 系统 第三步:解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr 第四步:进入zookeeper-3.4.6目录,创建data目录 mkdir data 第五步:进入conf目录 ,把zoo_sample.cfg 改名为zoo.cfg cd conf mv zoo_sample.cfg zoo.cfg 第六步:打开zoo.cfg文件, 修改data属性:dataDir=/usr/zookeeper-3.4.6/data
启动、停止Zookeeper
进入Zookeeper的bin目录,启动服务命令 ./zkServer.sh start 停止服务命令 ./zkServer.sh stop 查看服务状态 ./zkServer.sh status 客户端连接 ./zkCli.sh
Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应 用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。
4、Dubbo管理控制台
在开发时,需要知道Zookeeper注册中心都注册了哪些服务,有哪些消费者来消费这些服务。我们 可以通过部署一个管理中心来实现。其实管理中心就是一个web应用,部署到tomcat即可。 安装步骤: (1)将资料中的dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下 (2)启动tomcat,此war文件会自动解压 (3)修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address对应的值需要对应当前 使用的Zookeeper的ip地址和端口号 dubbo.registry.address=zookeeper://192.168.134.129:2181 dubbo.admin.root.password=root dubbo.admin.guest.password=guest
操作步骤: (1)访问http://localhost:8080/dubbo-admin-2.6.0/,输入用户名(root)和密码(root)
5、 Dubbo相关配置说明
1、包扫描
服务提供者和服务消费者都需要配置,表示包扫描,作用是扫描指定包(包括子包)下的类。
<dubbo:annotation package="com.xxx.service" />
通常使用注解的方式进行包扫描,也可以使用xml文件的方式进行品配置
2、协议
一般在服务提供者一方配置,可以指定使用的协议名称和端口号。 其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。推荐使用的是dubbo协议。 dubbo 协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费机 器数远大于服务提供者机器数的情况。不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
3、负载均衡
负载均衡(Load Balance):其实就是将请求分摊到多个操作单元上进行执行,从而共同完成工作任 务。 在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性 Hash),缺省为random随机调用。 配置负载均衡策略,既可以在服务提供者一方配置,也可以在服务消费者一方配置,
@Service(loadbalance = "random")
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "hello " + name;
}
}
@Controller
@RequestMapping("/demo")
public class HelloController {
@Reference(check = false,loadbalance = "random")
private HelloService helloService;
....
}
|