November 2, 2018

Async Report Download Pattern

后台有个报表产生数据较大,查询较长时间段的数据可能会让后端进程block不能处理其他请求,本来后台网站就没多少流量,所以并没有开很多后端进程。

如果是纯异步代码来处理请求自然不用担心,同步和异步代码对使用者没差别,使用者需要等1分钟才得到数据,用哪种代码实现都一样,但不一样的地方是,用异步代码可以让后端进程在等待IO时继续处理其他请求。

单看某一个请求体现不出差别,如果有多个这样的耗费IO请求过来,用异步代码的好处就很明显了,每个后端进程可以处理更多请求。

我对这个报表进行了改造,如果查询时间在一星期内,等待时间尚可接受,就直接把数据返回给访问者,如果超过了一个星期,则会记录下要查询的时间段,由异步任务来查询、生成文件,访问者稍后从页面上看到数据已经可以下载,则下载下来,过一段时间自动删除这些生成的报表。

对于访问者,等待时间和之前查不了太多,但好处是解放了后端进程,可以服务更多的请求,而且如果有不少人对某个特定时间范围内的数据有需求,可以共享已有数据。

Powered by Hugo & Kiss.