先来了解一下这些年架构的变化,下面的故事是我编的。。。。

“传统架构”:很多年前,刚学完JavaWeb开发的我凭借一人之力就开发了一个网站,网站 所有的功能和应用都集中在一起,方便了我的开发同时也节省了成本。但是后来我的网站访问流量突然加大,我通过不断增加服务器来提高并发量,但是我发现随着服务器的增加服务能力先增加后下降。
不能通过硬件的方式解决问题的我,思考如何通过软件解决这个问题。

“分布式架构”:后来我按照功能点把系统拆分,拆分成独立的功能。单独为某一个节点添加服务器。通过系统之间配合完成整个业务逻辑。但是随着我的网站功能的日益完善,我发现各个模块有一些通用的业务逻辑无法共用,这样可不好,这时候我就在考虑为啥部直接来个面向服务呢???

“面向服务架构”:我把工程拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。这样我的网站不光开发效率快,而且在扩展和升级相关服务的时候更加灵活。

说了这么多“废话”,那么什么是dubbo?为什么要用dubbo呢?

什么是dubbo?

Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

上面我们提到了RPC,现在我们来理解一下RPC的一些相关概念。之前学习过操作系统的同学在进程那一章也会接触到这个东西。

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

既然有http请求为什么还要用rpc调用呢???

良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。

dubbo的一些相关资源

相信你看了dubbo的用户手册可能会明白dubbo被企业所喜爱的一部分原因,官方文档介绍的真的详细,很容易就可以学会如何简单的去使用dubbo到自己的项目中。

dubbo官网:http://dubbo.incubator.apache.org/

Dubbo Github地址:https://github.com/apache/incubator-dubbo

Dubbo用户手册(中文) :这篇文档详细讲解了dubbo的使用,基本涵盖dubbo的所有功能特性。如果你正依赖dubbo作为你业务工程的RPC通信框架,这里可以作为你的参考手册

Dubbo开发手册(中文):这篇文档的目标读者是对 dubbo 源码、设计有兴趣的,或者有意愿加入 dubbo 开发的人群。主要涵盖了 dubbo 的框架设计、扩展机制、编码规范、版本管理、构建等话题。

为什么要用dubbo呢???

先来看一张普通电商的简易架构图

当服务越来越多后,服务之间的依赖关系越来越复杂,服务 URL 配置管理变得非常困难另外还需要统计服务的调用量来进行分析,这些需求都可以使用dubbo来满足。

dubbo架构

上述节点简单说明:

  • Provider 暴露服务的服务提供方
  • Consumer 调用远程服务的服务消费方
  • Registry 服务注册与发现的注册中心
  • Monitor 统计服务的调用次数和调用时间的监控中心
  • Container 服务运行容器

调用关系说明:

  1. 服务容器负责启动,加载,运行服务提供者。

    1. 服务提供者在启动时,向注册中心注册自己提供的服务。
    2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
    3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

注册中心

一个完整的dubbo应该是包括注册中心的。
注册中心用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是IP地址和服务名称的对应关系。
dubbo官方提供了几种实现注册中心的方式

  1. Multicast 注册中心
  1. Zookeeper 注册中心
  2. Redis 注册中心

    1. Simple 注册中心

      另外官方明确推荐使用Zookeeper 注册中心的方式。

      装zookeeper的话,建议装在Linux机器上,我这里就不做讲解了。想要了解的可以去官网看看文档,因为dubbo的官方文档很详细了,建议看官方文档,大多数博客文章还是照着文档写的。

dubbo的使用

Dubbo用户手册(中文) 已经介绍的很详细了,所以这里我就不去班门弄斧了,想要了解的可以去看一下。

不说了,我要去吃饭了。。。想起来再补充。。。

欢迎关注我的微信公众号“Java面试通关手册”(坚持原创,分享美文,分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取):

你还不知“dubbo”是个什么东西吗???相关推荐

  1. 你还在为校园内丢失东西无处可寻而发愁吗?速戳进来

    同学同学,你还在为校园内丢失东西无处可寻而发愁吗?不要怕,我们来帮助你了. 阅读目录 团队组建--4+1的诞生 团队合作方式--功能团队模式 团队题目--校园失物信息管理系统 竞争性需求分析框架 技术 ...

  2. 网络运维与安全岗位月薪2.5w,您还不知道的前景!

    网络运维与安全岗位月薪2.5w,您还不知道的前景! 一.为什么学网络安全?标重点 1..市场巨大 每年各安全厂商收入高达400亿左右,随着5G的发展,万物互联时代,市场将进一步扩大. 2..薪资高 网 ...

  3. 【Android】你可能还不知道的elevation、以及Z值等

    Android你可能还不知道的elevation以及Z值等 elevation以及Z值是什么 有什么用处呢 影响View的阴影 影响View相互阻挡顺序 还有CardView [Android]你可能 ...

  4. 这5款堪称神器的插件,能让你的效率提升3-4倍!还不知有点遗憾

    职场办公你会使用一些好用的插件来提升效率,简化工作吗? 如果你还不知道哪些插件比较好用的话,可以试试下面这5款堪称神器的插件,功能强大,实用性高,最重要的是用好它们能让你的效率提升3-4倍!所以现在还 ...

  5. 你还不知道用 nvm 管理 node 吗

    你还不知道用 nvm 管理 node 吗 背景 一个同事让我帮他看看项目打包报错的问题,后来经测试,发现是他那边 node 版本太高导致的,然后他说降低版本需要卸载,就给他安利了一波 nvm. nvm ...

  6. android 签名包闪退,解决APP连续闪退的方案,你还不知道的签名方式

    原标题:解决APP连续闪退的方案,你还不知道的签名方式 用户在使用APP检测到连续闪退后,接下来要尝试对闪退进行修复,这里先分析可能的闪退原因: 闪退原因 连续闪退,可能是 App 启动关键路径中执行 ...

  7. 原来我还写过这么浪漫的东西

    今天倒腾电脑,居然找出了若干年前写在榕树下的几篇文章.看着当年的青涩,不禁失笑. 留下吧,强说愁的日子已经过去,欲语还休,欲语还休. 前世之一 500年,还是1000年以前呢-- 在那片苍翠的竹林里, ...

  8. html你可能还不知道的一些知识点

    一.标签语义化 html标签语义化是让大家直观的认识标签和属性的用途和作用,好处最主要的是对搜索引擎友好. Eg: 1.如果你想在页面中突出"奥巴马"这三个字,让搜索引擎重视它,如 ...

  9. 关于线程池,那些你还不知道的事

    本文转载于:https://www.cnblogs.com/hafiz/p/7589352.html#4010404 一.背景 最近在学习线程相关的知识,然后顺理成章少不了学习线程池,刚开始在没有深入 ...

最新文章

  1. c语言编程加密和解密,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...
  2. CF1142C U2
  3. 诊断网络层和应用层交互_基于SoC的数据采集与交互系统解决方案
  4. the vmware authorization service is not running
  5. 怎么在linux上修改mysql端口映射_如何在Linux中更改默认的MySQL / MariaDB端口
  6. 重构-改善既有代码的设计 (该书写于1999)培训之一
  7. java8+array+join_Fork/Join 框架详解(基于 JDK 8)
  8. oracle数据库dca,有关Oracle数据库
  9. python培训班靠谱吗-Python培训班多少钱
  10. 【渝粤教育】国家开放大学2019年春季 2766养羊技术 参考试题
  11. 向已经存在的Kubernetes集群中添加新的worker节点
  12. 推荐一款在线工具-程序员的工具箱
  13. VIJOS-P1625 精卫填海(背包)
  14. UIUC云计算概念(chord)
  15. AR红包大战,抢的不是钱而是发展机会
  16. 微信小程序把阿里icon变为组件
  17. 什么是虚拟机(virtual machine)
  18. mac 批量文件编码格式转换
  19. Python使用 plt.savefig 保存图片时是空白图片怎么解决
  20. Java里面的四种内存屏障

热门文章

  1. mysql 语句账号注入_mysql中SQL语句的注入问题
  2. java569_java如何实现这样一个程序
  3. python 类与类之间的关系
  4. SPH算法(求最小代价树)
  5. error C2065: “cout”: 未声明的标识符
  6. 测试范围不统一,引发的冲突问题
  7. F#基本类型——Records
  8. 诗与远方:无题(七)
  9. SpringBoot使用RequestBodyAdvice进行统一参数处理
  10. 21.1-21.4 memcached介绍,安装使用,状态查看