要解决的问题:并发能力没问题,但处理单个请求比较耗时,比如,获得一个统计值需要查多次数据库导致很长的响应时间
解决办法:
1.同步改异步,给用户的反馈也改成异步
前端程序把任务丢到后台消息队列后,立即告诉用户:“正在为你统计,请稍候刷新页面”
消息队列的消费者,即worker,在算出统计值后,再把结果丢进数据库
用户刷新页面时,前端程序去数据库查询到结果,再反馈给用户
这就叫异步计算
2.串行变并行,减少总体响应时间,用户可以同步等待反馈
把任务拆分成多个小任务,后台多个worker各领一个小任务并同时处理,响应时间立刻缩短
并行处理完后,再将结果合并起来,返回给用户
如果总体时间够短,对用户的反馈机制就没必要做成异步;用户可同步等等反馈
这叫做并行计算
具体技术:
1. 同步改异步:用消息队列,如MemcacheQ
2. 并行计算:采用Map/Reduce
a. Map代表拆分,Reduce代表汇总
b. 兼做监控、容错、可用性、负载均衡等事情
c. Map/Reduce框架本身不是开放的(Google的内部产品),但思想是开放的;你可以用Hadoop来做Map/Reduce, 也可以自己编码实现