dubbo的详细介绍与理解
首先,如何实现两个系统之间通信呢?
如何实现远程通信?
1、Webservice:效率不高基于soap协议。项目中不推荐使用。
2、使用restful形式的服务:http+json。很多项目中应用。如果服务太多,服务之间调用关系混乱,需要治疗服务。
3、使用dubbo。使用rpc协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数。
什么是dubbo
dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
• 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
• 此时,用于简化增删改查工作量的数据访问框架(ORM) 是关键。
垂直应用架构
• 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
• 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
分布式服务架构
• 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
• 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
什么是RPC?
rpc远程过程调用协议: 是JDK底层提出的协议, dubbo只是对这个协议的实现的一个框架技术.
rpc协议就是跨服务器, 跨tomcat, 从一个项目, 调用另一个项目中的方法.
流动计算架构
• 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
• 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。
总结:Dubbo就是资源调度和治理中心的管理工具。
Dubbo 就是类似于webservice的关于系统之间通信的框架,并可以统计和管理服务之间的调用情况(包括服务被谁调用了,调用的次数是如何,以及服务的使用状况)。
Dubbo的架构
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
1.服务容器负责启动,加载,运行服务提供者。
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
使用方法
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
单一工程中spring的配置
<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<bean id="xxxAction" class="com.xxx.XxxAction"><property name="xxxService" ref="xxxService" />
</bean>
远程服务:
在本地服务的基础上,只需做简单配置,即可完成远程化:
将上面的local.xml配置拆分成两份,
将服务定义部分放在服务提供方remote-provider.xml,
将服务引用部分放在服务消费方remote-consumer.xml。
并在提供方增加暴露服务配置dubbo:service,在消费方增加引用服务配置dubbo:reference。
发布服务:
<!-- 和本地服务一样实现远程服务 -->
<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<!-- 增加暴露远程服务配置 -->
<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />
调用服务:
<!-- 增加引用远程服务配置 -->
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" />
<!-- 和本地服务一样使用远程服务 -->
<bean id="xxxAction" class="com.xxx.XxxAction"><property name="xxxService" ref="xxxService" />
</bean>
注册中心
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。
Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
举个dubbo + zookeeper小例子
服务层发布服务:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 给当前项目服务起个名字 --><dubbo:application name="dubboxdemo-service"/><!-- 配置连接zookeeper的IP和端口 --><dubbo:registry address="zookeeper://192.168.200.128:2181"/><!-- 配置包扫描, 在这个包下面的实现类中使用@Service注解才会生效 --><dubbo:annotation package="cn.itcast.service" />
</beans>
表现层调用服务:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 注解驱动 --><mvc:annotation-driven ><!-- 将传输的字符串强制转换成utf-8编码, 防止中文乱码 --><mvc:message-converters register-defaults="false"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8" /></bean></mvc:message-converters></mvc:annotation-driven><!-- 给当前项目服务起个名--><dubbo:application name="dubboxdemo-web" /><!-- 配置连接zookepper --><dubbo:registry address="zookeeper://192.168.200.128:2181"/><!-- 配置包扫描, 只有在这个包下面才可以注入service --><dubbo:annotation package="cn.itcast.controller" />
</beans>
dubbo的详细介绍与理解相关推荐
- 阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景
Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用 ...
- 继承的详细介绍与理解,看了就懂
继承的介绍 继承的概念及定义 定义格式 继承基类成员访问方式的变化 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 ⭐复杂的菱形继承及菱形虚拟继承 总结 继 ...
- Spring Cloud的核心成员、以及架构实现详细介绍
微服务架构系列 高并发架构系列:服务注册与发现的实现原理.及实现优劣势比较 阿里P8架构师谈:Restful.SOAP.RPC.SOA.微服务之间的区别 阿里P8架构师谈:微服务技术架构.监控.Doc ...
- 【深入理解TcaplusDB技术】详细介绍TDR表数据类型
[深入理解TcaplusDB技术]详细介绍TDR表数据类型 数据类型 基本数据类型 目前对于C/C++/c#语言,支持的基本数据类型如下表所示: 类型名 分类 存储长度(字节) 取值范围 Byte 字 ...
- 理解索引:MySQL执行计划详细介绍
为什么80%的码农都做不了架构师?>>> 最近有个需求,要修改现有存储结构,涉及查询条件和查询效率的考量,看了几篇索引和HBase相关的文章,回忆了相关知识,结合项目需求,说说 ...
- sentinel 限流熔断神器详细介绍
一.限流熔断神器 sentinel 1.什么是 sentinel: 在基于 SpringCloud 构建的微服务体系中,服务间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素 ...
- Tempdb数据库详细介绍
Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...
- autosar中com模块_详细介绍AUTOSAR各个模块作用PART1(OS,SYS)
这片文章中我们详细讲解下每个模块的功能,上图是vector的autosar方案,每个模块的详细介绍后续会有单独文章进行讲解,请关注.以下是各个模块的简介 1.VHSM hardware Securit ...
- StringUtils常用方法+StringUtils详细介绍
StringUtils用法+StringUtils详细介绍 博文来源:http://yijianfengvip.blog.163.com/blog/static/1752734322012122219 ...
最新文章
- ICinsights:中国芯片难达成既定的2025目标
- 【php】php编译pcntl以支持多进程
- ORACLE 多版本读一致性
- python中int和eval的区别_python中eval与int的区别浅析
- python使用ssh 中文_Python3制作简易SSH登录工具
- Minio 报错bucket name does not follow Amazon S3 standards
- 在OS X 10.9上安装Java(Mavericks)
- AxureRP7.0基础教程系列 部件详解Text Area 文本段落
- 使用内存文件映射MappedByteBuffer读超大文件可能会遇到的问题
- 最难数独的快速解法 - python
- r73750h和i79750h哪个好
- Python量化交易之预测茅台股票涨跌
- 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端工程师的?
- 【RabbitMQ】基础四:路由模式(Routing)
- 鸿蒙os跑分,预装鸿蒙OS 2.0!华为MatePad Pro2跑分曝光:麒麟9000、8GB内存
- 真正的程序员职场高手,都是怎么沟通的?
- QQ音乐 最新歌曲源 API(稳定)
- 观测风如何变成10m风
- 传感器为什么在低量程偏差大_高精度、超低量程的压力传感器概述
- cadence 查看器件丝印_一种Allegro软件中自动检查丝印摆放方向的方法与流程
热门文章
- 2021-07-14 Windows装ubuntu双系统的一些问题
- 【vue双向绑定原理浅析】
- 集合中所有子集元素之和
- 计算机学硕考数二的一本学校,软件工程专硕和学硕,专硕是考数二,学硕考数一吗...
- C++【坑人神器:绝地求生小游戏5.0】全新时代!
- 13.2.1 访问世界银行的数据
- 面试必考HTTP协议面试题(含答案)
- 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入 ”They are students.” 和 ”aeiou” ,则删除之后的第一个字符串变成 ”Thy r stdnts.”
- 验证码识别(Python)
- Openssl-rc2