• 谈谈Dubbo的那些事


    首先声明,本文并不是什么代码实战类型的文章,适合于想对dubbo有更加全面认识的读者阅读,文章不会过于深奥,只是将一系列的知识点你串通起来,帮助读者温故而知新。

    RPC服务的介绍

    相信有过一些分布式开发经历的读者都有用过一些RPC框架,通过框架包装好之后提供的API接口调用远程服务,体验感觉起来就和调用本地服务一样轻松。这么方便好用的技术框架,在实际的开发过程中是如何包装的呢?
    很早的时候,国外的工程师设计了一种能够通过A计算机调用B计算机上边应用程序的技术,这种技术不需要开发人员对于网络通讯了解过多,并且调用其他机器上边程序的时候和调用本地的程序一样方便好用。A机器发起请求去调用B机器程序的时候会被挂起,B机器接收到A机器发起的请求参数之后会做一定的参数转换,最后将对应的程序结果返回给A,这就是最原始的RPC服务调用了。

    RPC调用的优势

    简单
    不需要开发者对于网络通信做过多的设置,例如我们在使用http协议进行远程接口调用的时候,总是会需要编写较多的http协议参数(header,context,Accept-Language,Accept-Encode等等),这些处理对于开发人员来说,实际上都并不是特别友好。但是RPC服务调用框架通常都将这类解析进行了对应的封装,大大降低了开发人员的使用难度。

    高效
    在网络传输方面,RPC更多是处于应用层和传输层之间。这里我们需要先理清楚一个问题,网络分层。RPC是处于会话层的部分,相比处于应用层的HTTP而言,RPC要比Rest服务调用更加轻便。

    常见的远程调用技术

    rmi
    利用java.rmi包实现,基于Java远程方法协议(Java Remote Method Protocol) 和java的原生序列化。
    Hessian
    是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 基于HTTP协议,采用二进制编解码。

    protobuf-rpc-pro
    是一个Java类库,提供了基于 Google 的 Protocol Buffers 协议的远程方法调用的框架。基于 Netty 底层的 NIO 技术。支持 TCP 重用/ keep-alive、SSL加密、RPC 调用取消操作、嵌入式日志等功能。

    Thrift
    是一种可伸缩的跨语言服务的软件框架。它拥有功能强大的代码生成引擎,无缝地支持C + +,C#,Java,Python和PHP和Ruby。thrift允许你定义一个描述文件,描述数据类型和服务接口。依据该文件,编译器方便地生成RPC客户端和服务器通信代码。

    最初由facebook开发用做系统内个语言之间的RPC通信,2007年由facebook贡献到apache基金 ,现在是apache下的opensource之一 。支持多种语言之间的RPC方式的通信:php语言client可以构造一个对象,调用相应的服务方法来调用java语言的服务,跨越语言的C/S RPC调用。底层通讯基于SOCKET。

    Avro
    出自Hadoop之父Doug Cutting, 在Thrift已经相当流行的情况下推出Avro的目标不仅是提供一套类似Thrift的通讯中间件,更是要建立一个新的,标准性的云计算的数据交换和存储的Protocol。支持HTTP,TCP两种协议。

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

    上边我们说到了RPC的远程调用发展历史,那么下边我们一起来深入探讨一下RPC的服务。
    首先我们来看看OSI的网络协议内容。

    OSI的七层网络模型
    对于OSI的七层网络模型我绘制了下边的这么一张图:


    下边是我个人对于这七层协议的理解:
    应用层 主要是对于服务接口的格式多定义,例如提供一定的终端接口暴露给外部应用调用。
    表示层 处理一些数据传输的格式转换,例如说编码的统一,加密和解密处理。
    会话层 管理用户的会话和对话,建立不同机器之间的会话连接。
    传输层 向网络层提供可靠有序的数据包信息。
    网络层 真正发送数据包信息的层面,提供流和拥塞控制,从而降低网络的资源损耗。

  • 相关阅读:
    Java基于SSM+JSP的服装定制系统
    274. H 指数
    用java写一个HttpClients的连接池实例,用PoolingHttpClientConnectionManager
    Dify配置https协议
    win11下linux虚拟机挂载文件夹共享遇到的坑
    一键自动化博客发布工具,用过的人都说好(cnblogs篇)
    重磅推荐,Github上一批优秀的「低代码」项目 ,点赞收藏按需取用
    国内最牛的Java面试八股文合集,不接受反驳 我这该死的魅力
    通俗易懂介绍如何组装json字符串
    计算机等级考试—信息安全三级真题九
  • 原文地址:https://blog.csdn.net/m0_73603837/article/details/126956240