文档库 最新最全的文档下载
当前位置:文档库 › 阿里云产品Dubbo

阿里云产品Dubbo

阿里云产品Dubbo
阿里云产品Dubbo

1 简介
Dubbo[ ]是一个分布式服务框架, 致力于提供高性能和透明化的 RPC 远程服务调用方案,
以及 SOA 服务治理方案。 DUBBO 的核心部分包含: ? 远程通讯: 提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型,序列化,以及 “请求-响应”模式的信息交换方式。 ? 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失 败容错,地址路由,动态配置等集群支持。 ? 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明, 使服务提供方可以平滑增加或减少机器
2 功能特性
DUBBO 的产品特性,包括: (1) 连通性: ? 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时 与注册中心交互,注册中心不转发请求,压力较小 ? 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到 监控中心服务器,并以报表展示 ? 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网 络开销 ? 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时

汇报调用时间到监控中心,此时间包含网络开销 ? ? 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件 通知消费者 ? 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提 供者列表 ? 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
(2) 健状性: ? ? ? ? ? ? 监控中心宕掉不影响使用,只是丢失部分采样数据 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务 注册中心对等集群,任意一台宕掉后,将自动切换到另一台 注册中心全部宕掉后,服务消费者通过本地缓存的服务提供者列表,与服务提供者通讯 服务提供者无状态,任意一台宕掉后,不影响使用 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
(3) 伸缩性: ? 注册中心为对等集群,可动态增加机器部署实例,注册中心发送新注册中心集群列表到所 有客户端(即自动发现新的注册中心) ? 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消 费者
(4) 升级性: ? 当服务集群规模进一步扩大,带动 IT 治理结构进一步升级,需要实现动态部署,进行流动

计算,现有分布式服务架构不会带来阻力:
3 原理逻辑示意图

节点角色说明: ? ? ? ? ? Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。
调用关系说明: 1. 2. 3. 4. 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者在启动时,向注册中心订阅自己所需的服务。 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变 更数据给消费者。 5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果 调用失败,再选另一台调用。 6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据 到监控中心。

4 应用框架(说明该产品的应用模式)
4.1 集群容错
各节点关系: ? ? ? ? ? 这里的 Invoker 是 Provider 的一个可调用 Service 的抽象,Invoker 封装了 Provider 地 址及 Service 接口信息。 Directory 代表多个 Invoker,可以把它看成 List,但与 List 不同的是,它的值 可能是动态变化的,比如注册中心推送变更。 Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含 了容错逻辑,调用失败后,重试另一个。 Router 负责从多个 Invoker 中按路由规则选出子集,比如读写分离,应用隔离等。 LoadBalance 负责从多个 Invoker 中选出具体的一个用于本次调用,选的过程包含了负 载均衡算法,调用失败后,需要重选
4.2 负载均衡
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。 Random LoadBalance ? ? 随机,按权重设置随机概率。 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较 均匀,有利于动态调整提供者权重。 RoundRobin LoadBalance

? ?
轮循,按公约后的权重设置轮循比率。 存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时 就卡在那,久而久之,所有请求都卡在调到第二台上。
LeastActive LoadBalance ? ? 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
ConsistentHash LoadBalance ? ? 一致性 Hash,相同参数的请求总是发到同一提供者。 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者, 不会引起剧烈变动。 ? ? 算法参见:https://www.wendangku.net/doc/c416551864.html,/wiki/Consistent_hashing 。 缺省只对第一个参数 Hash,如果要修改,请配置 ? 缺省用 160 份虚拟节点,如果要修改,请配置
4.3 线程模型
事件处理线程说明 ? ? 如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记 个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。 但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必 须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。

