Rpc避免流量打到没有启动完全的节点上

启动预热

jvm的预热

JVM 虚拟机会把高频的代码编译成机器码,被加载过的类也会被缓存到 JVM 缓存中,再次使用的时候不会触发临时加载,这样就使得“热点”代码的执行不用每次都通过解释,从而提升执行速度。

rpc实现启动预热

让负载均衡在选择连接的时候,区分一下是否是刚启动不久的应用

  1. 一种是服务提供方在启动的时候,把自己启动的时间告诉注册中心;
  2. 另外一种就是注册中心收到的服务提供方的请求注册时间。
    总之,调用方通过服务发现,除了可以拿到 IP 列表,还可以拿到对应的启动时间。我们需要把这个时间作用在负载均衡上

延迟暴露

以把接口注册到注册中心的时间挪到应用启动完成后。具体的做法就是在应用启动加载、解析 Bean 的时候,如果遇到了 RPC 服务的 Bean,只先把这个 Bean 注册到 Spring-BeanFactory 里面去,而并不把这个 Bean 对应的接口注册到注册中心,只有等应用启动完成后,才把接口注册到注册中心用于服务发现,从而实现让服务调用
方延迟获取到服务提供方地址。

利用将接口注册到注册中心之前的这段时间

例如可以干一些加载缓存的操作
预留一个 Hook 过程,让用户可以实现可扩展的Hook 逻辑。用户可以在 Hook 里面模拟调用逻辑,从而使 JVM 指令能够预热起来,并且用户也可以在 Hook 里面事先预加载一些资源,只有等所有的资源都加载完成后,最后才把接口注册到注册中心

上一篇:pytest之失败测试用例重试运行(pytest-rerunfailures)


下一篇:React Hook “useState“ is called in function “xxxx“ which is neither a React function component