功能是查询出用户,然后给这些用户发推送,目前推送速率限制是 300/s, 应该单机就能满足需求,能有多机方案也好,不过还是需要清楚单机能不能做到这个速度。
目前的设计方案是单线程作为生产者查询数据库放到 blockqueue,然后多个消费者消费这个 blockqueue,并发送推送,流控用 guava 的 RateLimiter 。生产者单线程查询数据库,一秒查 300 个以上应该是可以的。
问题: 1,消费者单线程能做到 300/s 发送(用 netty 之类的类库可以做到吗?)? Spring 自带的 resttemplate 应该根本不可能满足这个要求吧?
2,如果是多线程,方案是怎么样?一个线程也需要多个消费者?线程的数量要怎么确定比较好(因为服务还有其他功能需要使用,如果线程太多会不会影响其他功能?)。
3,300/s,假设每个请求(包括返回) 100kb,那每秒流量就是 30mb,所以应该是单机就能承受的,是这样计算的吗?
感觉提问有点太多啰嗦和细节,大家能给个方向意见也行~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.