先来了解一下这些年架构的变化,下面的故事是我编的。。。。git
“传统架构”:不少年前,刚学完JavaWeb开发的我凭借一人之力就开发了一个网站,网站 全部的功能和应用都集中在一块儿,方便了个人开发同时也节省了成本。可是后来个人网站访问流量忽然加大,我经过不断增长服务器来提升并发量,可是我发现随着服务器的增长服务能力先增长后降低。 不能经过硬件的方式解决问题的我,思考如何经过软件解决这个问题。github
“分布式架构”:后来我按照功能点把系统拆分,拆分红独立的功能。单独为某一个节点添加服务器。经过系统之间配合完成整个业务逻辑。可是随着个人网站功能的日益完善,我发现各个模块有一些通用的业务逻辑没法共用,这样可很差,这时候我就在考虑为啥部直接来个面向服务呢???面试
“面向服务架构”:我把工程拆分红服务层、表现层两个工程。服务层中包含业务逻辑,只须要对外提供服务便可。表现层只须要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。这样个人网站不光开发效率快,并且在扩展和升级相关服务的时候更加灵活。算法
说了这么多“废话”,那么什么是dubbo?为何要用dubbo呢?apache
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.incubator.apache.org/
Dubbo Github地址:github.com/apache/incu…
Dubbo用户手册(中文) :这篇文档详细讲解了dubbo的使用,基本涵盖dubbo的全部功能特性。若是你正依赖dubbo做为你业务工程的RPC通讯框架,这里能够做为你的参考手册
Dubbo开发手册(中文):这篇文档的目标读者是对 dubbo 源码、设计有兴趣的,或者有意愿加入 dubbo 开发的人群。主要涵盖了 dubbo 的框架设计、扩展机制、编码规范、版本管理、构建等话题。
先来看一张普通电商的简易架构图
当服务愈来愈多后,服务之间的依赖关系愈来愈复杂,服务 URL 配置管理变得很是困难另外还须要统计服务的调用量来进行分析,这些需求均可以使用dubbo来知足。
上述节点简单说明:
调用关系说明:
一个完整的dubbo应该是包括注册中心的。 注册中心用来注册服务和进行负载均衡,哪个服务由哪个机器来提供必需让调用者知道,简单来讲就是IP地址和服务名称的对应关系。
dubbo官方提供了几种实现注册中心的方式:
另外官方明确推荐使用Zookeeper 注册中心的方式。
Dubbo用户手册(中文) 已经介绍的很详细了,因此这里我就不去班门弄斧了,想要了解的能够去看一下。
欢迎关注个人微信公众号:"Java面试通关手册"(坚持原创,分享美文,分享各类Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取):。