热点问题的解决思路

热点问题主要分两种:读热点和写热点。

读热点

读热点最常规的思路是本地cache方案和二级缓存方案。把热点key以某些规则(比如说hash)打散,单个节点维护一份本地的热点cache,比如说热点的key个数为一万个。优先访问本地cache,访问不到再访问二级缓存,比如说memcached,Redis之类的。

当然,这是从业务层面解决热点问题,而不是从分布式缓存框架的层面上解决。

从分布式缓存框架层面解决热点问题的思路是,发现热点,路由热点;

举个例子:在极端情况下,某几个热点key可以把单机的网络吃满。这种情况下,热点key会影响到其他非热点key的访问,再者,分式布缓存选用的内存型机器就显得浪费了。相应的解决方案是,把热点识别出来,放到多台普通机器上,比如说C1机器。客户端访问热点key时,能路由到相应的C1机器。

具体实现是,每个key内部维护一个计数器,统计自身被访问的次数,然后以一定的频率把访问次数上报到路由节点,路由节点根据一定的策略判断其中某些key是热点key,把相应的key拷贝到C1机器上,然后把路由规则下发到客户端。

写热点

写热点一般跟写入的规则有关,比如说,hbase根据rowKey的前缀分配到具体的节点,前缀相同的rowKey容易产生写热点。这种情况,一般会用rowKey求hash值,然后求余机器数,把余数拼到rowKey前面。这样的话,可以把热点打散到各节点。

还有一种情况是,由于某一些特别情况,不能把热点打散的,那常规的做法是合并写入线程,改单次写入变为批量写入,减少写入并发数。

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容