?
如果用 IO 线程处理事件,又在事件处理过程中发起新的 IO 请求,比如在连接事件 中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。
5 使用限制
Dubbo 运行 JDK1.5 之上。
6 部署依赖关系
6.1 依赖系统
缺省依赖 javassist、netty、spring 等包,但不是必须依赖,通过配置 Dubbo 可不依赖任何三方库 运行。
DUBBO 缺省依赖: ? log4j.jar 和 commons-logging.jar 日志输出包。 可以直接去掉,dubbo 本身的日志会自动切换为 JDK 的 java.util.logging 输出。 但如果其它三方库比如 spring.jar 间接依赖 commons-logging,则不能去掉。 ? javassist.jar 字节码生成。 如果,以及 ,则不需要。 ? ? spring.jar 配置解析。 如果用 ServiceConfig 和 ReferenceConfig 的 API 调用,则不需要。 netty.jar 网络传输。 如果, 则 换成 mina.jar 或 grizzly.jar。 如果,则不需要。
DUBBO 可选依赖: 以下依赖,在主动配置使用相应实现策略时用到,需自行加入依赖。 ? ? ? ? mina: 1.1.7 grizzly: 2.1.4 httpclient: 4.1.2 hessian_lite: 3.2.1-fixed

? ? ? ? ? ? ? ? ? ? ? ? ?
xstream: 1.4.1 fastjson: 1.1.8 zookeeper: 3.3.3 jedis: 2.0.0 xmemcached: 1.3.6 jfreechart: 1.0.13 hessian: 4.0.7 jetty: 6.1.26 hibernate-validator: 4.2.0.Final zkclient: 0.1 curator: 1.1.10 cxf: 2.6.1 thrift: 0.8.0
项目的 Maven 的 POM 文件增加 DUBBO 的依赖 如果想将此发布包用于你的 Maven 项目, 请在你项目的 Maven 的 POM 文件中加上以下依赖: 如果: Dubbo 已发布到 Maven 中央仓库中: https://www.wendangku.net/doc/c416551864.html,/maven2/com/alibaba/dubbo Pom.xml 文件如下: com.alibaba dubbo 2.5.3

6.2 系统间数据流关系
6.2.1 服务提供者暴露一个服务的详细过程
图是服务提供者暴露服务的主过程: 首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如: HelloWorldImpl),然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例, 到这一步就完成具体服务到 Invoker 的转化。接下来就是 Invoker 转换到 Exporter 的过程。 Dubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程(如上图中的红色部分),下面我们 以 Dubbo 和 RMI 这两种典型协议的实现来进行说明: ? Dubbo 的实现 Dubbo 协议的 Invoker 转为 Exporter 发生在 DubboProtocol 类的 export 方法,它主要是打开 socket 侦听服务,并接收客户端发来的各种请求,通讯细节由 Dubbo 自己实现。 ? RMI 的实现 RMI 协议的 Invoker 转为 Exporter 发生在 RmiProtocol 类的 export 方法, 它通过 Spring 或 Dubbo 或 JDK 来实现 RMI 服务,通讯细节这一块由 JDK 底层来实现,这就省了不少工 作量。

6.2.2 服务消费者消费一个服务的详细过程
上图是服务消费的主过程: 首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生成 Invoker 实例(如上图中的红色 部分),这是服务消费的关键。接下来把 Invoker 转换为客户端需要的接口(如:HelloWorld)。 关于每种协议如 RMI/Dubbo/Web service 等它们在调用 refer 方法生成 Invoker 实例的细节和上一章节 所描述的类似。
7 产品环境要求
7.1 开发环境
7.1.1 基础样例
7.1.2 开发指南
服务提供者
1.
(1)定义服务接口: (该接口需单独打包,在服务提供方和消费方共享) DemoService.java

package com.alibaba.dubbo.demo; public interface DemoService { String sayHello(String name); }
(2)在服务提供方实现接口:(对服务消费方隐藏实现) DemoServiceImpl.java package com.alibaba.dubbo.demo.provider; import com.alibaba.dubbo.demo.DemoService; public class DemoServiceImpl implements DemoService { public String sayHello(String name) { return "Hello " + name; } }
(3)用 Spring 配置声明暴露服务: provider.xml


(4)加载 Spring 配置 Provider.java import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); // 按任意键退出 } }
2.
服务消费者
(1)通过 Spring 配置引用远程服务 consumer.xml
(2)加载 Spring 配置,并调用远程服务:(也可以使用 IoC 注入) Consumer.java import org.springframework.context.support.ClassPathXmlApplicationContext; import com.alibaba.dubbo.demo.DemoService; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远 程服务代理 String hello = demoService.sayHello("world"); // 执行远程方法 System.out.println( hello ); // 显示调用结果 } }

7.2 部署环境
7.2.1 部署方式
1.
部署 DUBBO 注册中心(必选)
ZOOKEEPER 注册中心安装: ? ? ? 建议使用 dubbo-2.3.3 以上版本的 zookeeper 注册中心客户端 Zookeeper 是 Apache Hadoop 的子项目,强度相对较好,建议生产环境使用该注册中心 Dubbo 未对 Zookeeper 服务器端做任何侵入修改, 只需安装原生的 Zookeeper 服务器即可, 所有注册中心逻辑适配都在调用 Zookeeper 客户端时完成 安装: wget https://www.wendangku.net/doc/c416551864.html,/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz tar zxvf zookeeper-3.3.3.tar.gz cd zookeeper-3.3.3 cp conf/zoo_sample.cfg conf/zoo.cfg

配置: vi conf/zoo.cfg 如果需要集群,zoo.cfg 的内容如下:(其中 data 目录和 server 地址需改成你真实部署机器的信 息) 如果不需要集群,zoo.cfg 的内容如下:(其中 data 目录需改成你真实输出目录) zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/dubbo/zookeeper-3.3.3/data clientPort=2181 如果需要集群,zoo.cfg 的内容如下:(其中 data 目录和 server 地址需改成你真实部署机器的信 息) zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/dubbo/zookeeper-3.3.3/data clientPort=2181 server.1=10.20.153.10:2555:3555 server.2=10.20.153.11:2555:3555 并在 data 目录下放置 myid 文件:(上面 zoo.cfg 中的 dataDir) mkdir data vi myid myid 指明自己的 id,对应上面 zoo.cfg 中 server.后的数字,第一台的内容为 1,第二台的内容 为 2,内容如下: myid
1

2.
部署 DUBBO 监控中心(可选)
管理控制台为阿里内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控 制,权重调整,负载均衡,等管理功能/
安装: wget https://www.wendangku.net/doc/c416551864.html,/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz tar zxvf apache-tomcat-6.0.35.tar.gz cd apache-tomcat-6.0.35 rm -rf webapps/ROOT wget https://www.wendangku.net/doc/c416551864.html,/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1 .war unzip dubbo-admin-2.4.1.war -d webapps/ROOT 配置: (或将 dubbo.properties 放在当前用户目录下) vi webapps/ROOT/WEB-INF/dubbo.properties dubbo.properties dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.admin.root.password=root dubbo.admin.guest.password=guest 启动: ./bin/startup.sh 停止: ./bin/shutdown.sh 访问: (用户:root,密码:root 或 用户:guest,密码:guest) http://127.0.0.1:8080/

3.
部署服务提供者
把服务提供者安装 JAVA 程序的部署方式进行部署。 如果注册中心是 ZOOKEEPER, 把 dubbo.registry.address 的值改为 zookeeper://127.0.0.1:2181 (IP 地址配置为应用所在的主机 IP 地址) 。
4.
部署服务消费者
把服务消费者安装 JAVA 程序的部署方式进行部署。 如果注册中心是 ZOOKEEPER,把 dubbo.registry.address 的值改为 zookeeper://127.0.0.1:2181 (IP 地址配置为应用所在的主机 IP 地址) 。
7.2.2 运行及监控方法
需要管理 Dubbo 的服务时,首先要搜索到这个服务,然后打开它的管理页面:

1.
服务提供者页面
2.
服务消费者页面

3.
服务应用页面
4.
添加路由规则页面

5.
添加动态配置页面

最新阿里云产品报价

第1章云服务器价格总览 购买友情提示: 1)阿里云携手支付宝推出账单代扣服务啦!免费签约支付宝代扣服务,您将享受更安全便捷的服务体验。 2)高性能临时SSD盘已经商用,随机IOPS 1.2万,吞吐300MB/s,目前提供杭州/北京/深圳地域,1.6元/GB/月,0.0067元/GB/小时。 3)包月ECS已经支持带宽按流量计费(流量按照小时计费)类型,欢迎 您新购时选择,流量价格参考按量流量价格,如杭州流量价格0.8元/GB/小时。 4)晚上购买更省钱!2015年3月4日-2015年5月4日期间深圳地域按量2核4G、4核8G的cpu+内存配置晚20点-凌晨5点时间段为6折价格,欢迎有需求用户购买! o一、包年包月产品定价

二、按量付费价格 ?1、计费规则 1)询价金额如遇小数点,保留三位小数点,第四位四舍五入。如用户购买4 核心CPU /8GB内存/5GB数据盘,实际费用 =0.12*4+0.16*8+0.0009*5=1.7645元/时≈1.765元/时。 2)如用户享受了数据盘7折优惠,那实际费用 =0.12*4+0.16*8+0.0009*5*0.7=1.76315元/时≈1.763元/时,节省金额=原价-折后价=1.765-1.763=0.002元/时。 3)账单列表金额遇小数点,保留两位小数点,第三位舍掉,实际扣费金额以此 为准;账单详情金额遇小数点,保留三位小数点,第四位四舍五入。 ?2、欠费说明 1)按小时扣费后,“阿里云现金账户”出现欠费。即在整点扣费时,(现金账 户余额-账单中当周期整点结算的费用)<0时,按量付费的ECS将会欠费停机,从停机时刻起数据保留7天(即168小时,自行设置释放的除外),之后数据将会被系统自动释放,届时数据不再保留。 ?2)已设置自动释放时间的云服务器,会按照设置时间系统自动释放(按量付费服务器实例可能存在释放延迟,如果您设置释放时间点由于释放延迟进入下一计费周期,不会收取下一计费周期费用,只会针对您设置的释放时间点前的时间进行计费),若按小时扣费后,“阿里云现金账户”余额为0元,”按量付费“的云服务器不遵循设置的系统释放时间,依然会自动释放,数据不可恢 复。 ?3、提醒规则 1)余额不足提醒:以小时为单位整点结算后,若下一计费周期内账户可用余额 小于上一周期账单金额,则发短信和邮件提醒; 2)释放通知:因到期/欠费释放,系统会短信和邮件通知。

阿里云安全与管理

安全与管理 云盾 云盾是阿里巴巴集团多年来安全技术研究积累的成果,结合阿里云计算平台强大的数据分析能力,为客户提供DDoS防护,主机入侵防护,以及漏洞检测、木马检测等一整套安全服务。 购买云服务器ECS时已自动开通云盾 我们的优势 免部署,免维护,即时开启 无需采购昂贵的设备,免部署 无需复杂配置、免维护 开通云服务器即开启云盾安全防护 多层防御体系 网络层提供流量清洗中心 主机层提供客户端防护功能 应用,数据层提供防火墙功能 海量数据分析

收集攻击行为数据 深入挖掘海量数据 分析判断安全趋势决定防护决策 产品功能 云盾帮您轻松应对各种攻击、安全漏洞问题,确保云服务稳定正常。 十年攻防,一朝成盾。 DDoS防护 提供四到七层的DDoS攻击防护,防护类型包括CC、SYN flood、UDP flood等所有DDoS攻击方式。 主机入侵防护 提供包括密码暴力破解、网站后门检测和处理、异地登录在内的反入侵服务。 安全体检 提供Web漏洞检测、网页木马检测、端口安全检测等安全检测服务。 WEB防火墙 提供WEB攻击防护防火墙,能有效拦截SQL注入,XSS跨站等类型的WEB攻击。 案例 北京乐汇天下科技有限公司

