长轮询 vs WebSocket vs 服务器发送事件
Ajax 轮询
不断向服务器请求新数据
缺点:很多响应都是空的,造成了 HTTP 开销
HTTP 长轮询
客户端发出初始请求,服务器会延迟响应,直到有更新可用或发生超时
WebSockets
- C/S间长期 TCP连接,全双工 通信通道
- 双向持续对话
服务器发送事件 (SSE)
- C/S间长期连接
- 服务器可持续向客户端发送数据
- 客户端需要使用其他技术向服务器发送数据
布隆过滤器
如果我们有大量结构化数据(由记录 ID 标识)存储在一组数据文件中,那么如何最有效地找到哪个文件可能包含我们所需的数据呢?
布隆过滤器的数据结构可以判断某个元素是否可能存在于集合中,或者肯定不存在于集合中
法定人数(Quorum)-分布式系统
- 仲裁:在宣布操作总体成功之前需要成功执行分布式操作的服务器的最小数量
当节点遵循以下协议时,即可实现法定人数:R+W>N:
N= 仲裁组中的节点,W= 最小写入节点数,R= 最小读取节点数
如果分布式系统遵循 R+W>N 规则,那么每次读取都会看到至少一份最新写入值的副本。
-
强一致性 (Strong Consistency) :总能读到最新的已成功写入的数据
-
容错性 (Fault Tolerance) :
- 在 N=5, W=3, R=3 的配置下,系统可以容忍 2 个保管员(5 - 3 = 2)同时“宕机”,写入操作依然可以成功。
- 读取操作也一样。
-
灵活性 (Flexibility) :可以通过调整 W 和 R 的值,来权衡读取和写入的性能:
- 偏向快速读取 (R=1, W=5) :读取时随便问一个就行,非常快。但写入时必须通知所有5个人,非常慢,而且只要有一个人不在,写入就失败。
- 偏向快速写入 (W=1, R=5) :写入时随便告诉一个人就行,非常快。但读取时必须问遍所有人才能确定最新版本,非常慢。
- 均衡模式 (W=3, R=3) :读写性能和容错性比较均衡,这是最常见的配置。
领导者与追随者
只允许单个服务器(领导者)负责数据复制和协调工作。
心跳
每个服务器都会定期向中央监控服务器或系统中的其他服务器发送心跳消息,以表明它仍然活跃且正常运行
校验和
分布式系统确保数据完整性的方式:计算校验和并将其与数据一起存储
加密哈希函数,例如 MD5、SHA-1、SHA-256 或 SHA-512。哈希函数获取输入数据并生成一个固定长度的字符串,该字符串称为校验和。