感叹自己拿来这么大的激情呀,前段时间对分布式的raft感兴趣,这两天又着迷于golang。 听起来是不是有装逼的成分?  勿喷 …


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/?p=2990

今天一直在封闭式开发,针对电商接入SuperSpide适配兼容性进行调整。 中间跟同事杨博探讨了一个问题,原由是因为我们现在的服务对于redis特别的依赖,所以从单机的redis迁入到redis cluster集群中。

这redis集群属于基础组件,很多项目都在使用者集群,如果不进行合理的约束很好可能造成key的重复覆盖。 

那么如何不让这些key重复?

我们可以这样操作,在每个key前面加入前缀。 伪代码: redis_client.set(key + prefix_str, value)

但是这有一个问题,你要把你用的那些redis命令都封装一下? 这是个方法,但其实有更漂亮的实现方式,就是利用python的魔法函数、自省模式解决这类问题。 


只要理解了python的那几个魔法函数( __getattr__ 、__call__),就可以明白上面的python代码了。


1.    当访问不存在的函数时会访问__getattr__ ,他就好像是一个异常处理函数. 
2.    每次通过实例访问属性时,都会经过__getattribute__函数。而当属性不存在时,仍然会触发__getattribute__函数.

我们可以基于这方式实现一致性哈希负载均衡。现在市面上比较出名的redis一致性hash代理是redis twemproxy,但对于redis client来说多了一层的proxy,相当于多了两次网络io消耗。

说实话我不是很喜欢这样的运作方式,更倾向于把一致性哈希放到客户端搞,像redis cluster client那样自己做路由选择,另外还会缓存cache key与主机的关系。


暂时没有时间,等过段时间把代码整理下放到github上。http://github.com/rfyiamcool



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

构建高效的python requests长连接池

前文:      最近在搞全网的CDN刷新系统,在性能调优时遇到了requests长连接的一个问题,以前关注过长连接太多造成浪费的问题,但因为系...

阅读全文

不要粗暴的销毁python线程

前言:     不要试图用强制方法杀掉一个python线程,这从服务设计上就存在不合理性。 多线程本用来任务的协作并发,如果你使用强制手段干掉线...

阅读全文

关于海量数据处理的一些话题

这两天跟朋友聊了些关于海量数据的处理问题…    咱们暂且不提那些hadoop、spark的集群解决方案,就单单说海量数据的处理方式,一般面试题...

阅读全文

发表评论