一、Dubbo是用于分布式系统的框架所以我们要先了解什么是分布式
分布式系统是若干独立 计算机的集合,这些计算机对于用户来说就像单个相关系统。
老式系统(单一应用架构)就是把一个系统,统一放到一个服务器当中然后每一个服务器上放一个系统,如果说要更新代码的话,每一个服务器上的系统都要重新去部署十分的麻烦。
而分布式系统就是将一个完整的系统拆分成多个不同的服务,然后在将每一个服务单独的放到一个服务器当中。(三个臭皮匠赛过诸葛亮)
应用架构的发展演变
ORM
单一应用架构:一个项目装到一个服务器当中,也可以运行多个服务器每一个服务器当中都装一个项目。
缺点:1.如果要添加某一个功能的话就要把一个项目重新打包,在分别部署到每一个服务器当中去。2.如果后期项目越来越大的话单台服务器跑一个项目压力会很大的。会不利于维护,开发和程序的性能。
MVC
垂直应用架构:将应用切割成几个互不相干的小应用,在将每个小应用独立放到一个服务器上,如果哪一个应用的访问数量多就多加几台服务器。
RPC
分布式应用架构(远程过程调用):当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
SOA
流动计算架构:在分布式应用架构的基础上增加了一个调度、治理中心基于访问压力实时管理集群容量、提高集群的利用率,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键 (不浪费计算机资源)
二、什么是Dubbo
官网:http://dubbo.apache.org/zh-cn/index.html
高性能、轻量级、开源的Java RPC分布式服务框架。
特点
- 面向接口的远程方法调用
- 智能容错和负载均衡
- 服务自动注册和发现
RPC:远程过程调用。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
如下图为RPC过程:
① 服务消费方(client)调用以本地调用方式调用服务;
② client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
③ client stub找到服务地址,并将消息发送到服务端;
④ server stub收到消息后进行解码;
⑤ server stub根据解码结果调用本地的服务;
⑥ 本地服务执行并将结果返回给server stub;
⑦ server stub将返回结果打包成消息并发送至消费方;
⑧ client stub接收到消息,并进行解码;
⑨ 服务消费方得到最终结果。
总的来说就是通过网络连接进行远程调用
三、Dubbo的服务治理
调用关系说明:
1、服务容器启动
2、服务提供者向注册中心注册自己提供的服务
3、服务消费者向注册中心订阅自己所需要的服务
4、注册中心返回服务提供者的地址列表给消费者,如有改变, 则推送变更数据给消费者
5、服务消费者,基于软负载均衡算法,选一台提供者进行调用,如果失败,则再选一台调用
6、服务消费者和服务提供者定时每分钟发送一次统计数据到监控中心
dubbo属性加载顺序
JVM参数 > XML > properties