请教个几个接口统计,任务队列相关的问题

2018-09-16 11:52:06 +08:00
 n3541

web 服务器提供几个接口给客户进行调用,然后,我这边需要统计每个接口的调用次数,并记录每次处理后的结果,哪个客户调用的。

目前有两个做法:

  1. 直接在接口处理完业务逻辑之后,直接生成一条数据,插入到对应表中。这样每调用一次都需要插入一条数据。调用次数很频繁的情况下,会不会影响性能?

  2. 对于接口调用次数频繁的情况下,目前采用把统计数据,push 到任务队列里,然后另外启动 worker 定时去存放这些统计数据。(目前采用 celery 或者 rq )但是这样又有一个问题,每次运行 worker 的时候,只能处理一条数据,于是,我在 worker 中想把每条统计数据再次存放到 redis 队列中,然后每次都去查询 reids 相关队列中的长度,等到长度达到一定长度,再做批量插入。

  3. 在类似 celery,rq 任务队列中,传递图片数据是怎么处理的?直接传递图片 base64 之后的数据?还是传递地址,然后 worker 去下载再处理?

能说说这两种方法的优缺点吗?还有其他更好的方法吗?

PS:本身提供的服务中业务逻辑不需要有数据库相关的操作包括(增删改查)

感谢!!

1364 次点击
所在节点    问与答
5 条回复
kslr
2018-09-16 14:19:26 +08:00
首先看你的规模,大部分都可以直接怼
第二可以批量获取,第三还是看规模以及文件系统设计和文件类型
初步考虑存储文件而不是编码,这样灵活度更大一点
kslr
2018-09-16 14:21:37 +08:00
Celery Rabbitnq 完全是两个级别的工具,如果你一天只有几十万硬怼毫无问题
kslr
2018-09-16 14:22:23 +08:00
不过也看请求分布时间段是否集中,总之是完全看业务的
DCjanus
2018-09-16 14:26:32 +08:00
直接插表理论上影响不是很大,纯日志类的表没有太多冲突、计算、iO,直接插就好了,除非你量大的超出常规。
DCjanus
2018-09-16 14:35:00 +08:00
数据库负担大的扛不住再考虑消息队列削峰填谷,一条条写都扛不住再考虑写合并,要是连写合并都扛不住,你就该考虑分布式日志系统了。
但我觉得直接写数据库就能满足你需求了,先做个最简单的然后三倍日常峰值负载测试一下,满足需求就好了,折腾太多徒增烦恼。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/489797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX