不啰嗦,我们直接开始!
引言
以前在做一个规模不大的系统的时候,用的是单体架构,一台服务器部署上一个应用和数据库也就够了。
但是现代化互联网公司业务逐渐扩大,服务逐渐细分,很多服务之间需要通过远程分布式接口调用通讯,即不同的服务不是部署在同一个服务器上,比如订单服务在 A 服务上,付款服务在另一个服务上,有同步调用、也有异步调用,这个时候我们就需要远程调用不同的服务,使用的时候调用远程服务就像调用本地服务一样,引入一个 jar 包,就能通过this.xxx( ) 一样调用远程服务,这背后的机制就是通过 RPC 技术。
重点:RPC 技术一定是今后工作必备基础,熟练掌握其中一种,知道原理,阅读源码,甚至自己手写一个。
1、面试官:公司使用什么 RPC 框架?,可以介绍一下 RPC 的工作原理吗?
**问题分析:**面试官想了解基础设施是否和我们项目用的一样,一样最好了,能直接上手,不一样了解其它一个别的应该也问题不大,毕竟原理技术都大同小异,说你最熟悉的一个。
**答:**RPC 是一个分布式计算的 CS 模式,总是由 Client 向 Server 发出一个执行若干过程请求,Server 接受请求,使用者客户端提供的参数,计算完成之后将结果返回给客户端。
使用最广泛的 Spring Cloud,基于 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。
国内开源的框架中,使用比较广泛的有阿里的 Dubbo,后来捐献给了 Apache。还有腾讯的 Tars 框架,还有 Thrift 框架,也有基于 Thrift 二次开发的 RPC 框架,比如美团的 Mtthrift。
这些 RPC 大致原理基本都是一样的。(这个时候,跟面试官要纸和笔,画图解释 RPC 原理)