缓存与消息队列

服务器在负载较重时使用的基本技术:缓存&消息队列

前边的章节介绍了套接字API,Python中使用基础IP网络操作构建信道的方式

之后将讨论构建在套接字上的特定协议

编写优雅的服务,解决特定的问题——机构内部特有的

HTTP针对特定的负载设计(超文本文档)

Memcached:内存缓存守护进程。结合服务器上的空闲RAM与LRU(last recently use)缓存

使用Memcached

在每台空闲内存的服务器上运行Memcached进程

Memcached守护进程的IP地址与端口号列出(列表)——发送给所有将使用Memcached的客户端

客户端可以访问一个组织极的,速度极快的键值缓存(Python字典)

目的:将重复计算,花销大的计算结果保存

数据库查询,文件系统读写,外部服务读写

决定信息在缓存中的保存时间

重启后丢失

脏数据:

1.设定过期时间

2.信息标识到包含标识的键的映射

3.记录不可用:覆写,而不是删除。程序首次启动时预安装缓存

装饰器实现缓存

8.2 散列与分区

当Memcached客户端包含了多个Memcached实例的列表,会根据每个键的字符串值的散列值对Memcached数据库进行分区。

计算出的散列值决定使用集群中的具体服务器

避免冗余,避免不同服务器之间的协同操作

解决方案:所有服务器实现相同的稳定算法

消除原数据的分布规律(随机),避免依赖输入数据中的模式。模式消除

8.3消息队列

允许发送可靠的数据块——消息。保证消息可靠自动传输。

负责封帧

TCP:基于IP点对点

消息队列:允许多个拓扑结构

可作为自定义远程过程调用服务(RPC)的基础

  前端服务器将工作交给后端服务器完成:前端将请求加入消息队列,后端监听消息队列,处理请求返回响应

集中存储小型有效消息(大容量事件数据)

具有混合安排并匹配所有客户端与服务器的能力。并连接到同一消息队列。

单一目的的机器,将机器集合到集群,共同提供某个服务。

拓扑结构:

管道:生产者,消费者

发布者,订阅者

请求,响应:消息需要往返,保持连接。队列需要提供寻址模式

允许服务器绑定,解绑

大量运行多个轻量级线程,与数据库客户端、文件服务器连接。

最流行的消息队列:被实现为独立的服务器

所有组件绑定到消息队列:生产者,消费者,过滤器,RPC服务

AMQP协议:跨语言消息队列协议

每个线程创建一个或多个用于通信的套接字,试图让两个线程共享一个消息套接字:不安全

线程间共享共同上下文对象(context)保证所有线程存在于同一个URL和消息队列空间内

消息机制隐式的为请求自动添加返回地址供代理完成后返回

实际情况:保证无法处理的消息被持久化保存。

流量控制,保证速度慢的时候也能处理消息队列中的消息。

原文地址:https://www.cnblogs.com/qmcj/p/9215070.html