Dubbo 01: 分布式架构 + RPC + dubbo框架简介

应用架构

  • 单一架构

    image

    做法:当网站流量很小时,应用规模小时,只需一个应用,将所有功能都部署在一起,以减少
    部署服务器数量和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。数
    据库的处理时间影响应用的性能
    
    适用范围:这种结构的应用适合小型系统,小型网站,或者企业的内部系统,用户较少,请求量不
    大,对请求的处理时间没有太高的要求。 将所有功能都部署到一个服务器,简单易用。开
    发项目的难度低。
    
    缺点:
    1、性能扩展比较困难
    2、不利于多人同时开发
    3、不利于升级维护
    4、整个系统的空间占用比较大
    
  • 分布式架构

    image

    当应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形
    成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用
    及整合的分布式服务框架(RPC)是关键。分布式系统将服务作为独立的应用,实现服务共享
    和重用
    
    分布式系统是若干独立计算机(服务器)的集合,这些计算机对于用户来说就像单个相
    关系统,分布式系统(distributed system)是建立在网络之上的服务器端一种结构。
    分布式系统中的计算机可以使用不同的操作系统,可以运行不同应用程序提供服务,将
    服务分散部署到多个计算机服务器上。
    

RPC

  • 概念

    RPC 【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,是一种技
    术思想,而不是规范。它允许程序调用另一个地址空间(网络的另一台机器上)的过程或函
    数,而不用开发人员显式编码这个调用的细节。调用本地方法和调用远程方法一样。
    RPC 的实现方式可以不同。例如 java 的 rmi, spring 远程调用等。
    RPC 概念是在上世纪 80 年代由 Brue Jay Nelson(布鲁·杰伊·纳尔逊)提出。使用 PRC 可以
    将本地的调用扩展到远程调用(分布式系统的其他服务器)。
    
  • 调用原理

    image

    RPC 调用过程:
    1.调用方 client 要使用右侧 server 的功能(方法),发起对方法的调用
    2.client stub 是 RPC 中定义的存根,看做是 client 的助手。stub 把要调用的方法参数进行序
    列化,方法名称和其他数据包装起来。
    3.通过网络 socket(网络通信的技术),把方法调用的细节内容发送给右侧的 server
    4.server 端通过 socket 接收请求的方法名称,参数等数据,传给 stub。
    5.server 端接到的数据由 serverstub(server 的助手)处理,调用 server 的真正方法,处理业务
    6.server 方法处理完业务,把处理的结果对象(Object)交给了助手,助手把 Object 进行序
    列化,对象转为二进制数据。
    7. server 助手二进制数据交给网络处理程序
    8. 通过网络将二进制数据,发送给 client。
    9.client 接数据,交给 client 助手。
    10.client 助手,接收数据通过反序列化为 java 对象(Object),作为远程方法调用结果。
    其他:
    rpc 通讯是基于 tcp 或 udp 协议
    序列化方式(xml/json/二进制)
    
  • 特点

    RPC 的特点
    1. 简单:使用简单,建立分布式应用更容易。
    2. 高效:调用过程看起来十分清晰,效率高。
    3. 通用:进程间通讯的方式,有通用的规则。
    

Dubbo框架

  • 简介

    Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源 Java RPC 框架,它提
    供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案、服务治理方案。
    
  • 特性

    image

    其中面向接口代理是指:调用接口的方法,在 A 服务器调用 B 服务器的方法,由 dubbo 实现对 B 的调用,无需关心实现的细节,就像MyBatis 访问 Dao 的接口,可以操作数据库一样。不用关心 Dao 接口方法的实现。这样开发是方便,舒服的。
    
  • dubbo框架的基本架构

    image

    架构组成:
    服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
    服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
    监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
    
    调用关系说明:
    1.服务容器负责启动,加载,运行服务提供者。
    2.服务提供者在启动时,向注册中心注册自己提供的服务。
    3.服务消费者在启动时,向注册中心订阅自己所需的服务。
    4.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
    
  • dubbo支持的协议

    支持多种协议:dubbo , hessian , rmi , http, webservice , thrift , memcached , redis。
    dubbo 官方推荐使用 dubbo 协议。dubbo 协议默认端口 20880
    使用 dubbo 协议,spring 配置文件加入:
    <dubbo:protocol name="dubbo" port="20880" />
    
posted @ 2022-10-18 20:55  rocket-raccoon  阅读(48)  评论(0编辑  收藏  举报