RPC原理

一次完整的RPC调用流程(同步调用,异步另说)如下:
1)服务消费方(client)调用以本地调用方式调用服务;
2)client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
3)client stub找到服务地址,并将消息发送到服务端;
4)server stub收到消息后进行解码;
5)server stub根据解码结果调用本地的服务;
6)本地服务执行并将结果返回给server stub;
7)server stub将返回结果打包成消息并发送至消费方;
8)client stub接收到消息,并进行解码;
9)服务消费方得到最终结果。
RPC框架的目标就是要2~8这些步骤都封装起来,这些细节对用户来说是透明的,不可见的。

netty通信原理

Netty是一个异步事件驱动的网络应用程序框架, 用于快速开发可维护的高性能协议服务器和客户端。它极大地简化并简化了TCP和UDP套接字服务器等网络编程。

BIO:(Blocking IO)

NIO (Non-Blocking IO)

Selector 一般称 为选择器 ,也可以翻译为 多路复用器,
Connect(连接就绪)、Accept(接受就绪)、Read(读就绪)、Write(写就绪)

Netty基本原理

dubbo原理

dubbo原理-----框架设计

图例说明

  • 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。
  • 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。
  • 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。
  • 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。

各层说明

  • config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  • proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  • registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService
  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance
  • monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
  • protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
  • exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  • transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
  • serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

dubbo原理-----启动解析、加载配置信息

dubbo原理-----服务暴露

dubbo原理-----服务引用

dubbo原理-----服务调用

最新文章

  1. Nginx配置文件nginx.conf中文详解(转)
  2. 微信连wifi
  3. HDU3820 Golden Eggs(最小割)
  4. zedboard如何从PL端控制DDR读写(四)
  5. Asp.Net customErrors与httpErrors的区别
  6. Response返回JSON数据到前台页面
  7. 如何防止ASP.NET网站遭受CSRF的攻击
  8. Javascript 查找字符串中出现最多的字符和出现的次数
  9. yum puppet
  10. java语言基础特性
  11. 《VIM-Adventures攻略》前言
  12. C++ crash 堆栈信息获取(三篇文章)
  13. JavaScript+XML+VBA导出报表初步构想
  14. 与众不同 windows phone (23) - Device(设备)之硬件状态, 系统状态, 网络状态
  15. centos7 安装nodejs,git
  16. 卷积神经网络(CNN)在句子建模上的应用
  17. [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析
  18. 深圳共创力“研发管理&知识管理”高端研讨交流会在深圳举办!
  19. CodeFroces-- 514.div2.C-Sequence Transformation
  20. Bluetooth协议栈学习之SDP

热门文章

  1. vue语法糖
  2. pycharm for mac安装
  3. Mysql优化系列之数据类型优化
  4. shell脚本,循环的记录
  5. PropertyPlaceholderConfigurer的注意事项
  6. Linux用户管理 (3)
  7. minutia cylinder code MCC lSSR 匹配算法
  8. android 中的一些小问题
  9. JS 标签页切换
  10. idea-----使用相关快捷键