分布式理论

什么是分布式系统?

    在《分布式系统原理与规范》这本书中对分布式是这样定义的:“分布式系统是由若干个独立计算机的集合,这些计算机对于用户来说就像单个相关的系统”

    假设我们访问淘宝,假如淘宝为了性能,存在100个服务器,但是,我们正常访问都是固定对应的www.taobao.com这个域名 对于我们用户来说,它就像是一个单个系统。

    分布式系统是通过 网络 来进行通讯的,为了完成共同的任务而协调工作的计算机节点,一起组成的系统。分布式系统出现,目的是为了更廉价的,普通的机器完成单个计算机无法完成的计算,存储任务。说白了就是利用更多的机器,处理更多的数据。

    分布式系统 是建立在网络之上的软件系统。

    首先需要明确的是,只有当单个节点的处理能力无法完成日益增长的计算,存储的任务时候,并且硬件的提升(加内存、加磁盘,和使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统,因为分布式系统需要解决的问题本身就是和单机系统一样,而由于分布式系统多节点,通过网络通信的拓扑,会引入很多单机系统没有的问题,为了解决这些问题,又会引入更多的机制,协议,带来更多的问题!

    所以说分布式系统不应该一开始来考虑,最开始的就是单机,一般是大型应用会使用。用户一开始先访问代理服务器

什么是Dubbo

    随着互联网的发展,网站应用的规模不断矿大,常规的垂直应用架构已经无法应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不紊的进行。

    在dubbo官网上有这样一张图
springboot:Dubbo + Zookeeper + RPC概念
    单体应用架构
    什么是单体应用架构呢?就是说当一个网站流量很小的时候,只需要一个应用,将所有的功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查的工作量的数据访问框架(ORM)是关键。
springboot:Dubbo + Zookeeper + RPC概念
    适用于小型网站,小型管理系统,将所有的功能都部署到一个功能里,简单易用。

缺点:

  1. 性能扩展很麻烦
  2. 协同开发很麻烦
  3. 不利于升级维护

    垂直应用架构
    当访问量逐渐增大,单一应用增加机器带来的加速不理想,将应用拆分成互不相干的几个程序,来提升效率。此时,用于加速前端页面开发的web框架MVC是关键
springboot:Dubbo + Zookeeper + RPC概念
    通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职,更容易管理,性能扩展也很方便,更有针对性。
    缺点:
    公共模块无法重复利用,开发性的资源浪费

    分布式服务架构
    当垂直应用越来越多,应用之间的交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务的复用性以及整合的分布式服务框架(RPC)是关键
springboot:Dubbo + Zookeeper + RPC概念
    流动计算架构
    当服务越来越多,容量的评估,小于服务器资源的浪费等问题,逐渐显现,此时需要增加一个调度中心,基于访问的压力,实时的来管理 集群容量。此时,用于提高机器利用率的资源调度和治理中心(SOA)Service Oriented Architecture是关键

RPC

    什么是RPC?
    RPC(Remote Procedure Call)是指远程过程调用,是一种进程之间的通信方式,它是一种技术的思想,而不是规范,它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不是程序员显式编码这个远程调用的细节,即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

    也就是说,两台服务器,A和B,一个应用部署在A服务器上,想要调用B服务器上的应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为啥要使用RPC?就是无法在一个进程内,甚至一个计算机内。通过本地调用的方式完成的需求, 比如不同的系统之间的通讯,甚至不同的组织之间的通讯,由于计算能力需要横向拓展,需要在多台机器组成的集群上面部署应用RPC就像调用本地的函数一样去调用远程函数

    这里有一篇文章写的很好,可以帮助大家通俗的理解RPC:https://www.jianshu.com/p/2accc2840a1b

    RPC运行流程
springboot:Dubbo + Zookeeper + RPC概念
具体步骤
springboot:Dubbo + Zookeeper + RPC概念

Dubbo的概念

Dubbo官网

什么是dubbo?
Apache Dubbo 是一款高性能,轻量级的开源Java RPC框架,它提供了三大核心能力:

  1. 面向接口的远程方式调用
  2. 智能容错和负载均衡,以及服务自动注册和发现。

Dubbo基本概念
springboot:Dubbo + Zookeeper + RPC概念

  • 服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己所提供的服务

  • 服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需要的服务,服务消费者,从提供者的地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。如果调用失败,再选另一台进行调用。

  • 注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长链接推送变更数据给消费者

  • 监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

调用关系说明

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

  • 服务提供者 在启动时,向注册中心注册自己所提供的服务

  • 服务消费者 在启动时,向注册中心订阅自己所需的服务

  • 注册中心 返回服务提供者地址列表给消费者,如果有变更,注册中心将会基于长连接推送变更数据给消费者

  • 服务消费者 从提供者地址列表中,基于软负载均衡,选一台提供者进行调用,如果调用失败,再选另一台调用

  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

相关文章: