## RPC
**author:xiak**
**last update: 2022-10-15 10:12:22**
----
[TOC=3,8]
### 介紹
[遠程服務調用 | 鳳凰架構](http://icyfenix.cn/architect-perspective/general-architecture/api-style/rpc.html)
~~~
論文的中心觀點是:本地調用與遠程調用當做一樣處理,這是犯了方向性的錯誤,把系統間的調用做成透明,反而會增加程序員工作的復雜度。此后幾年,關于 RPC 應該如何發展、如何實現的論文層出不窮,透明通信的支持者有之,反對者有之,冷靜分析者有之,狂熱唾罵者有之,但歷史逐漸證明 Andrew Tanenbaum 的預言是正確的。最終,到 1994 年至 1997 年間,由 ACM 和 Sun 院士Peter Deutsch、套接字接口發明者Bill Joy、Java 之父James Gosling等一眾在 Sun Microsystems 工作的大佬們共同總結了通過網絡進行分布式運算的八宗罪(8 Fallacies of Distributed Computing):
The network is reliable —— 網絡是可靠的。
Latency is zero —— 延遲是不存在的。
Bandwidth is infinite —— 帶寬是無限的。
The network is secure —— 網絡是安全的。
Topology doesn't change —— 拓撲結構是一成不變的。
There is one administrator —— 總會有一個管理員。
Transport cost is zero —— 不必考慮傳輸成本。
The network is homogeneous —— 網絡是同質化的。
以上這八條反話被認為是程序員在網絡編程中經常被忽略的八大問題,潛臺詞就是如果遠程服務調用要弄透明化的話,就必須為這些罪過埋單,這算是給 RPC 是否能等同于 IPC 來實現暫時定下了一個具有公信力的結論。至此,RPC 應該是一種高層次的或者說語言層次的特征,而不是像 IPC 那樣,是低層次的或者說系統層次的特征成為工業界、學術界的主流觀點。
~~~
[微服務是什么? - 阮一峰的網絡日志](https://www.ruanyifeng.com/blog/2022/04/microservice.html)
> 大概在20多年前,隨著互聯網的出現,功能單元可以用遠程"服務"的形式提供,就誕生出了"面向服務架構"(service-oriented architecture,簡稱 SOA)。尋根溯源
> 只用一臺服務器就實現了面向服務架構,這在以前是做不到的。這種實現方式就叫做 微 服務。
> 簡單說,**微服務就是采用容器技術的面向服務架構**。它依然使用"服務"作為功能單元,但是變成了輕量級實現,不需要新增服務器,只需要新建容器(一個進程),所以才叫做"微服務"。
- 開始
- 公益
- 更好的使用看云
- 推薦書單
- 優秀資源整理
- 技術文章寫作規范
- SublimeText - 編碼利器
- PSR-0/PSR-4命名標準
- php的多進程實驗分析
- 高級PHP
- 進程
- 信號
- 事件
- IO模型
- 同步、異步
- socket
- Swoole
- PHP擴展
- Composer
- easyswoole
- php多線程
- 守護程序
- 文件鎖
- s-socket
- aphp
- 隊列&并發
- 隊列
- 講個故事
- 如何最大效率的問題
- 訪問式的web服務(一)
- 訪問式的web服務(二)
- 請求
- 瀏覽器訪問阻塞問題
- Swoole
- 你必須理解的計算機核心概念 - 碼農翻身
- CPU阿甘 - 碼農翻身
- 異步通知,那我要怎么通知你啊?
- 實時操作系統
- 深入實時 Linux
- Redis 實現隊列
- redis與隊列
- 定時-時鐘-阻塞
- 計算機的生命
- 多進程/多線程
- 進程通信
- 拜占庭將軍問題深入探討
- JAVA CAS原理深度分析
- 隊列的思考
- 走進并發的世界
- 鎖
- 事務筆記
- 并發問題帶來的后果
- 為什么說樂觀鎖是安全的
- 內存鎖與內存事務 - 劉小兵2014
- 加鎖還是不加鎖,這是一個問題 - 碼農翻身
- 編程世界的那把鎖 - 碼農翻身
- 如何保證萬無一失
- 傳統事務與柔性事務
- 大白話搞懂什么是同步/異步/阻塞/非阻塞
- redis實現鎖
- 淺談mysql事務
- PHP異常
- php錯誤
- 文件加載
- 路由與偽靜態
- URL模式之分析
- 字符串處理
- 正則表達式
- 數組合并與+
- 文件上傳
- 常用驗證與過濾
- 記錄
- 趣圖
- foreach需要注意的問題
- Discuz!筆記
- 程序設計思維
- 抽象與具體
- 配置
- 關于如何學習的思考
- 編程思維
- 談編程
- 如何安全的修改對象
- 臨時
- 臨時筆記
- 透過問題看本質
- 程序后門
- 邊界檢查
- session
- 安全
- 王垠
- 第三方數據接口
- 驗證碼問題
- 還是少不了虛擬機
- 程序員如何談戀愛
- 程序員為什么要一直改BUG,為什么不能一次性把代碼寫好?
- 碎碎念
- 算法
- 實用代碼
- 相對私密與絕對私密
- 學習目標
- 隨記
- 編程小知識
- foo
- 落盤
- URL編碼的思考
- 字符編碼
- Elasticsearch
- TCP-IP協議
- 碎碎念2
- Grafana
- EFK、ELK
- RPC
- 依賴注入
- 科目一
- 開發筆記
- 經緯度格式轉換
- php時區問題
- 解決本地開發時調用遠程AIP跨域問題
- 后期靜態綁定
- 談tp的跳轉提示頁面
- 無限分類問題
- 生成微縮圖
- MVC名詞
- MVC架構
- 也許模塊不是唯一的答案
- 哈希算法
- 開發后臺
- 軟件設計架構
- mysql表字段設計
- 上傳表如何設計
- 二開心得
- awesomes-tables
- 安全的代碼部署
- 微信開發筆記
- 賬戶授權相關
- 小程序獲取是否關注其公眾號
- 支付相關
- 提交訂單
- 微信支付筆記
- 支付接口筆記
- 支付中心開發
- 下單與支付
- 支付流程設計
- 訂單與支付設計
- 敏感操作驗證
- 排序設計
- 代碼的運行環境
- 搜索關鍵字的顯示處理
- 接口異步更新ip信息
- 圖片處理
- 項目搭建
- 閱讀文檔的新方式
- mysql_insert_id并發問題思考
- 行鎖注意事項
- 細節注意
- 如何處理用戶的輸入
- 不可見的字符
- 抽獎
- 時間處理
- 應用開發實戰
- python 學習記錄
- Scrapy 教程
- Playwright 教程
- stealth.min.js
- Selenium 教程
- requests 教程
- pyautogui 教程
- Flask 教程
- PyInstaller 教程
- 蜘蛛
- python 文檔相似度驗證
- thinkphp5.0數據庫與模型的研究
- workerman進程管理
- workerman網絡分析
- java學習記錄
- docker
- 筆記
- kubernetes
- Kubernetes
- PaddlePaddle
- composer
- oneinstack
- 人工智能 AI
- 京東
- pc_detailpage_wareBusiness
- doc
- 電商網站設計
- iwebshop
- 商品規格分析
- 商品屬性分析
- tpshop
- 商品規格分析
- 商品屬性分析
- 電商表設計
- 設計記錄
- 優惠券
- 生成唯一訂單號
- 購物車技術
- 分類與類型
- 微信登錄與綁定
- 京東到家庫存系統架構設計
- crmeb
- 命名規范
- Nginx https配置
- 關于人工智能
- 從人的思考方式到二叉樹
- 架構
- 今日有感
- 文章保存
- 安全背后: 瀏覽器是如何校驗證書的
- 避不開的分布式事務
- devops自動化運維、部署、測試的最后一公里 —— ApiFox 云時代的接口管理工具
- 找到自己今生要做的事
- 自動化生活
- 開源與漿果
- Apifox: API 接口自動化測試指南