当前位置: 首页 > 网络应用技术

12437单词,带您探索RPC通信的原则

时间:2023-03-05 17:13:04 网络应用技术

  以下是HTTP请求的情况:

  请求过程将有3个握手和4波:

  RPC的主要功能目标是使构建分布式计算(应用程序)更容易。在提供强大的远程呼叫时,它不会失去本地呼叫的语义简单性。要实现此目标,RPC框架需要提供透明的呼叫机制,从而使用户可以区分本地呼叫和远程调用而无需明确的区分。

  RPC的优势:

  RPC框架优势:

  主流RPC框架:

  应用示例:

  特定的通话过程:

  涉及的技术:

  2.2.1序列化技术

  常用序列化技术

  Hessian本身也有一些缺陷。每个人都应在使用过程中注意:

  Dubbo2.7.3的分析通信序列化源代码:

  2.2.2动态代理

  如何处理JDK?

  众所周知,由反编译汇编生成的代理类可以在代理$ proxy(即代码用户的作业接口)中定义相同的签名接口,然后内部定义一个可变的绑定JDKProxy代理对象,当user.job接口方法称为本质时,使用jdkproxy.invoke()方法来实现接口的动态代理。

  字节好友> cglib> Javassist> JDK。

  源代码分析:

  核心源代码:

  2.2.3服务注册发现

  服务注册:当服务提供商启动服务提供商时,在启动服务提供商时将暴露接口注册到注册中心,并且注册中心保存了IP的连接信息和此服务节点的接口。通常建立服务器的服务器,即两道心跳机制。

  服务订阅:服务呼叫聚会开始时,客户将前往注册中心查找并订阅服务提供商的IP,然后缓存到本地,并将其用于后续远程呼叫。如果注册中心的信息更改,推动通常会更新。

  答:首先在Zookeeper中创建服务root路径,您可以根据接口名称命名(例如:/dubbo/com.itcast.xxservice)。在此路径上,使用服务提供商和呼叫方目录(提供商,消费者)。LET商店服务提供商和呼叫方的节点信息。

  B.当服务器启动注册时,将在服务提供商目录中创建一个临时节点。注册信息存储在节点中,例如IP,端口,服务名称等。

  C.当客户端启动订阅时,它将在服务呼叫聚会目录,节点中监视方的信息以及同时创建一个临时节点,同时是Watch Service Service Provider(/dubbo/com)的目录。itcast.xxservice/prviders)服务节点数据。当服务器更改(例如离线或停机时间)时,Zookeeper将通知客户端以订阅。

  动物园管理方案的功能:

  动物园管理器的主要特征是强大的一致性。Zookeeper群集的每个节点的每个数据将在同一更新操作时更新。减少。ZK使用CP模式(确保强大的一致性)。如果您想专注于性能,则可以考虑采用AP模式(保证最终)注册中心组件,例如NACOS。

  2.2.4网络IO模型

  通常,单独的受体线程负责监视客户端的连接。从基因上讲,服务端可以在周期中的服务端调用客户的服务,以监视客户端连接的请求。请求收到连接请求后,您可以建立通信集并在此通信狭缝上执行读写操作。目前,此时,在客户端的操作执行完成之前,无法再接收其他客户连接请求。系统内核处理io操作分为两个阶段 - 等待数据并复制数据。在这两个阶段,线程,线程申请过程中的IO操作将始终是阻碍的。如果它是基于Java多线程开发而开发的,则每个IO操作都必须占据线程,直到IO操作结束为止。

  当程序刚刚启动时,0是标准输入,1是标准输出,而2是标准错误。如果您此时打开一个新文件,则其文件描述符为3。

  这三个之间的区别:

  操作方法遍历红色和黑树IO效率的位图阵列的底层。每个呼叫称为线性遍历。时间复杂度为O(n)每个调用是线性遍历。时间复杂性是o(n)事件通知方法。既然FD准备就绪,则将调用系统注册的回调函数,并且可以将FD放入ReadyList。时间复杂性o(1)最大连接数1024(x86)或2048(x64)是前所未有的,当调用选择时,您需要将FD集合从用户的状态复制到内核。

  这是一张运动图片

  EPOLL处理过程:

  这是一张运动图片

  生成I/O流事件时,Epoll将告诉该过程是生成哪个连接I/O流事件,然后该过程将处理此过程。此过程比这比!

  可以说EPOLL是I/O Multi -Way应用程序的最新实施。Epoll解决了民意调查和选择中的大多数问题,例如

  epoll是安全的线程。epoll不仅告诉您袜子组中的数据,而且还会告诉您哪些袜子连接具有数据,而没有该过程的查询过程。

  2.2.5时间旋转

  时钟轮本质上是钟表中时钟跳动的原理。那么如何实现?

  在时钟车轮机构中,时钟和时钟轮的概念,时间插槽等于时钟的比例。时钟轮等同于指针跳动的循环。我们可以将每个任务放在相应的时间插槽位置上。

  如果时钟轮有10个凹槽,并且时钟轮的循环为10秒,则每个插槽的单位时间为1秒,下一个时间轮的周期为100秒。单位时间为10秒,就像二手和小针一样。在二手周期中,比例单元为秒。在隧道周期中,尺度分配。

  假设我们现在有3个任务,即任务A(0.9秒后执行),任务B(2.1秒后执行)和任务C(在12.1秒后执行).A将任务B放置在0个插槽中,将任务B放置在第二个插槽,任务C放置在下一层时间轮的第二个插槽中,如下图所示:

  通过这个场景,我们可以理解,时钟轮的扫描周期仍然是最小的单元,但任务没有反复扫描。每个任务将仅根据需要扫描一次。

  重叠的时钟轮,无限的增长,效率将继续下降,如何解决?

  Dubbo的时间轮的原理如何实现?

  主要是,定时器,超时,timrtask的几个接口定义了计时器的模型,然后通过HashedWheeltimer类实现时间转子(默认时间凹槽的数量为512,可以自定义此值)。使用与外界的接口。它只需要调用新的Timeout界面即可完成安排任务。通过此计时器,Dubbo在响应方案中实施有效的任务计划。

  我们将稍后解释灰度释放机制。只要项目群集和分布式应用程序将涉及路由和负载平衡,就基于NGINX+LUA,扩展的SpringCloud网关源代码灰色释放和负载平衡。

  在某些情况下,可能需要一种更精细的路由方法,例如,根据SessionID到同一服务节点以保持会话的有效性;

  您可以考虑使用参数化路由:

  RPC负载平衡策略通常包括旋转,随机,重量,最小连接等。Dubbo默认用于使用随机负载平衡策略。

  我们将详细解释熔化的断开组装哨兵高级别用法,源代码分析和战略机制,但RPC需要考虑融合流量限制机制。让我们一起看看。

  在Dubbo框架中,您可以使用Sentinel实现更全面的熔化流量限制功能。服务器如何实现流体逻辑?

  有很多方法,最简单的是计数器,以及平滑而当前的滑动窗口,漏斗算法,令牌枪管算法等等。Sentinel使用滑动窗口来达到当前极限。

  WindowStart:时间窗口的开始时间,设备为毫秒

  窗口长度:时间窗口的长度,单元为毫秒

  价值:时间窗口的内容

  在开始时,数组数组中只有一个窗口,每个时间窗口的长度为500ms,这意味着,只要当前时间和时间窗口之间的差异在500ms之内,时间窗口就不会滑动向前。

  时间继续前进。当超过500毫秒时,时间窗口将向前滑到下一个。目前,当前窗口的开始时间将被更新:

  在当前时间点输入的请求将在与当前时间相对应的时间窗口中计数。

  以下机制:

  保险丝的工作机制主要是在这三个状态之间切换。

  前哨保险丝和降级组件可以支持下降水平策略:

  有关更多信息,请参阅官方前哨文件。

  这篇文章由Chuanzhi教育学者-Wild Architecture教学和研究团队发行,请指出消息来源!

  原始:https://juejin.cn/post/7103798074656423967