高性能框架方案

高性能框架方案

  • WEB框架
  • 任务调度
  • 消息队列
  • 存储

WEB框架

Django

Django是走大而全的方向,注重高效开发,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。

Flask

轻量级Web应用框架

Tornado

轻量级web框架,功能少而精,注重性能优越。可以作为HTTP服务器,支持异步编程与WebSocket。 Tornado采用异步IO,可以轻松达到每秒上千个请求的效率。AIO的思想是当我们在等待结果的时候不阻塞,转而我们给框架一个回调函数作为参数,让框架在收到结果的时候再通过回调函数继续操作。这样,服务器就可以在等待结果的时候被解放去接受其他客户端的请求了。

什么场景下使用并发编程?

并发编程等待目的是让程序“同时”执行多个任何。如果程序是计算密集型的,并发程序并没有优势,反而由于任何的切换是的效率降低。但如果程序是I/O密集型的,比如经常读写文件,访问数据库等,则情况就不同了。由于I/O操作的速度远远没有CPU计算速度快,所以让程序阻塞与I/O操作将浪费大量的CPU时间。如果程序有多个执行线程,则当前被I/O操作所阻塞的执行线程可主动放弃CPU(或者由操作系统来调度),并执行权转移到其他线程。这样一来,CPU就可以用来做更加有意义的事情,而不是等待I/O操作完成,因此CPU的利用率显著提升。

Tornado异步原理详析

任务调度

  • Celery Celery 是Python开发的分布式任务队列。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。Celery侧重于实时操作,用于生产系统每天处理数以百万计的任务。Celery的工作就是管理分配任务到不同的服务器,并且取得结果. Celery本身不提供消息存储服务,它使用第三方消息服务来传递任务。目前支持 RabbitMQ(推荐), Redis(不可靠),MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental)等。

消息队列

消息队列(Message Queue)是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。 在面向服务架构中通过消息代理,使用生产者-消费者模式在服务间进行异步通信是一种比较好的思想。因为服务间依赖由强耦合变成了松耦合。消息代理都会提供持久化机制,在消费者负载高或者掉线的情况下会把消息保存起来,不会丢失。就是说生产者和消费者不需要同时在线,这是传统的请求-应答模式比较难做到的,需要一个中间件来专门做这件事。其次消息代理可以根据消息本身做简单的路由策略,消费者可以根据这个来做负载均衡,业务分离等。缺点也有,就是需要额外搭建消息代理集群(但优点是大于缺点的 ) 。

https://www.zhihu.com/question/22480085/answer/121566103

  • Kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据

  • RabbitMQ 消息中间件,配合Celery使用。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

存储

  • MySQL

总体框架图: