本页介绍分布式系统间通信所使用的各种协议和架构风格。理解这些基础知识对于设计可伸缩系统至关重要,因为系统组件需要在网络中有效且高效地进行交互。
有关消息队列等异步通信模式的信息,请参阅异步性。
在分布式系统中,组件需要在网络中交换信息。不同的通信协议和架构风格在可靠性、性能和实现简易性方面提供了各种权衡。
TCP 是一种面向连接的协议,可在通过 IP 网络通信的主机上运行的应用程序之间提供可靠、有序且经过错误检查的数据传输。
TCP 的主要特点
何时使用 TCP
来源:README.md165-166 README-ja.md1351-1376
UDP 是一种无连接协议,提供最小的传输服务,不保证交付、排序或重复保护。
UDP 的主要特点
何时使用 UDP
TCP 与 UDP 比较
| 功能 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 保证交付 | 尽力而为交付 |
| 排序 | 保持顺序 | 不保证顺序 |
| 速度 | 因开销而较慢 | 更快 |
| 报头大小 | 20-60 字节 | 8 字节 |
| 流量控制 | 是 | 否 |
| 用例 | Web、电子邮件、文件传输 | 流媒体、DNS、VoIP |
来源:README.md167 README-ja.md1377-1405
RPC 是一种协议,允许一台计算机上的程序在另一台计算机上执行过程,而无需明确编写远程交互的详细信息。
RPC 的主要特点
RPC 调用示例
GET /someoperation?data=anId
POST /anotheroperation
{
"data":"anId";
"anotherdata": "another value"
}
何时使用 RPC
来源:README.md167 README-ja.md1406-1453
REST 是一种用于分布式超媒体系统的架构风格,其特点是客户端-服务器关系,客户端通过 URI 标识的资源进行请求操作。
REST 的主要特点
REST 调用示例
GET /someresources/anId
PUT /someresources/anId
{"anotherdata": "another value"}
REST 的关键原则
何时使用 REST
来源:README.md168 README-ja.md1454-1509
RPC 与 REST 操作比较
| 操作 | RPC | REST |
|---|---|---|
| 注册 | POST /signup | POST /persons |
| 读取个人信息 | GET /readPerson?personid=1234 | GET /persons/1234 |
| 读取个人物品列表 | GET /readUsersItemsList?personid=1234 | GET /persons/1234/items |
| 向个人物品中添加物品 | POST /addItemToUsersItemsList { "personid": "1234"; "itemid": "456" } | POST /persons/1234/items { "itemid": "456" } |
| 更新物品 | POST /modifyItem { "itemid": "456"; "key": "value" } | PUT /items/456 { "key": "value" } |
| 删除物品 | POST /removeItem { "itemid": "456" } | DELETE /items/456 |
来源:README.md1485-1495 README-ja.md1486-1495
选择通信协议时要考虑的因素
API 的受众
性能要求
数据模型
所需的协议特性
通信协议是分布式系统的基础。理解不同协议之间的权衡,使系统设计者能够根据其特定需求选择合适的方法。
在设计系统时,必须根据应用程序的特定需求选择合适的通信范式,同时考虑可靠性需求、性能限制以及数据和操作的自然结构等因素。
刷新此 Wiki
最后索引时间2025年4月17日(40d5d2)