读构建可扩展分布式系统:方法与实践03分布式系统要点

2024-09-13  本文已影响0人  躺柒
读构建可扩展分布式系统:方法与实践03分布式系统要点.png

1. 通信基础

1.1. 每个分布式系统都包含通过网络进行通信的软件组件

1.2. 硬件

1.3. 软件

2. 远程方法调用

2.1. 使用直接与传输层协议TCP和UDP交互的底层API来编写分布式应用程序是完全可行的

2.2. 最常见的方法是调用标准化套接字库

2.3. 套接字是客户端和服务器之间双向网络连接的一个端点

2.4. 可以直接向套接字API写入分布式应用程序,它是操作系统的核心组件

2.5. 注册表是一种简单的目录服务,通过它,客户端可以查找位置(网络地址和对象引用),并简单地提供逻辑名称来获取RMI服务器引用,逻辑名称在注册表中已经与服务器的引用相关联

2.6. 跨编程语言的编组(客户端使用一种编程语言,服务器端使用另一种编程语言)可能会导致错误,因为类型在不同语言中的表示方式不同,存在微妙的不兼容性

2.7. 多数现代系统都是围绕基于HTTP并使用JSON表示参数的更简单协议来构建的

3. 局部故障

3.1. 分布式系统的组件通过网络通信

3.2. 异步网络特点

3.3. 同步网络则不一样,本质上是全双工的,同时在两个方向传输数据,每个节点的时钟是同步的

3.4. 客户端是否收到响应,以及何时收到响应,这被称为局部故障处理

3.5. 幂等性

3.6. 更新持久状态则是另一回事

3.7. 服务器状态发生变化的端点必须是幂等的

3.8. 构建幂等操作的方法

3.9. 存储幂等键的数据库的实现

3.10. 与应用程序数据不同,幂等键不必永远保留

3.11. 幂等API实现必须确保应用程序状态已修改和幂等键已存储,两者均已发生API才能成功

3.12. 从本质上讲,事务确保了严格一次的操作(exactly-once semantics for operations),保证了所有消息始终只处理一次

3.13. 最多一次(at-most-once)消息传递速度快且不可靠——这是UDP协议提供的

3.14. 至少一次(at-least-once)消息传递是TCP/IP提供的保证,意味着重复是不可避免的

4. 分布式系统中的共识

4.1. 事实上,不能保证一定会达成协议是可以证明的

4.2. 局部失败类似于丢失消息和确认

4.3. FLP不可能原理

4.4. 在异步网络上无法保证在无限消息延迟的情况下达成共识

4.5. 拜占庭故障,在分布式系统中尤为险恶

5. 分布式系统中的时间

5.1. 分布式系统中的每个节点都有自己的内部时钟

5.2. 时间服务是准确的时间源

5.3. 使用最广泛的时间服务是NTP(网络时间协议)

5.4. 日历钟

5.5. 单调时钟

5.6. 应用程序可以使用NTP服务来确保系统中每个节点上的时钟紧密同步

5.7. Chrony支持NTP协议,但比NTP准确性更高和扩展性更好

6. 要点

6.1. 解决方案分布在不同位置的多台机器上,每台机器并行处理事件,且它们之间通过网络交换消息

6.2. 分布式系统中的通信可以透明地穿过许多不同类型的底层物理网络,包括WiFi、无线网络、广域网和局域网

6.3. 互联网协议栈通过IP和TCP协议的组合确保跨异构网络的可靠通信

6.4. 使用RMI/RPC技术构建TCP/IP层,为客户端/服务器通信提供抽象层,采用本地方法/过程调用的方式调用服务器接口

6.5. 在异步网络中,存在崩溃故障的情况下,有限时间内不可能在多个节点之间就状态达成一致或达成共识

6.6. 没有完全可靠的全局时间源可供应用程序中的节点同步其行为

上一篇下一篇

猜你喜欢

热点阅读