开篇词 | 别老想着怎么用好RPC框架,你得多花时间琢磨原理

为什么要学习RPC?

RPC是解决分布式系统通信问题的一大利器。
RPC对网络通信的整个过程做了完整包装,在搭建分布式系统时,它会使网络通信逻辑的开发变得更加简单,同时也会让网络通信变得更加安全可靠。

如何学习RPC?

学习是一个通过不断解决问题来提升能力的过程,学习RPC可以采取“逐步深入”的方法:

  1. 摆脱现有封装好的框架,了解RPC基本原理以及关键的网络通信过程。
  2. 了解RPC框架中的治理功能以及集群管理功能。
  3. 对RPC活学活用,学习如何提升RPC性能以及在分布式环境下如何定位解决问题。

01 | 核心原理:能否画张图解释下RPC的通信流程

这一讲的标题就是一道很好的面试题呀!

我们平时工作中,可以熟练使用各种框架,但是,我们也需要掌握框架背后的基本原理。

什么是RPC?

RPC的全称是Remote Procedure Call,即远程过程调用。它帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地方法一样的体验,我们不需要因为这个方法是远程调用而需要编写很多与业务无关的代码。

RPC框架一般采用TCP作为数据传输协议。

RPC中的网络传输,会涉及到数据的序列化和反序列化。

RPC如何实现调用远程方法像调用本地方法一样的体验?

服务提供者给出业务接口声明,在调用方的程序里面,RPC框架根据调用的服务接口提前生成动态代理实现类,并通过依赖注入等技术注入到了声明了该接口的相关业务逻辑里面。该代理实现类会拦截所有方法调用,在提供的方法处理逻辑里面完成一整套的远程调用,并把远程调用结果返回给调用方,这样调用方在调用远程方法的时候,就获得了像调用本地接口一样的体验。

RPC通信基本流程图

RPC在现代应用架构中的位置是怎样的?

RPC是解决应用间通信的一种方式,无论是在一个大型的分布式应用系统中,还是在中小型系统中,应用架构都会沿着单体->微服务化的方向演进,这样,整个应用会被拆分成多个不同功能的应用或者服务,这些细粒度的应用或者服务可能会部署到多台服务器中,它们之间的通信,就会通过RPC进行,所以,我们可以说,RPC对应的是整个分布式应用系统,就像是“经络”一样的存在。

《RPC实战与核心原理》学习笔记Day1相关推荐

  1. RPC 实战与核心原理分析

    RPC 实战与核心原理分析 RPCX是一个分布式的Go语言的 RPC 框架,支持Zookepper.etcd.consul多种服务发现方式,多种服务路由方式, 例子 服务端 package maini ...

  2. 逆向工程核心原理学习笔记(六):实战开辟新内存区域写入缓冲区跳转修改字符串

    首先我们跳转到程序的入口点,然后观察 00401007      68 00ED4000   push    0x40ED00                         ;  Hello Wor ...

  3. 逆向工程核心原理学习笔记(五):实战“打补丁方法”修改字符串

    打补丁方法可以修复程序的BUG,给程序添加新功能. 打补丁的对象可以是文件,内存,数据,代码,等等... 我们今天就用打补丁的方法来把helloworld程序中的字符串改掉! 首先呢,OD载入程序, ...

  4. 【RPC实战与核心原理】-第19讲-分布式环境下定位问题

    作者在本篇就讲述了一个问题,就是[怎么在分布式环境下快速定位问题] 这个之所以会成为问题, 主要是有几个难点,假设有多个系统A->B->C->D,这样的系统调用,假设系统D出现了问题 ...

  5. 逆向工程核心原理学习笔记(十四):栈帧1

    栈帧的话,直接截了一些图,大家看一下就好了,理解起来很简单,就是简单的参数转存. 看完之后,我们需要用一个小程序来进一步学习我们的栈帧了. 下载地址:http://t.cn/RaUSglI 代码写法: ...

  6. 逆向工程核心原理学习笔记(七):总结

    首先就是上一节,我们尝试把修改后的代码保存后运行,发现不可以,. 这是由于我们修改的那部分缓冲区造成的. 可执行文件加大再到内存中兵役进程的形式运行并非原封不动的载入内存,而是遵循一定的规则进行,这一 ...

  7. 逆向工程核心原理学习笔记(十三):分析abex' crackme #1 的延伸:将参数压入栈

    还是上一次的abex' crackme #1,我们用OD附加看一下. 我们发现在调用这个MessageBox函数的时候,用了4个PUSH指令,我们在后面的注释中可以清楚的看到压入参数的内容. 如果我们 ...

  8. 逆向工程核心原理学习笔记(十二):分析abex' crackme #1

    程序下载地址:http://t.cn/RX1wpX7 我们首先运行一下,看看提示什么: 我们初步推测,这个程序应该是判断磁盘是否运行在一个CD-ROM上. 为了验证我们的推测,我们拖进OD看一下. 我 ...

  9. 逆向工程核心原理学习笔记(十一):栈

    栈(stack)用途广泛,通常用于存储局部变量.传递函数参数,保存函数返回地址等. 调试程序需要不断查看栈内存,这是很有必要的. 栈是一种数据结构,按照后进先出的原则存储数据. 栈的特征: 一个进程中 ...

最新文章

  1. C#设置本地网络(DNS、网关、子网掩码、IP)
  2. Affinity Photo中文版
  3. 思科交换机PXE响应巨慢,甚至无响应问题
  4. 2高并发服务器:多路IO之poll
  5. python读取大文件目录_65.Python读取大文件
  6. Ubuntu 16.04 主题美化及常用软件安装
  7. unity多人联机插件_Mirror ---Unity多人联机游戏API(一)
  8. 计算机网络简答题与计算题
  9. 数学系之必备参考书+数学系教材推荐
  10. 鲍威尔法c语言程序求方程,鲍威尔法C源程序.doc
  11. TCL通讯宣布于9月30日港股收盘后从港交所退市
  12. 2012-2013考研英语词汇
  13. 基于秃鹰搜索算法的无线传感器网络三维覆盖优化
  14. submit事件监听问题
  15. __builtin_函数
  16. shiro学习系列:shiro自定义filter过滤器
  17. window7调用计算机,教你查看win7系统电脑使用记录的具体方法
  18. php 清除js,php,js清除cookie
  19. 微信开发之小程序的页面布局
  20. 7段均衡器最佳参数_7段均衡器怎么调能达到最佳效果?

热门文章

  1. Linux百度云盘的使用
  2. 【UEFI实战】UART的初始化
  3. 李阳T恤衫疯狂英语100句
  4. 数据库系统概论研究生复试看那个视频好?不再说GG
  5. 大屏iPhone的适配 +iOS 图片尺寸要求
  6. shell监控mysql发邮件_[原创]监控mysqld服务是否可用,不可用时发送邮件
  7. java 1.6 jre 下载_java JRE下载、安装以及环境变量的配置图文教程
  8. 【R语言可视化】-- 柱状图要点一网打尽
  9. 使用Piwigo管理您的照片
  10. 组装机主板boot menu