<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>什么是RPC &#8211; moneyslow.com</title>
	<atom:link href="https://moneyslow.com/tag/%e4%bb%80%e4%b9%88%e6%98%afrpc/feed" rel="self" type="application/rss+xml" />
	<link>https://moneyslow.com</link>
	<description>making money with technology</description>
	<lastBuildDate>Mon, 12 Jul 2021 10:25:34 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.4</generator>
	<item>
		<title>为啥要用RPC代替HTTP</title>
		<link>https://moneyslow.com/%e4%b8%ba%e5%95%a5%e8%a6%81%e7%94%a8rpc%e4%bb%a3%e6%9b%bfhttp.html</link>
		
		<dc:creator><![CDATA[moneyslow]]></dc:creator>
		<pubDate>Fri, 08 Jan 2021 03:28:47 +0000</pubDate>
				<category><![CDATA[newest]]></category>
		<category><![CDATA[RPC代替HTTP]]></category>
		<category><![CDATA[RPC和HTTP比较]]></category>
		<category><![CDATA[互联网赚钱]]></category>
		<category><![CDATA[什么是RPC]]></category>
		<guid isPermaLink="false">https://moneyslow.com/?p=12326</guid>

					<description><![CDATA[先复习以下基础网络知识： 一、七层网络结构模型回顾： 我们先来了解一下OSI的七层网络结构模型（虽然实际应用中基本上都是五层），它可以分为以下几层：（从上到下） 第一层：应用层。定义了用于在网络中进行通信和传输数据的接口； 第二层：表示层。定义不同的系统中数据的传输格式，编码和解码规范等； 第三层：会话层。管理用户的会话，控制用户间逻辑连接的建立和中断； 第四层：传输层。管理着网络中的端到端的数据传输； 第五层：网络层。定义网络设备间如何传输数据； 第六层：链路层。将上面的网络层的数据包封装成数据帧，便于物理层传输； 第七层：物理层。这一层主要就是传输这些二进制数据。 实际应用过程中，五层协议结构里面是没有表示层和会话层的。应该说它们和应用层合并了。我们应该将重点放在应用层和传输层这两个层面。因为HTTP是应用层协议，而TCP是传输层协议。好，知道了网络的分层模型以后我们可以更好地理解为什么RPC服务相比HTTP服务要Nice一些！ 二、HTTP 服务特点： 其实在很久以前，我对于企业开发的模式一直定性为HTTP接口开发，也就是我们常说的RESTful风格的服务接口。的确，对于在接口不多、系统与系统交互较少的情况下，解决信息孤岛初期常使用的一种通信手段；优点就是简单、直接、开发方便。利用现成的http协议进行传输。我们记得之前实习在公司做后台开发的时候，主要就是进行接口的开发，还要写一大份接口文档，严格地标明输入输出是什么？说清楚每一个接口的请求方法，以及请求参数需要注意的事项等。比如下面这个例子： POST http://www.moneyslow.com/restful/user/info 接口可能返回一个JSON字符串或者是XML文档。然后客户端再去处理这个返回的信息，从而可以比较快速地进行开发。但是对于大型企业来说，内部子系统较多、接口非常多的情况下，RPC框架的好处就显示出来了，首先就是长链接，不必每次通信都要像http一样去3次握手什么的，减少了网络开销；其次就是RPC框架一般都有注册中心，有丰富的监控管理；发布、下线接口、动态扩展等，对调用方来说是无感知、统一化的操作。 三、RPC 架构特点： 一个完整的RPC架构里面包含了四个核心的组件，分别是Client ,Server,Client Stub以及Server Stub，这个Stub大家可以理解为存根。分别说说这几个组件： 客户端（Client），服务的调用方。 服务端（Server），真正的服务提供者。 客户端存根，存放服务端的地址消息，再将客户端的请求参数打包成网络消息，然后通过网络远程发送给服务方。 服务端存根，接收客户端发送过来的消息，将消息解包，并调用本地的方法。 四、 什么时候需要PRC： 先来看一下，没有RPC的时候，会怎么样： 在过去是这样的，包括现在很多对企业服务可能也是这样，只有一个包部署在web服务器里。那个时候，没什么需要用到RPC的场景。然后当用户量大的时候呢？渐渐出现了负载均衡。“海阔中文网”为您分析，大概是这个样子： 负载均衡能解决的问题很多，但是还是不够好，比如说，只是某一个功能模块（假设是用户中心）被访问的次数特别频繁，我可不可以把这部分内容单独拿出去？用户中心的机器独立，给它单独的带宽，给他单独的服务器，给他单独的数据库？ 不这么干其他的功能模块都干不下去了啊。 以学校餐厅举例： 学校餐厅，可以容纳500人同时就餐，但是有一家面馆，生意特别好，每到饭点来吃饭的人都有2000人，占满了餐桌，排队好几百米，餐厅的其他摊位肯定不乐意了吧？比如那个卖水饺的，虽然每天几十个人来吃饭。那也是钱啊。你人这么多，想来我这吃饭的人都挤不进来了，大概情景是这样的： 这样能看懂吧？遇到这种场景怎么办？不可能不让面馆开门营业啊，那最好的方式就是：“你可不可以搬出去？” 你不搬我们搬也行！（哭泣脸，反正我们是再也不要和你家面馆开在一起了，必须给我们一个说法） 那么，搬家之后的样子可能是这样的。 嗯啊。分是分开了，然后餐卡什么的还是在一起，还是和其他窗口一样，给大家提供就餐的功能。这就是分而治之，哪怕你面馆关门了，也不影响我，这又叫分布式。（“分布式”划重点） 说到分布式，就问题就来了。 可不可以互相调用？其实细分下去，买菜，切菜，结账这些都是独立的流程，我们能不能都把它们独立出来？ 当然是可以的，但是带来的问题就是，如何通信？大家都不在一个进程里。 这种通信的方式，就叫做RPC，在今天，RPC已经不仅仅是远程，这个远程，确切来说，就是指不在一个进程内，只能通过其他协议来完成，通常都是TCP或者是Http。 好了，RPC讲清楚了，再看RPC的重点是什么。 不能太慢，对不对？如果太慢了，怎么办？ 这种性能的要求，要做到什么程度？希望是和在同一个进程里，一致的体验。 Http能做到这种程度么？ 不行。Http（TCP）本身的三次握手协议，就会带来大概1MS的延迟（emmm，这个数据其实我有点不确定了，也可能是几微秒，很早之前做过测试）。 每发送一次请求，都会有一次建立连接的过程，加上Http报文本身的庞大，以及Json的庞大，都需要作一些优化。 一般的场景下，没什么问题，但是对于Google这种级别的公司，他们接受不了。 几MS的延迟可能就导致多出来几万台服务器，所以他们想尽办法去优化，优化从哪方面入手？ 1.减少传输量。 2.简化协议。 3.用长连接，不再每一个请求都重新走三次握手流程 Http的协议就注定了，在高性能要求的下，不适合用做线上分布式服务之间互相使用的通信协议。 [&#8230;]]]></description>
		
		
		
			</item>
	</channel>
</rss>
