慢在哪里:写Redis 写HBase 线程切换等
优化思路:无法提高Redis和HBase的写入速度,那么就减少写入量吧;减少写入量的办法:1,减少冗余写入,2,延长缓存时间。减少线程切换,尽量批量提交。
1,减少冗余数据写入:
目前的逻辑:缓存一分钟的数据然后定时刷入Redis或者HBase。问题是:各台机器会缓存相同的商品,导致同一个商品在一分钟内被写入了多次。
机器越多,冗余越大,不能横向扩展。所以需要减少接收数据的机器数量,同时将数据按照指定维度路由到相同的机器处理。
2,延长缓存时间:
如果解决了1中的问题,那么每台机器在一定时间内的写入量变成了可控。这时为了保护存储,可以延长缓存时间来减少写入量。
3,减少线程切换:
数据采集器和数据处理器切换为类似Disruptor的无所队列,批量提交数据给一个线程。(这个可选,短板应该在1和2)
方案:图略
在当前的架构下,增加数据路由器模块,按照指定的维度类似一致性hash的办法将数据路由到指定数据处理器。
具体想了一个简单的方案,回头和大家一起讨论一下,看看有没有更好办法: