dubbo
- SOA架构原理
1.1背景
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
- 单一应用架构
- 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
- 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
- 垂直应用架构
- 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
- 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
- 分布式服务架构
- 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
- 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
- 流动计算架构
- 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
- 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。
1.2为什么要SOA?
(1)原始开发的缺点
(2)SOA的优点
1.3 SOA的实现方式
- 使用dubbo
(1)dubbo是什么?
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
(2)dubbo解决了哪些问题
- 将服务抽离单独的服务层
- 应用层和服务层同时支持集群,应用层和服务层可随时增加节点
- NIO的服务调用方式,解决性能问题
- 监控,以应对大并发阻塞
(3)dubbo的优势
- 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入;
- 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点;
- 服务自动注册与发现,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
(4)、类似的解决方案
淘宝:HSF、亚马逊:Coral
2.1、dubbo-admin管理控制台
2.2、dubbo-monitor监控中心
监控中心的主要使用就是查看dubbo提供者和消费者的信息,以及他们的调用情况。
1、下载dubbo-monitor
2、然后修conf/dubbo.properties
dubbo.registry.address=zookeeper://172.26.7.23:2181
dubbo.jetty.port=28080
3、执行start.bat,启动监控中心
4、在浏览器输入 http://localhost:28080,就可以进入监控中心
2.3、zookeeper注册中心
Dubbo一般使用Zookeeper作为其注册中心
1、下载zookeeper
2、然后修conf/zoo.cfg
dataDir=D:\\zookeeper-3.4.5\\data
dataLogDir=D:\\zookeeper-3.4.5\\log
3、执行zkServer.cmd,启动Zookeeper
2.4、Telnet工具
Dubbo执行通过命令行来查看服务方的信息
执行 telnet 127.0.0.1 20880,则可进入命令行界面
常用命令:
ls 显示服务列表。
ls –l 显示服务详细信息列表。
ps 显示服务端口列表。
ps –l 显示服务地址列表。
invoke com.bestpay.dubbo.demo.service.DemoService.sayHello("llx")
调用服务的方法。
2.5、dubbo开发
2.5.1、服务端的开发
(1)、配置dubbo信息
<!-- 提供方应用名称 -->
<dubbo:application name="account-service-provider" />
<!– dubbo注册中心-->
<dubbo:registry address="zookeeper://172.26.7.23:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
(2)、配置dubbo提供方服务
<!– 声明一个普通的Spring bean-->
<bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" />
<!-- 声明dubbo服务-->
<dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" />
(3)、启动dubbo服务
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"});
context.start();
2.5.2、客户端的开发
(1)、配置dubbo信息
<!– 消费者应用名称 -->
<dubbo:application name="account-service-consumer" />
<!– dubbo注册中心-->
<dubbo:registry address="zookeeper://172.26.7.23:2181" />
(2)、配置dubbo消费者
<!-- 可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.DemoService" />
2.5.3、dubbo整合SpringMVC
<dependency> <groupId>cn.test</groupId> <artifactId>test-maven-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> |
2.5、dubbo特性
(1)、异步调用
非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务。
应用场景:
1、一个业务逻辑中包含多个并行耗时服务调用
2、一个业务逻辑中存在操作时间较长,但后续步骤不依赖于该步骤完成的步骤(如客户下单购买产品后,需要更新产品的点击排名以及客户的使用习惯追踪等)。
(2)同步调用
(3)多注册中心
(4)多协议