架构师训练营第五周总结
本周收获实在是太大了,我工作中常用到缓存,但是从来没有想过怎么实现一个一致性哈希算法,老师给的作业真心赞,Intel给的面试题这么难,30分钟实现一致性哈希算法对我来说真的是做不到,我之前觉得之前留的作业写一个组合模式这作业也太水了吧,真的没什么提升,而且工作中不会用到单一的设计模式,都是几种设计模式组合使用,只写一个设计模式也不会提升我的设计能力,但是本周的作业真的是一个很好的联系。
我最开始一点头绪没有,网上搜了一些资料先确定了具体的需求,其实就是设计一个缓存,不过缓存内部实现包装了一致性哈希算法,我觉得这个缓存应该是个客户端的用法,因此应该把节点选择,哈希环的实现还有分布式缓存的统计信息(节点数,虚拟节点数,标准差)都通过代理模式屏蔽掉细节。
考虑到哈希环可以用多种方式实现(没有虚拟节点/有虚拟节点),我又使用了一个策略模式定义了接口,实现由调用方注入。最后一致性哈希的范围比int大,所以用Object自带的hashcode()会导致缓存分布很不均衡,我又查了资料使用了memcached clients使用的哈希函数,这块我也考虑根据依赖倒置原则定义成接口,使用适配器模式封装外部不同哈希函数的实现,根据场景灵活使用设计模式带来的好处真的很多,会让人觉得代码很清晰,而且修改扩展起来符合开闭原则非常灵活。但是目前我设计起来还不是很熟练,开发过程中推倒重写了很多次,使用的设计模式也不一定非常适合,但是我觉得至少这个方向是完全正确的,不断刻意练习下一定会成长成一个合格的架构师。
评论