33558 www.Sina.com/RPC (远程过程调用)是一种远程过程调用,一台计算机可以调用另一台计算机上的程序以获得结果。 代码不需要像本地调用那样的附加编程。
当前,web APP应用的水平越来越大,各个计算机的能力有限,需要通过可扩展的计算机集群进行,分布式APP应用可以通过RPC进行机器之间的调用。
33558www.Sina.com/RPC框架主要有三个角色: Provider、Consumer和Registry。 如下图所示。
节点角色说明:
Server:暴露服务的服务提供商。
客户端:调用远程服务的服务消费者。
Registry:服务注册和发现注册中心。
RPC概述RPC的基本流程图:
一次完整的RPC调用过程(同步调用,异步除外)如下:
1 )服务消费者端(客户端)呼叫通过本地呼叫方式呼叫服务
2 )客户端stub在接到呼叫后,负责将方法、参数等组装成可网络传输的消息体;
3 )客户端stub找到服务地址,向服务端发送消息;
4 ) server stub接收并解码消息
5 ) server stub根据解码结果调用本地服务
6 )本地服务运行,并将结果返回到服务器stub;
7 ) server stub将回复结果打包为消息发送给消费者;
8 )客户端stub接收并解码消息;
9 )服务消费方将获得最终结果。
RPC框架的目标是封装所有这些步骤,使用户对这些详细信息透明。
RPC框架原理
服务提供者启动后,在主要动向注册中心注册设备ip、端口及提供的服务列表;
服务消费者在启动时从注册中心获取服务提供商地址列表,可以实现软负载平衡和故障恢复
http://www.Sina.com/http://www.Sina.com /
要生成客户端stub和服务器stub,需要Java动态代理技术。 您可以使用JDK本机动态代理机制,也可以使用开源字节码工具框架,如CgLib和Javassist。
RPC调用流程
要在网络上发送和接收Java对象,必须进行序列化和反序列化。
序列化:将Java对象转换为byte[] (即编码)的过程;
反序列化:将byte[]转换为Java对象的过程;
可以使用Java本机序列化机制,但效率不高。 建议使用开源成熟的序列化技术,如protobuf、Thrift、hessian、Kryo和Msgpack
有关序列化工具性能比较的信息,请参见jvm-serializers
服务注册发现
当前,许多RPC框架直接基于名为netty的IO通信框架,例如阿里巴巴的HSF、dubbo和Hadoop Avro推荐netty作为基础通信框架。
使用到的技术
可选技术:
就绪型
Zookeeper
控制台
Etcd
1、动态代理视频内容1、为什么千万级流量分布、微服务体系结构有RPC?
2、什么是RPC?
3、RPC与HTTP辨析
4、实现RPC框架需要解决哪些问题?
5、具体问题具体分析,各自解决和实现!
应对6千万级的流量,这样就足够了吗? 反省我们的实现。
7、Dubbo和SpringCloud哪个好?
总结面试难免让人不安。 经历过的人都知道。 但是,如果你事先预测面试官会问你问题,然后考虑清楚的回答方法,就很容易了。
另外,虽然说“面试时制作火箭,工作时拧紧螺丝”,但对于准备面试的朋友,你只需要知道刷这个词。
请刷一下。 请用力刷。 我今天是来谈面试的,要完善面试的正题。 用不了28天,我就做了“Java一线大厂高岗面问题解析合集: Java基础-中级-高级面试SSM框架分布式性能调谐微服务并行编程网络设计模式数据结构与算法等”
2、序列化
除了简单的问题,JVM、JAVA集合、JAVA多线程并发、JAVA基础、打印原理、微服务、Netty和RPC、网络、日志、Zookeeper、Kafka、rabba 还需要准备《JAVA高级核心知识手册》的JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,弥补不足
itMQ、Hbase、MongoDB、Cassandra、设计模式、负载平衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark