前面已经介绍了套接字API以及在Python中使用的基础IP网络操作来构建通信信道的方式。本章研究服务负载较重时常用的两项基本技术:缓存与消息队列。这两项技术有如下一些共同特点:
- 都是非常强大的工具,因而广为流行。使用Memcached或一个消息队列,不是为了实现一个有趣的协议来与其他工具进行交互,二是为了编写优雅的服务来解决特定的问题。
- 这两项技术解决的问题通常是机构内部特有的问题。我们通常无法仅从外界就得知一个特定的网站或网络服务使用了哪种缓存、哪种消息队列以及哪种负载分配工具。
- 尽管HTTP和SMTP这样的工具都是针对一个特定的负载设计的(HTTP针对超文本文档,SMTP针对电子邮件消息),但是缓存和消息队列是无需了解它们所要传输的数据的。
- 我们可以将缓存和消息队列视为提供了两个已经造好的轮子,以避免重复的劳动。
Memcached意为“内存缓存守护进程“(memory cache daemon).Memcached将安装它的服务器上的空闲RAM与一个很大的近期最少使用(LRU)的缓存结合使用。我们可以从Memcached的实现中学习到一个重要的现代网络概念--分区(Sharding).使用Memcached的实际步骤是相当简单的。
- 在每台拥有空闲内存的服务器上都运行一个Memcached守护进程。
- 将所有Memcached守护进程的IP地址与端口号列出,并将该列表发送给所有将要使用Memcached的客户端。
- 客户端程序现在可以访问一个组织级的速度极快的键值缓存,它就像是所有服务器之间共享的一个巨大的Python字典。该缓存是基于LRU的。如果有些项长时间没有被访问的话,就会将这些项丢弃