因为项目需要,最近在学习Dubbo框架,下面先将自己的一些理解以及使用Dubbo实现的一个demo镜像整理。
Dubbo出现的背景(来自官网介绍)
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
一.Dubbo是什么(来自官网介绍)
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
二.Dubbo能做什么
透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
三.Dubbo的主要构成
Dubbo主要构成包括
服务提供者(Provider):服务提供者暴露要提供的服务
服务消费者(Consumer):服务消费者负责消费提供者提供的服务
服务注册中心(Registy):服务注册中心可以理解为一个中转站,服务提供者将提供的服务注册的服务注册中心,服务消费者通过注册中心找到需要消费的服务
监控中心(Monitor):监控中心负责监控服务被调用的情况,如服务北调用的次数
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
使用Dubbo有什么好处
个人理解使用dubbo后主要的好处还是功能解耦,以前可能是很多业务耦合在一起,现在通过这种生产和消费的模式进行解耦,便于以后功能的升级和改造。
项目中用到的技术:Spring 、Dubbo、zookeeper、Maven、Tomcat
一.zookeeper安装
1.请从官网 下载zookeeper,下载完成后解压到制定目录(本人直接放到C:\zookeeper目录下了)然后找到zookeeper conf目录下的zoo_sample.cfg,将其改为zoo.cfg,因为zookeeper启动时是需要读取zoo.cfg中的配置的。
2.将zoo.cfg用文本编辑器打开,修改里面dataDir对应的路径指向自己系统中的一个目录(我是在C:\zookeeper目录下新增了一个文件夹),这个目录主要用来存储一个日志信息。
3.完成上述修改后,可以找到zookeeper bin目录下的zkServer.cmd打开即启动zookeeper
配置Dubbo Admin 该项目主要用监控Dubbo的服务提供者和服务消费者
在上述搜索框中输入你要查询的服务,如:com.acca.dubbo.service.TestService
dubbo admin羡慕可以通过网上找一个war进行下载(我是通过github下载dubbo项目,想自己通过Maven打包,发现总是打包失败,无奈自己在网上找了一个war放到了tomcat下)
启动顺序:一定要先启动zookeeper,并保存控制台为打开状态,之后才能启动tomcat
服务提供者
采用eclipse构建Maven项目provider
POM配置如下:pom内容赋值过来总是出现排版问题,无奈只能提供一个连接 ,请参照此链接中的配置即可
Service:
public interface TestService {
public String say(String name);
}
Service实现类
public class TestServiceImpl implements TestService {
public static final String HELLO = "Hello";
public String say(String name) {
return HELLO + name;
}
}
注册服务
public class TestServiceTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "application.xml" });
System.out.println("提供者服务已注册成功");
try {
System.in.read();// 让此程序一直跑,表示一直提供服务
} catch (IOException e) {
e.printStackTrace();
}}}
Spring 配置
至此服务提供者配置完成
服务消费者
采用eclipse构建Maven项目consumer
POM配置文件和上述服务提供者的配置文件基本相同,此处不再赘述
服务消费
public class ConsumerAction {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "application.xml" });
TestService testService = (TestService) context.getBean("testService");
String string = testService.say("dubbo");
System.out.println(string);
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}}}
Spring配置
至此服务消费者开发完成
参考文档:dubbo官网
网友评论