CDN 技术研究——Cache集群通信
Cache 集群通信
Cache 集群通信可以分为松散耦合和紧密耦合两种方式,典型代表:
松散耦合
- ICP
- HTCP
- Cache Digest
- Cache Pre-filling
紧密耦合
- CARP
ICP
RFC 2186 Internet Cache Protocol
ICP 一般使用 UDP 协议进行承载,用于 Cache 服务器之间相互查询资源信息,应答中包含命中(hit)或者失效(miss)信息。
不包含 HTTP 中资源相关的头(如访问控制,缓存指示),因此命中的情况下,使用 HTTP 获取资源时仍可能出现失败
HTCP
RFC 2756 Hypertext Caching Protocol
HTCP 可以使用 UDP 和 TCP 协议进行承载,UDP 必须支持,TCP 主要用于协议调试。与 ICP 不同,HTCP 请求和应答中可以包含完整的 HTTP 头文件,避免命中 Cache 的情况下使用 HTTP 获取资源失败问题
HTCP 包含:
- 头信息:消息长度,协议版本
- 数据:HTCP 协议中的具体内容
- 认证:可选,一般选用 HMAC-MD5 共享密钥认证
Cache Digest
Cache 服务器将内容通过摘要算法生成本 Cache 服务器的 Cache 内容信息摘要文件
其它 Cache 服务器通过推或拉的方式获取该摘要文件。当外部请求资源时,Cache 服务器可以通过摘要文件判断资源在哪台 Cache 服务器上
为防止摘要文件被篡改,一般使用拉的方式从相邻 Cache 服务器获取 Cache 信息摘要文件
Cache Pre-filling
使用 IP 多播网络向多播组中的所有 Cache 服务器推送 Cache 内容,从而实现集群中各台服务器保存内容的同步。
目前没有统一标准,基于实际场景自行开发
CARP
Cache Array Routing Protocol,是一个分布式的缓存协议
为集群定义一张 Cache 服务器阵列成员表,以及用于向 Cache 服务器上分发缓存 URL 信息的哈希函数。通过对 URL 进行哈希运算,可以定位 URL 对应的资源在哪台 Cache 服务器上
这种方式实际就是通过对 URL 的 Hash 运算决定资源存放的位置。和一致性 Hash 算法思路一样,一致性 Hash 可以解决中节点变化导致 Hash 命中率下降问题