如果你是服务器端程序员,如果你厌倦了业务逻辑CRUD的开发,如果看腻了Spring、Mybais等框架整合,那么就说明是时候需要一些突破了。本篇文章抛砖引玉,分享如何使用Dubbo框架、如何做一个SOA服务。
理论篇一、Dubbo框架
Dubbo框架是阿里巴巴SOA服务化治理方案的核心框架。具体一些概念可以直接戳官网 http://dubbo.io/
这里简要说明一下(摘自官网):
1,为什么用Dubbo?
在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。
但是当服务越来越多的时候,缺点就会暴露出来:
1)服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
3)接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
于是Dubbo框架就应运而生,可以解决以上问题:
1)服务注册中心,动态的注册和发现服务,使服务透明,避免了大量的URL
2)消费方通过服务方提供的地址列表,实现负载均衡和Failover
3)统计服务的调用量、响应时间会做统计作为权重调整、机器数量规划的参考指标
2,所以,Dubbo必备的元素包括:
运营容器(Container)
服务器注册中心(Register)
服务提供方(Provider)
服务消费方(Consumer)
统计监控中心(Monitor)
二、SOA
SOA(service-oriented architecture) 面向服务的体系结构。
推荐书籍 《Enterprise SOA中文版:面向服务架构的最佳实战》
下载链接:http://pan.baidu.com/s/1o87G9Lo 密码:f0mf
SOA并不是一种架构技术,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
在Dubbo中的Provider和Consumer都是一个个的Service(服务),当然Dubbo框架自身中的Monitor也是服务。
SOA常见的结构如下:
应用程序前端:业务流程的所有者,应用层:APP、WEB等
服务库:管理多个SOA服务(Dubbo的Provider和Consumer)
服务总线:SOA服务的调度(Dubbo的Register和Container)
合约:服务实现功能的协议和约束
实现:服务业务的基础结构,包括业务逻辑和数据逻辑,对接口功能的实现
接口:对外公开的功能
业务篇上篇简单介绍了Dubbo和SOA的理论知识,可能大家理解的不是很深刻。
业务篇用某电商平台业务架构做个简单说明。
电商平台服务包括:
商品服务
订单服务
价格中心服务
...
应用程序前端可以有:PC站、M站、APP等
Dubbo+SOA的体现
1)Dubbo框架将这些服务需要进行注册,进行统一的暴露和监控;
2)而每个服务的结构都是SOA的模型;
3)由应用程序前端的服务进行消费;
以订单服务为例:
如,订单服务提供 下单接口(如createOrder)、参数(合约),和实现;
服务启动的时候,Dubbo框架会加载服务并注册,并将createOrder暴露给消费者;
应用程序前端服务(比如App、PC站)下单的时候,都可以消费(调用)createOrder接口,从而实现下单业务流程。
Dubbo可以监控不同时间段 App、PC站并发下单量,响应时间等等,及时调整机器数量和权重,实现利益最大化。
实战篇开发工具:Eclipse、Maven、zookeeper
链接:http://pan.baidu.com/s/1dEDfbB7 密码:fmfd
链接:http://pan.baidu.com/s/1i5p9Tnn 密码:51yk
1、源码下载
链接:http://pan.baidu.com/s/1slCur2P 密码:xa6m
2、说明
项目是maven构建,使用了 maven的继承、组合等技能。
通过Eclipse导入即可(import 选择 Existing Maven Project):
1),dubboProject是整个项目的一级项目,其中包含了dubbo-common、dubboDemo和dubboSoa
2),dubbo-common是所有项目依赖的底层java包,输出的是jar
3),dubboDemo是一个web应用,可以理解为应用程序前端
4),dubboSoa是其中一个服务,是二级项目;上文提到一个SOA服务是由接口(_api)、协议、客户端应用(_client)、服务实现(数据)组成(其中service使用了2种方式:_service 纯java服务,_service_server web应用);
5),dubbo的简单学习说明:dubbo-学习.xml;对于一些provider.xml 和 consumer.xml 的配置,可以参考此项目的源码;
6),dubboSoa_service的使用参考:readme.txt;
3,如何使用
1)方式1:在同一个项目中使用。在dubboDemo中依次运行provider.java和consumer.java。(直接在eclipse中打开java文件,右键 run as application 即可;前提需要启动zookeeper)
2)方式2:可以先运行 _service_server ,因为是web项目所以在tomcat中启动;
然后通过 _client去调用;
3)方式3:启动 dubboSoa_service (参考readme.txt),然后通过 _client 去调用
本篇文章对dubbo和soa做了简单的实战介绍,源码也比较简单,相信一般的程序员都是可以掌握的(阅读、运行demo是程序员最基本的技能咯)。
现在环境很好,开发技能的学习途径也比较多,所以对于程序员来说是个很好的机会。so,更多的技能就需要自己去钻研了!
热门评论
Dubbo架构图的调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo架构图的调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
链接:https://pan.baidu.com/s/1kWuPLIJ 密码:bz7c