RPC设计15大要素概述 —— 提纲挈领

简介:  其实 RPC 就是把拦截到的方法参数,转成可以在网络中传输的二进制,并保证在服务提供方能正确地还原出语义,最终实现像调用本地一样地调用远程的目的。

1 RPC 的通信原理以及 RPC 里各个功能组件的作用


 其实 RPC 就是把拦截到的方法参数,转成可以在网络中传输的二进制,并保证在服务提供方能正确地还原出语义,最终实现像调用本地一样地调用远程的目的。



2 怎么设计一个灵活的 RPC 框架?


 就是怎么在 RPC 框架中应用插件,用插件方式构造一个基于微内核的 RPC 框架,其关键点就是“插件化”



3 服务发现


 服务发现的作用就是实时感知集群 IP 的变化,实现接口跟服务集群节点 IP 的映射。在超大规模集群实战中,我们更多需要考虑的是保证最终一致性。其实总结来说,就一关键词,“推拉结合,以拉为准”



4 健康检测


 帮助调用方应用来管理所有服务提供方的连接,并动态维护每个连接的状态,方便服务调用方在每次发起请求的时候都可以拿到一个可用的连接。



5 异常重试


 异常重试就是为了尽最大可能保证接口可用率的一种手段,但这种策略只能用在幂等接口上,否则就会因为重试导致应用系统数据“写花”


6 优雅停机


 为了让服务提供方在停机应用的时候,保证所有调用方都能“安全”地切走流量,不再调用自己,从而做到对业务无损。其中实现的关键点就在于,让正在停机的服务提供方应用有一个状态,让调用方感知到服务提供方正在停机。


7 优雅启动


 重点就是启动预热与延迟暴露


8 熔断限流


 熔断是调用方为了避免在调用过程中,服务提供方出现问题的时候,自身资源被耗尽的一种保护行为;

 限流是服务提供方为防止自己被突发流量打垮的一种保护行为。


9 如何提升单机资源的利用率


 关键点就一个,那就是“异步化”。调用方利用异步化机制实现并行调用多个服务,以缩短整个调用时间;而服务提供方则可以利用异步化把业务逻辑放到自定义线程池里面去执行,以提升单机的 OPS。


10 安全体系


 关键点就是“鉴权”,我们可以通过统一的鉴权服务动态生成秘钥,提高 RPC 调用的安全性。


11 分布式环境下如何快速定位问题


 在分布式环境下,RPC 框架自身以及服务提供方的业务逻辑实现,都应该对异常进行合理地封装,让使用方可以根据异常快速地定位问题;在依赖关系复杂且涉及多个部门合作的分布式系统中,可以借助分布式链路跟踪系统,快速定位问题。


12 时钟轮在 RPC 中的应用


 核心原理就一个关键字“分而治之”,我们可以把它用在任何需要高效处理大量定时任务的场景中,最具有代表性的就是在高并发场景下的请求超时检测。


13 流量回放


 应用在引入 RPC后,所有的请求都会被 RPC 接管,而我们在 RPC 里面引入回放的原因也很简单,就是想通过线上流量来验证改造后应用的正确性,而线上流量相比手动维护 TestCase 的场景更丰富,所以用线上流量进行测试的覆盖率会更广。


14 如何在没有接口的情况下完成 RPC 调用


 其关键在于要理解接口定义在 RPC 里面的作用。除了动态代理生成的过程中需要用到接口定义,剩余的其它过程中接口的定义只是被当作元数据来使用,而动态代理在 RPC 中并不是一个必须的环节,所以在没有接口定义的情况下我们同样也是可以完成 RPC调用的,只要把这些元数据发送过去即可。

15 在线上环境里兼容多种 RPC 协议


 目的就是为了能够平滑地升级线上环境中已经存在的 RPC 框架,同时我们也可以利用多协议的特点来支持不同的使用场景。


相关文章
|
7月前
|
存储 网络协议 Dubbo
Rpc编程系列文章第一篇:RPC概述和架构演变
Rpc编程系列文章第一篇:RPC概述和架构演变
|
XML SpringCloudAlibaba Dubbo
这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
没错,这次冰河又要搞事情了,这次准备下手的是RPC框架项目。为什么要对RPC框架项目下手呢,因为在如今分布式、微服务乃至云原生不断发展的过程中,RPC作为底层必不可少的通信组件,被广泛应用在分布式、微服务和云原生项目中。
474 1
这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
|
XML SpringCloudAlibaba Dubbo
这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
313 0
这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
|
JSON 负载均衡 算法
轻量级RPC框架(0 - 项目概述)
轻量级RPC框架(0 - 项目概述)
轻量级RPC框架(0 - 项目概述)
|
存储 负载均衡 Dubbo
微服务系列--深入理解RPC底层原理与设计实践(下)
微服务系列--深入理解RPC底层原理与设计实践(下)
354 0
|
JSON Dubbo Java
微服务系列--深入理解RPC底层原理与设计实践(上)
微服务系列--深入理解RPC底层原理与设计实践(上)
296 0
|
Java 中间件 程序员
如何设计一个RPC框架?
如何设计一个RPC框架?
190 0
如何设计一个RPC框架?
|
消息中间件 负载均衡 Dubbo
突破Java面试(40)-如何设计一个类似Dubbo的RPC框架
突破Java面试(40)-如何设计一个类似Dubbo的RPC框架
149 0
|
Dubbo 应用服务中间件
突破Java面试(40)-设计一个类似Dubbo的RPC框架
如何设计一个类似Dubbo的RPC框架
4406 0
|
JavaScript Dubbo Java
高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度。 考验你的整体RPC框架系统设计能力。本文详解~
9828 0