北京乐汇天下科技有限公司,是一家专注于手机网游产品研发和运营的公司,拥有业内顶尖的游戏设计人才,拥有充满激情的研发团队,更拥有健康成熟的游戏理念。我们致力于通过数字娱乐方式提升人们的生活乐趣,为用户创造一流的娱乐产品和交流环境。 例如游戏作品 口袋海贼王 游戏类型:角色扮演 在线人数:100000人 使用产品:云服务器、负载均衡、内容分发网络、云盾、云监控 开发语言:Java、PHP 开发引擎:Cocos2d-x 如下不熟构架图: 架构解读 我们的web端更新是走cdn更新,应用服务器端的更新是批量脚本更新我们采用了多种数据库相结合的形式,既能保证数据的安全性和很高的可分析性,又保证了高效的运行效率,起初重要的玩家数据用了从库被动备份,随着玩家数据的变大,我们不得不取消从库备份,以节约不必要的内存成本,后来改成了每日备份到数据备份机器。游戏并采用了单服单库架构,以把以外损失和玩家损失降到最低。 客户反馈 我们的web端更新是走cdn更新,应用服务器端的更新是批量脚本更新,我们采用了多种数据库相结合的形式,阿里云既能保证数据的安全性,又保证了高效的运行效率。

阿里云混合云容灾服务

阿里云混合云容灾服务 产品简介 文档版本:20181122

混合云容灾服务产品简介 / 法律声明法律声明 阿里云提醒您在阅读或使用本文档之前仔细阅读、充分理解本法律声明各条款的内容。如果您阅读或使用本文档,您的阅读或使用行为将被视为对本声明全部内容的认可。 1.您应当通过阿里云网站或阿里云提供的其他授权通道下载、获取本文档,且仅能用于自身的合法 合规的业务活动。本文档的内容视为阿里云的保密信息,您应当严格遵守保密义务;未经阿里云事先书面同意,您不得向任何第三方披露本手册内容或提供给任何第三方使用。 2.未经阿里云事先书面许可,任何单位、公司或个人不得擅自摘抄、翻译、复制本文档内容的部分 或全部,不得以任何方式或途径进行传播和宣传。 3.由于产品版本升级、调整或其他原因,本文档内容有可能变更。阿里云保留在没有任何通知或者 提示下对本文档的内容进行修改的权利,并在阿里云授权通道中不时发布更新后的用户文档。您应当实时关注用户文档的版本变更并通过阿里云授权渠道下载、获取最新版的用户文档。 4.本文档仅作为用户使用阿里云产品及服务的参考性指引,阿里云以产品及服务的”现状“、“有缺 陷”和“当前功能”的状态提供本文档。阿里云在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但阿里云在此明确声明对本文档内容的准确性、完整性、适用性、可靠性等不作任何明示或暗示的保证。任何单位、公司或个人因为下载、使用或信赖本文档而发生任何差错或经济损失的,阿里云不承担任何法律责任。在任何情况下,阿里云均不对任何间接性、后果性、惩戒性、偶然性、特殊性或刑罚性的损害,包括用户使用或信赖本文档而遭受的利润损失,承担责 任(即使阿里云已被告知该等损失的可能性)。 5.阿里云网站上所有内容,包括但不限于著作、产品、图片、档案、资讯、资料、网站架构、网站 画面的安排、网页设计,均由阿里云和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权、商业秘密等。非经阿里云和/或其关联公司书面同意,任何人不得擅自使用、修改、复制、公开传播、改变、散布、发行或公开发表阿里云网站、产品程序或内容。此 外,未经阿里云事先书面同意,任何人不得为了任何营销、广告、促销或其他目的使用、公布或复制阿里云的名称(包括但不限于单独为或以组合形式包含”阿里云”、Aliyun”、“万网”等阿里云和/或其关联公司品牌,上述品牌的附属标志及图案或任何类似公司名称、商号、商标、产品或服务名称、域名、图案标示、标志、标识或通过特定描述使第三方能够识别阿里云和/或其关联公司)。 6.如若发现本文档存在任何错误,请与阿里云取得直接联系。

相关文档