[RPC原理詳解](https://blog.csdn.net/cbbbc/article/details/50675240)
[序列化的作用](https://blog.csdn.net/cbbbc/article/details/55214562)
*****
[Go RPC 開發指南](https://doc.rpcx.io/)
[用 rpc 實現遠程過程調用](https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/15.9.md)
*****
RPC 是兩個子系統之間進行的直接消息交互,它使用操作系統提供的套接字來作為消息的載體,以特定的消息格式來定義消息內容和邊界。
RPC 的客戶端通過文件描述符的讀寫 API (read & write) 來訪問操作系統內核中的網絡模塊為當前套接字分配的發送 (send buffer) 和接收 (recv buffer) 緩存。
>戶端進程寫 RPC 指令消息到內核的發送緩存中,內核將發送緩存中的數據傳送到物理硬件 NIC,也就是網絡接口。NIC 負責將翻譯出來的模擬信號通過網絡硬件傳遞到服務器硬件的 NIC。服務器的 NIC, 再將模擬信號轉成字節數據存放到內核為套接字分配的接收緩存中,最終服務器進程從接收緩存中讀取數據即為源客戶端進程傳遞過來的 RPC 指令消息。
>消息從用戶進程流向物理硬件,又從物理硬件流向用戶進程,中間還經過了一系列的路由網關節點。
**一次 RPC 過程如下圖所示:**

*****
**完整的 RPC 框架 **
在一個典型 RPC 的使用場景中,包含了服務發現、負載、容錯、網絡傳輸、序列化等組件,其中“RPC 協議”就指明了程序如何進行網絡傳輸和序列化。

**RPC 核心功能**
RPC 的核心功能是指實現一個 RPC 最重要的功能模塊,就是上圖中的”RPC 協議”部分:

一個 RPC 的核心功能主要有 5 個部分組成,分別是:客戶端、客戶端 Stub、網絡傳輸模塊、服務端 Stub、服務端等。

下面分別介紹核心 RPC 框架的重要組成:
* **客戶端(Client)** 服務調用方。
* **客戶端存根(Client Stub)** :存放服務端地址信息,將客戶端的請求參數數據信息打包成網絡消息,再通過網絡傳輸發送給服務端。
* **服務端存根(Server Stub)** : 接收客戶端發送過來的請求消息并進行解包,然后再調用本地服務進行處理。
* **服務端(Server):** 服務的真正提供者。
* **Network Service:** 底層傳輸,可以是 TCP 或 HTTP。
*****
## 深入理解 RPC 專題
阿里 **徐靖峰** 的原創文章,該系列文章由淺及深深入分析了 RPC 的核心原理。
* [簡單了解RPC實現原理](http://cmsblogs.com/?p=3867)
* [深入理解RPC之序列化篇–Kryo](http://cmsblogs.com/?p=3869)
* [深入理解RPC之序列化篇](http://cmsblogs.com/?p=3871)
* [深入理解RPC之動態代理篇](http://cmsblogs.com/?p=3873)
* [深入理解RPC之傳輸篇](http://cmsblogs.com/?p=3875)
* [Motan中使用異步RPC接口](http://cmsblogs.com/?p=3877)
* [深入理解RPC之協議篇](http://cmsblogs.com/?p=3879)
* [深入理解RPC之服務注冊與發現篇](http://cmsblogs.com/?p=3881)
* [深入理解RPC之集群篇](http://cmsblogs.com/?p=3883)
* [設計RPC接口時,你有考慮過這些嗎?](http://cmsblogs.com/?p=3885)
- 前言
- 服務器開發設計
- Reactor模式
- 一種心跳,兩種設計
- 聊聊 TCP 長連接和心跳那些事
- 學習TCP三次握手和四次揮手
- Linux基礎
- Linux的inode的理解
- 異步IO模型介紹
- 20個最常用的GCC編譯器參數
- epoll
- epoll精髓
- epoll原理詳解及epoll反應堆模型
- epoll的坑
- epoll的本質
- socket的SO_REUSEADDR參數全面分析
- 服務器網絡
- Protobuf
- Protobuf2 語法指南
- 一種自動反射消息類型的 Protobuf 網絡傳輸方案
- 微服務
- RPC框架
- 什么是RPC
- 如何科學的解釋RPC
- RPC 消息協議
- 實現一個極簡版的RPC
- 一個基于protobuf的極簡RPC
- 如何基于protobuf實現一個極簡版的RPC
- 開源RPC框架
- thrift
- grpc
- brpc
- Dubbo
- 服務注冊,發現,治理
- Redis
- Redis發布訂閱
- Redis分布式鎖
- 一致性哈希算法
- Redis常見問題
- Redis數據類型
- 緩存一致性
- LevelDB
- 高可用
- keepalived基本理解
- keepalived操做
- LVS 學習
- 性能優化
- Linux服務器程序性能優化方法
- SRS性能(CPU)、內存優化工具用法
- centos6的性能分析工具集合
- CentOS系統性能工具 sar 示例!
- Linux性能監控工具集sysstat
- gdb相關
- Linux 下如何產生core文件(core dump設置)