我要开始吐槽了,这两天让公司的Hbase搞的高潮四起,有一个namenode的节点,总是出问题,他的一些个问题,引起其他节点的性能的下降,反正很坑。  以前貌似没这个问题,还好我们组有个百度做底层的大拿,兵强。 这段时间估计会调整架构,调优啥的。

需要说明的是,爬虫太可耻了,虽然哥也是专业爬虫选手,原文链接是 http://xiaorui.cc

 

那么还有一个很牛逼的样子,我估计很多的朋友也遇到这样的问题,那就是Thrift的问题,这东西真心不靠谱呀,有时候还需要时不时的重启下,他作为一个RPC server的服务端,本身性能是强大的,只是他有段时间没更新了,有时候经常会遇到一些个堵塞的问题。甚至是挂掉等等。   我们这边有个extractor的逻辑,是抽取网页的信息,进行入库。   逻辑是很简单的,就是put信息。 但是因为和别的组公用几个thrift,搞得我们在hbase的插入堵塞,引起后面的逻辑,整个都堵塞了。 


      那么现在的解决的办法是,开多个Thrift接口,然后在我们自己的应用上做个轮训,但是问题来了,这段时间,因为要做50台mongodb的下线,数据要从hbase重新构造原始数据,这就需要大量的scan和读写了,然后又是年底,有大量的hbase的回溯任务,又尼玛有个namenode节点,出了两次事故,导致心理上总觉得慢。  

    

       那么问题是,这么多的任务量,会造成堵塞 !  有人说,是不是你们hbase性能不行,经过我们的反复排除,hbase是没有问题的,压力是在thrift身上。  那么对于上层的应用来说,我如何的得到一个可用性的列表。 没有LVS和haproxy…..    自己做个proxy,又麻烦。   就直接在程序里面做了。  

       

       我这里用的是zookeeper,对于zookeeper,我还是有些好感的,记得以前在人人的时候,做自动化装机平台,有些逻辑是需要做分布式锁,来引导流程的一致性。虽然,后来我自己用memcached实现了个简单的,但是最少针对zookeeper入了个很小的门。那这次又记得起他是因为公司最近不少人采用zk做分布式的协调方案。 那么,我怎么用他? 很简单,连接zk后,我作为客户端,可以把自己节点的thrift信息,也就是 提供是否堵塞的信息,注册并更新到zookeeper里。 那么我应用的服务端启动的时候,也会注册到zk里面,并关联了watch监听,只要有反应,根据判断,我会从thrift队列里面干掉那些挂掉的节点以及被堵塞掉的thrift服务 。 


需要说明的一点是,python针对zookeeper的操作模块,还是选用kazoo吧,因为他是纯python构造的,文档也相对的丰富,你如果想改,也相对容易。 

我这里用了一个zookeeper一个监听回调的东西,那就是watchers 。就拿我上面的例子来说,在30台hbase里面,开启了15个Thrift Server ,我不能很不时尚的,总是get_children的node信息。 我只是需要做watchers就行了。

Kazoo 官方还配备了kazoo的异步模块,可以做一些网络io的异步。 

其实这次写了不少代码,但是核心的就那些东西,写的更多的是关于业务逻辑的。  大家多看看zookeeper的原理性质的东西,zookeeper在一些分布式架构中使用还是很广泛的 。 



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

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

python zookeeper解决redis做分布式锁带来的坑

我自己写了一个redis分布式锁的模块,已经推到pypi里面了。 但是带来了一个问题是,如果客户端自己因为内存泄露被系统内核给oom干掉了。 在分布...

阅读全文

1则回应给“python调用zookeeper管理thrift集群可用性队列”

  1. 奋战说道:

    多写点zookeeper的文档

发表评论