首先,如何实现两个系统之间通信呢?
如何实现远程通信?

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的详细介绍与理解相关推荐

  1. 阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景

    Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用 ...

  2. 继承的详细介绍与理解,看了就懂

    继承的介绍 继承的概念及定义 定义格式 继承基类成员访问方式的变化 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 ⭐复杂的菱形继承及菱形虚拟继承 总结 继 ...

  3. Spring Cloud的核心成员、以及架构实现详细介绍

    微服务架构系列 高并发架构系列:服务注册与发现的实现原理.及实现优劣势比较 阿里P8架构师谈:Restful.SOAP.RPC.SOA.微服务之间的区别 阿里P8架构师谈:微服务技术架构.监控.Doc ...

  4. 【深入理解TcaplusDB技术】详细介绍TDR表数据类型

    [深入理解TcaplusDB技术]详细介绍TDR表数据类型 数据类型 基本数据类型 目前对于C/C++/c#语言,支持的基本数据类型如下表所示: 类型名 分类 存储长度(字节) 取值范围 Byte 字 ...

  5. 理解索引:MySQL执行计划详细介绍

    为什么80%的码农都做不了架构师?>>>    最近有个需求,要修改现有存储结构,涉及查询条件和查询效率的考量,看了几篇索引和HBase相关的文章,回忆了相关知识,结合项目需求,说说 ...

  6. sentinel 限流熔断神器详细介绍

    一.限流熔断神器 sentinel 1.什么是 sentinel: 在基于 SpringCloud 构建的微服务体系中,服务间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素 ...

  7. Tempdb数据库详细介绍

    Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...

  8. autosar中com模块_详细介绍AUTOSAR各个模块作用PART1(OS,SYS)

    这片文章中我们详细讲解下每个模块的功能,上图是vector的autosar方案,每个模块的详细介绍后续会有单独文章进行讲解,请关注.以下是各个模块的简介 1.VHSM hardware Securit ...

  9. StringUtils常用方法+StringUtils详细介绍

    StringUtils用法+StringUtils详细介绍 博文来源:http://yijianfengvip.blog.163.com/blog/static/1752734322012122219 ...

最新文章

  1. ICinsights:中国芯片难达成既定的2025目标
  2. 【php】php编译pcntl以支持多进程
  3. ORACLE 多版本读一致性
  4. python中int和eval的区别_python中eval与int的区别浅析
  5. python使用ssh 中文_Python3制作简易SSH登录工具
  6. Minio 报错bucket name does not follow Amazon S3 standards
  7. 在OS X 10.9上安装Java(Mavericks)
  8. AxureRP7.0基础教程系列 部件详解Text Area 文本段落
  9. 使用内存文件映射MappedByteBuffer读超大文件可能会遇到的问题
  10. 最难数独的快速解法 - python
  11. r73750h和i79750h哪个好
  12. Python量化交易之预测茅台股票涨跌
  13. 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端工程师的?
  14. 【RabbitMQ】基础四:路由模式(Routing)
  15. 鸿蒙os跑分,预装鸿蒙OS 2.0!华为MatePad Pro2跑分曝光:麒麟9000、8GB内存
  16. 真正的程序员职场高手,都是怎么沟通的?
  17. QQ音乐 最新歌曲源 API(稳定)
  18. 观测风如何变成10m风
  19. 传感器为什么在低量程偏差大_高精度、超低量程的压力传感器概述
  20. cadence 查看器件丝印_一种Allegro软件中自动检查丝印摆放方向的方法与流程

热门文章

  1. 2021-07-14 Windows装ubuntu双系统的一些问题
  2. 【vue双向绑定原理浅析】
  3. 集合中所有子集元素之和
  4. 计算机学硕考数二的一本学校,软件工程专硕和学硕,专硕是考数二,学硕考数一吗...
  5. C++【坑人神器:绝地求生小游戏5.0】全新时代!
  6. 13.2.1 访问世界银行的数据
  7. 面试必考HTTP协议面试题(含答案)
  8. 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入 ”They are students.” 和 ”aeiou” ,则删除之后的第一个字符串变成 ”Thy r stdnts.”
  9. 验证码识别(Python)
  10. Openssl-rc2