7.Go语言高并发与微服务实战 --- 远程过程调用 RPC

Posted enlyhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.Go语言高并发与微服务实战 --- 远程过程调用 RPC相关的知识,希望对你有一定的参考价值。

第 7 章 远程过程调用 RPC
7.1 RPC 机制和实现过程 
	7.1.1 RPC 机制 
		1.客户端进程以正常的方式调用客户存根
		2.客户存根生成一个消息,然后调用本地操作系统的网络模块,存根进入阻塞状态
		3.客户端操作系统将网络消息发送给远程操作系统
		4.远程操作系统将网络消息交给服务端存根
		5.服务端存根将参数调取出来,而后调用服务端程序
		6.服务端程序执行相应的操作,操作完成后将结果返回给服务端存根
		7.服务端存根将结果打包成一个消息,而后调用本地操作系统
		8.服务端操作系统将含有结果的消息发送给客户端操作系统
		9.客户端操作系统将消息交给客户存根,存根从阻塞状态恢复,进入运行状态
		10.客户端存根将结果从消息中提取,返回给调用它的客户端过程


		要实现一个RPC远程过程调用,需要考虑以下几个主要方面:参数传递、通信协议定制、出错和超时处理等。

	7.1.2 传递参数 
		1.传递值参数
			比较简单,只需要将参数的值复制到网络消息的数据中即可。

		2.传递引用参数
			传递应用参数比较困难。单纯传递参数的引用(也包含指针)是完全没有意义的,因为引用地址传递给远程计算机,其指向的内存位置困难跟
		远程系统上完全不同。如果你想支持传递引用参数或者传递对象,你就必须发送参数的副本,将它们防止在远程系统内存中,向它们传递指向服务器
		内存的指针,然后将对象发送回客户端,复制它的引用,这一过程是很麻烦并且容易出错的。因此,RPC一般不支持直接传递引用对象。

		3.数据格式的统一问题
			在本地系统上不存在数据不相容的问题,因为数据格式总是相同的;而在分布式系统中则不同,不同远程机器上可能有不同的字节顺序,不同
		的大小整数,以及不同的浮点表示。对于RPC,如果想与异构系统通信,

以上是关于7.Go语言高并发与微服务实战 --- 远程过程调用 RPC的主要内容,如果未能解决你的问题,请参考以下文章

4.Go语言高并发与微服务实战 --- Go 语言高级特性

11.Go语言高并发与微服务实战 --- 统一认证与授权

12.Go语言高并发与微服务实战 --- 分布式链路追踪

12.Go语言高并发与微服务实战 --- 分布式链路追踪

5.Go语言高并发与微服务实战 --- 构建 Go Web 服务器

2.Go语言高并发与微服务实战 --- 微服务概述