这是我参与「 第五届青训营 」伴学笔记创作活动的第 14 天
一次完整的RPC调用过程
IDL (Interface description language)文件
- IDL通过—种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
生成代码
- 通过编译器工具把IDL文件转换成语言对应的静态库
编解码
- 从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化
通信协议
- 规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的 元数据
网络传输
- 通常基于成熟的网络库走 TCP/UDP传输
RPC的优点
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
RPC带来的问题
服务宕机,对方应该如何处理?
1、及时发现服务器宕机问题,尽早通知服务商解决相关问题;
2、准备2个网站空间,存放的内容相同,ip不同,且机房的地理位置不同,发现宕机问题后,能迅速通过修改dnspod中的域名记录,指向目前正常的网站空间。
在调用过程中发生网络异常,如何保证消息的可达性?
外部接口多采用交易接口+结果查询接口的方式,基于这种形式的接口提供以下解决方案。
- 根据流水号标识一笔交易请求,另外本地要提供rollback方法
- 模板类记录请求日志,日志状态在本地事务更新
- 定时任务扫描日志表异常或超时记录,然后调用外部查询接口进行补偿,对成功请求更改日志状态
- 如果外部接口返回失败,则调用rollback方法进行回滚
- 如果外部接口实现了密等性,可根据流水号(类全局事务ID)进行重试
该方案实现了对外部接口调用的密等性
请求量突增导致服务无法及时处理,有哪些应对措施?
缓存、服务降级以及限流。具体的做法有计数器、滑动窗口、滴漏、服务token、请求队列化等办法。值得注意的是,现在很多生产级别的服务都是多节点分布式架构。很多单机上容易做的算法和控制逻辑到了分布式下就会带来一些实现上的麻烦。这又涉及到了分布式一致性、CAP的权衡等等问题。
总结
本次学习了解了一次PRC的完整过程,明白了RPC的基本概念定义。对于RPC带来好处的同时也带来了不少新的问题,这些都是将由RPC框架来解决的。