后端请求中的异步计算与并行计算
说明:本文是学习过程中的知识整理,并没有个人实际使用的经验。如果有进一步学习的需要,可查看参考链接。
在后端开发过程中,我们会遇到一种情况:用户请求涉及到比较耗时的计算,比如:
- 连接邮件服务器,发送一封比较复杂的 HTML 邮件
- 收到请求后开始一个爬虫任务
遇到类似问题,我们不会在用户请求的处理过程中完成计算,让用户经历漫长地等待,而是通过异步计算、分布式计算等方式来处理任务。将任务转移到后台异步进行,或者将一个耗时的计算拆分到多个服务器上同时进行。
异步计算
线程池异步执行
线程异步指的是一个调用请求发送给被调用者,而调用者不用等待其结果的返回,一般异步执行的任务都需要比较长的时间
分布式消息队列
消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不同的进程。生产者往管道中写消息,消费者从管道中读消息。
主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。
好处:
- 解耦
- 提速
- 广播
- 消峰
使用消息队列需要满足的条件:
- 生产者不需要从消费者处获得反馈
- 容许短暂的不一致性
Gearman
分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务。
MemcacheQ
一个国内开发的基于memcache协议、BDB持久数据存储、高性能轻量级分布式消息队列服务。
特点:
- 简单高效,基于memcache协议,这意味着只要客户端支持memcache协议即可使用。
- 队列数据存储于BDB,持久保存。
- 并发性能好。
- 支持多条队列
Kafka
一个分布式流媒体平台,它主要有3种功能:
- 发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因
- 以容错的方式记录消息流,kafka以文件的方式来存储消息流
- 可以在消息发布的时候进行处理
并行计算
Map/Reduce
MapReduce是一种编程模型,是一种编程方法,是抽象的理论,采用了分而治之的思想。MapReduce框架的核心步骤主要分两部分,分别是Map和Reduce。每个文件分片由单独的机器去处理,这就是Map的方法,将各个机器计算的结果汇总并得到最终的结果,这就是Reduce的方法。
Hadoop
Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce(数据存储和分布式计算)。
HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进行分布式储存和读取。
Hadoop 能干什么:
- 大数据存储:分布式存储
- 日志处理:擅长日志分析
- ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
- 机器学习: 比如Apache Mahout项目
- 搜索引擎:Hadoop + lucene实现
- 数据挖掘:目前比较流行的广告推荐,个性化广告推荐
参考
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: