目录
RPC的调用流程如下,可以在动态代理,序列化框架,路由算法,线程模型,服务器性能等几部分考虑。
2种动态代理方式的性能测试(JDK1.8 JDK > Cglib)_trigger333的博客-CSDN博客
序列化方式介绍和性能比较 (kryo fastjson hessian jdk)_trigger333的博客-CSDN博客
RPC框架业务线程池的添加方法和作用_trigger333的博客-CSDN博客
RPC是远程过程调用(Remote Procedure Call)的缩写形式。通俗的理解就是我调用了一个函数func(args), 只不过这个func不在本地,需要远程访问这个函数,把我的args(输入参数)通过网络发送给这个函数所在的机子,然后由这个机子调用func(args),再将返回值通过网络发送回来。
其实如果我们开发简单的应用,是用不着 RPC的。当我们的应用访问量增加和业务增加时,发现单机已无法承受,此时可以根据不同的业务(划分清楚业务逻辑)拆分成几个互不关联的应用,分别部署在不同的机器上,此时可能也不需要用到 RPC 。
随着我们的业务越来越多,应用也越来越多,应用与应用相互关联调用,发现有些功能已经不能简单划分开,此时可能就需要用到 RPC。
比如,我们开发电商系统,需要拆分出用户服务、商品服务、优惠券服务、支付服务、订单服务、物流服务、售后服务等等,这些服务之间都相互调用,这时内部调用最好使用 RPC ,同时每个服务都可以独立部署,独立上线。
也就说当我们的项目太大,需要解耦服务,扩展性强、部署灵活,这时就要用到 RPC ,主要解决了分布式系统中,服务与服务之间的调用问题。
RPC 架构主要包括三部分:
服务提供者启动后主动向服务注册中心(Registry)注册机器IP、端口以及提供的服务列表;
服务消费者启动时向服务注册中心(Registry)获取服务提供方地址列表。