问题:RPC,即远程过程调用,通常用在后端集群中服务之间的通讯上; 从广义上来说,服务访问数据库或缓存,也是一类RPC; 前端访问后端,同样也是RPC。
我们拿一个大型网站举例,前端(APP、小程序、浏览器)通过 RPC 访问后端; 后端服务之间通过 RPC进行方法调用; 服务通过RPC访问数据库或缓存。 就以大型网站系统为例, 这三类RPC有什么本质的区别呢? 在设计的时候需要重点考虑什么问题?为什么要这样设计?
参考答案:
在大型网站系统中,前端通常基于【短连接】访问后端;在后端集群中,服务之间通常基于【全双工通信的长连接】进行RPC调用;在服务对数据库或缓存进行访问时,会基于【半双工通信的长连接】进行;这就是三类RPC调用的核心区别。
大型网站的前端与后端之间通常不会频繁的进行数据传输,后端也很少会主动推送数据到前端,所以为了节省资源占用,前后端之间通常采用【短连接】进行通信;大型网站的前端页面通常会比较复杂,很难一次从后端获取完整的数据,可以通过升级 http 协议的版本解决如何高效获取后端数据的问题。http 1.0 协议基于一次连接获取一次数据;http 1.1 协议可以基于一次连接获取多次数据;http 2.0 协议支持 多路复用和服务器推技术。
后端服务之间一般基于【长连接】进行RPC调用(也有基于短连接的情况,但需要付出不断建连和断连的开销),而且服务节点之间通常只建立一条连接实现全双工的通信方式;一条连接,全双工通信,完全满足通讯效率的要求,因为真正的瓶颈点在于业务逻辑处理,而非网络通讯。在对 服务之间的PRC进行设计时,重点考虑 八个方面的问题(我们在课上重点分析过):服务消费方问题(连接管理、负载均衡、请求路由、超时处理) 和 服务提供方问题(队列/线程池、过载保护、超时丢弃、优雅关闭)。
服务访问数据库或缓存时,是通过【长连接】进行调用的,这里的长连接是 半双工的通信方式;之所以采用 半双工通信,是为了更好的限制 吞吐量,防止对存储系统造成很高的负载,比较存储系统是 高IO密集型系统,对吞吐量非常敏感。对于 【半双工的长连接】通信,我们一般会通过【数据库连接池】或【缓存连接池】的方式进行访问,连接池即避免了创连和断连的开销,也提供了并发访问存储系统的方式;在设计连接池的时候,重点考虑两个方面的问题:连接的均衡性 和 保活性。
上面提到了【数据库连接池】的概念,其实服务之间的RPC调用中,也会有 【RPC连接池】的概念,想一下 这两个概念有什么区别?
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。