02 2022 档案
摘要:如何在没有接口的情况下进行RPC调用 回顾 RPC 如何通过动态分组来实现秒级扩缩容,其关键点就是“动态”与“隔离” RPC调用 RPC 调用,本质上就是调用端向服务端发送一条请求消息,服务端接收并处理,之后向调用端发送一条响应消息,调用端处理完响应消息之后,一次 RPC 调用就完成了 泛化调用 可
阅读全文
摘要:动态分组:超高效实现秒级扩缩容 回顾 在 RPC 里面怎么支持流量回放,应用在引入 RPC 后,所有的请求都会被 RPC 接管,而我们在 RPC 里面引入回放的原因也很简单,就是想通过线上流量来验证改造后应用的正确性,而线上流量相比手动维护 TestCase 的场景更丰富,所以用线上流量进行测试的覆
阅读全文
摘要:流量回放:保障业务技术升级的神器 回顾 时钟轮在 RPC 中的应用,核心原理就一个关键字“分而治之”,我们可以把它用在任何需要高效处理大量定时任务的场景中,最具有代表性的就是在高并发场景下的请求超时检测。 流量回放 定义 所谓的流量就是某个时间段内的所有请求,我们通过某种手段把发送到 A 应用的所有
阅读全文
摘要:时钟轮在RPC中的应用 回顾 在分布式环境下,RPC 框架自身以及服务提供方的业务逻辑实现,都应该对异常进行合理地封装,让使用方可以根据异常快速地定位问题;而在依赖关系复杂且涉及多个部门合作的分布式系统中,我们也可以借助分布式链路跟踪系统,快速定位问题。 定时任务如何实现 每创建一个 Future
阅读全文
摘要:分布式环境下如何快速定位 回顾 如何建立可靠的安全体系,关键点就是“鉴权”,我们可以通过统一的鉴权服务动态生成秘钥,提高 RPC 调用的安全性。 分布式环境下定位问题有哪些困难 举例: 一个分布式的应用系统,在这个应用系统中,我启动了 4 个子服务,分别是服务 A、服务 B、服务 C 与服务 D,而
阅读全文
摘要:安全体系:如何建立可靠的安全体系? 回顾 异步化”。调用方利用异步化机制实现并行调用多个服务,以缩短整个调用时间;而服务提供方则可以利用异步化把业务逻辑放到自定义线程池里面去执行,以提升单机的 OPS。 调用方之间的安全保证 根本原因就是服务提供方收到请求后,不知道这次请求是哪个调用方发起的,没法判
阅读全文
摘要:异步RPC:压榨单机吞吐量 如何提升单机吞吐量 提升吞吐量,其实关键就两个字:“异步”,提高CPU等资源的利用率 调用端如何异步 异步,最常用的方式就是返回 Future 对象的 Future 方式,或者入参为 Callback 对象的回调方式,而 Future 方式可以说是最简单的一种异步方式了。
阅读全文
摘要:业务分组:如何隔离流量 回顾 RPC 中常用的保护手段“熔断限流” 熔断是调用方为了避免在调用过程中,服务提供方出现问题的时候,自身资源被耗尽的一种保护行为; 而限流则是服务提供方为防止自己被突发流量打垮的一种保护行为。 分组 分组,它可以实现流量隔离。 怎么分组 非核心应用不要跟核心应用分在同一个
阅读全文
摘要:熔断限流 服务端的自我保护 策略 在 RPC 调用中服务端的自我保护策略就是限流 如何实现 方式有很多,比如最简单的计数器,还有可以做到平滑限流的滑动窗口、漏斗算法以及令牌桶算法等等。其中令牌桶算法最为常用。 调用端的自我保护 策略 熔断 熔断器的工作机制主要是关闭、打开和半打开这三个状态之间的切换
阅读全文
摘要:优雅启动:如何避免流量打到没有启动完成的节点? 回顾 优雅停机,就是为了让服务提供方在停机应用的时候,保证所有调用方都能“安全”地切走流量,不再调用自己,从而做到对业务无损。其中实现的关键点就在于,让正在停机的服务提供方应用有状态,让调用方感知到服务提供方正在停机。 启动预热 简单来说,就是让刚启动
阅读全文
摘要:优雅关闭:如何避免服务停机带来的业务损失? 上线的大致流程 当服务提供方要上线的时候,一般是通过部署系统完成实例重启。在这个过程中,服务提供方的团队并不会事先告诉调用方他们需要操作哪些机器,从而让调用方去事先切走流量。而对调用方来说,它也无法预测到服务提供方要对哪些机器重启上线,因此负载均衡就有可能
阅读全文
摘要:异常重试:在约定时间内可靠的重试 回顾 在 RPC 框架中如何设计自适应的负载均衡,其关键点就是调用端收集服务端每个节点的指标数据,再根据各方面的指标数据进行计算打分,最后根据每个节点的分数,将更多的流量打到分数较高的节点上。 RPC 框架的重试机制 调用端发起的请求失败时,RPC 框架自身可以进行
阅读全文
摘要:负载均衡:节点负载差距这么大,为什么收到的流量还一样? 回顾 “多场景的路由选择”,其核心就是“如何根据不同的场景控制选择合适的目标机器” 问题 RPC 框架有没有什么智能负载的机制?能否及时地自动控制服务节点接收到的访问量? 什么是负载均衡 通过负载均衡,将请求分发给这个集群下的每个服务节点,从而
阅读全文
摘要:路由策略:怎么让请求按照设定的规则发到不同的节点上 回顾 健康检测在 RPC 中的作用,简单来讲就是帮助调用方应用来管理所有服务提供方的连接,并动态维护每个连接的状态,方便服务调用方在每次发起请求的时候都可以拿到一个可用的连接 为什么选择路由策略 在真实环境中服务提供方是以一个集群的方式提供服务,这
阅读全文
摘要:健康检测:这个节点都挂了,为啥还要疯狂发请求 回顾 超大规模集群“服务发现”的挑战,服务发现的作用就是实时感知集群 IP 的变化,实现接口跟服务集群节点 IP 的映射。在超大规模集群实战中,我们更多需要考虑的是保证最终一致性。其实总结来说,就一关键词,你要记住“推拉结合,以拉为准” 背景 因为有了集
阅读全文
摘要:服务发现:到底是要CP还是AP? 回顾 “怎么设计一个灵活的 RPC 框架” 总结起来,就是怎么在 RPC 框架中应用插件,用插件方式构造一个基于微内核的 RPC 框架,其关键点就是“插件化”。 服务发现 为了高可用,在生产环境中服务提供方都是以集群的方式对外提供服务,集群里面的这些 IP 随时可能
阅读全文
摘要:架构设计:涉及一个灵活的RPC框架 回顾 RPC的通信原理及RPC中各个功能组件的作用 RPC就是把拦截到的方法参数,转成可以在网络中传输的二进制,并保证服务提供方能正确还原出语义,最终实现想调用本地一样的调用远程的目的 RPC架构 功能模块 传输模块 考虑到传输的可靠性,一般默认采用TCP协议;为
阅读全文
摘要:动态代理 回顾 用来解决两个应用之间的通信,而网络则是两台l两台机器之间的“桥梁”,只有搭好桥梁才能把请求数据从一端传输到另一端,其中关键就是“可靠的传输” 背景 RPC的目标就是通过屏蔽调用细节,实现远程调用如同本地调用一样简单 在使用RPC时,一般的做法是先找服务提供方要接口,通过Maven或者
阅读全文
摘要:极客时间:RPC实战与核心原理:四 网络通信:RPC框架在网络通信上的网络IO模型 回顾 由于网络传输的数据都是二进制数据,所以要传递对象,就必须将对象进行序列化,而 RPC 框架在序列化的选择上,我们更关注序列化协议的安全性、通用性、兼容性,其次才关注序列化协议的性能、效率、空间开销 RPC 是解
阅读全文
摘要:深度探索C++对象模型 第一章:关于对象 封装之后的布局成本 C++在布局以及存取时间上主要的额外负担是由virtual引起 1、VIrtual function机制:用以支持一个有效率的“执行期绑定”(runtime binding) 2、virtual base class:用以实现“多次出现在
阅读全文