`
tailorcai
  • 浏览: 91625 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
THRIFT服务器缺省无法获取客户端连接的地址。经过研究,发现通过重载transport factory+Thread local,能够简单解决。不需要修改thrift生成的代码。 >>>>> arg.protocolFactory(protocolFactory); arg.outputTransportFactory(new TFramedTransport.Factory()); arg.inputTransportFactory(new TFramedTransport.Factory() { @Override public TT ...
这两天,开始测试tungsten-queue-applier跟tungsten-replicator2.0.6的兼容性问题。 发现这个版本的tungsten有不少变化: 1. 原来属于enterprise的那些东西全部开源了,相应的package都要调整 2. ReplicateFilter的doFilter和ignoreFilter放弃了MySQL格式的匹配模式(%.table),改成更易于理解的(*.table)。 3. 接口有一些变化,但是对于这个applier来说变化不大。 目前新的代码已经提交。 https://github.com/tailorcai/tungsten-queu ...
linux下的文档,好不容易才上传上去... http://www.slideshare.net/tailorcai/cdcganjicom-12709722
Zookeeper的使用很多文章都提到。但是都是对API的描述。很少提到应该如何处理连接短线,session过期等等。我画了一张图,来描述ZK的处理流程。
业务需要PHP和Python共享Memcache,因此自己实现了一个memcache的hash规则,用CRC32。但是突然发现Pyhton2.x的binascii.crc32的范围有负数。因此写了一个测试脚本来验证: <?PHP $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-+='; while(True) {     $len = rand(1,20);     $key = '';     for( $i=0;$i<$len;$i++)         $key .= sub ...
从发现Tungsten Replicator到线上部署,历时4个月。中间也遇到了很多困难,不过在同事的大力配合下,CDC项目(内部名称)已经替代老的事件通知系统,成为网站内部数据更新的重要组成部分。每天处理的数据更新条目数超过200W。 传统的使用Tungsten,是把它作为DB Replication的一部分。但是在互联网架构中,异构数据系统之间如何保持数据的一致性,是架构师面临的普遍挑战。这样的系统在网站里面很多,像检索系统,缓存系统等等。 据说一些网站也在开发类似的技术。因为,以DB为中心的设计思路,决定了业务逻辑严格执行数据“入库为安”的思路。能够写入DB就是成功,写不进去就是失败。 ...
python + PIL #coding=utf-8 import PIL from PIL import Image import time start = time.time() im = Image.open("sample.jpg") im1 = im.resize((100,100), Image.ANTIALIAS) im1.save( '/tmp/sample_py.jpg') print time.time() - start 引用 python2.7 pil.py 0.0170481204987 python2.7 pil ...
上次提高用mmagent作为前端,kestrel作为队列服务。经过实际验证后发现,mmagent能够缓解kestrel的连接拥塞现象,但是在某些情况下,依然会出现kestrel几乎没有响应的情况。 目前的方案是: app -> memcacheq -(script)-> kestrel 虽然很恶心,但是至少能够work了。
#! import time, signal quit = False def shutdown_all(signum, frame): global quit quit = True if __name__=="__main__": signal.signal(signal.SIGTERM, shutdown_all) while not quit: time.sleep(1) print 'graceful quit' 验证通过
新的公司准备上消息队列,用于统一用户发布信息后续处理流程。考虑到网站的流量已经比较大了,选择一个消息队列产品成为当务之急。 运行环境:LAMP,PHP服务器6台。 要求:速度快;简单易用;运行稳定(数据一般不丢失);支持子队列 稳定性,应该包含下面一些情况: 1. 如果队列服务出错,能够有failover的队列保证业务正常运行 2. 已经在队列中的数据,能够在队列恢复时,得到处理 3. 如果处理脚本出现错误,当前正在处理的数据不会丢失。 之前用过redis/resque,感觉很不错。可惜不满足数据丢失,和取数据的事务。 本来就不想用很复杂的商用产品,又看了一些文章后 http://wik ...
# import sys,re if __name__=="__main__": rc = sys.argv[1] ver = sys.argv[2] ver = ver.replace('.', ',') ver1 = ver.replace(',' , ', ') rc = rc.replace("\\\\","\\") f = open(rc,'r') lines = f.readlines() olines = [] for l in lines: if l ...
luntbuild使用自定义标签的方法 引入另外一个文件 <import file="./base.xml"/> 使用自定义标签 <VC9 sln="${proj.path}/proj.sln" project="proj_name"></VC9> base文件内容 <?xml version="1.0"?> <project basedir="."> <property name="publishDi ...
STL中的不同容器具有不同的插入操作接口,比如 vector,list,queue等使用push_back,pop_front等 map, set等使用insert 如何编写通用的插入操作呢。这里可以使用insert iterator template<typename OutIt> void build( OutIt it ) { for( int i=0;i<100;i++) { *it ++ = i; } } std::vector<int> vec; build( std::front_inserter( vec )) ...
最近研究了一下MammothServer,发现里面有一个叫Dispatcher的实现,很有意思。正好自己最近在学习boost::mpl等东东,因此花了几天学习,并把自己的学习心得总结了一下。相信对大多数C++程序员会有帮助。 前言 在编写通讯框架时,经常要处理众多的协议。而处理完协议后,再调用相应的处理函数时, 在C++中,我们一般要使用统一接口。比如Windows消息中的MSG结构等等。 这种统一的处理结构最大的缺点是缺乏有效地类型检测,容易出错。因为,编译器无法对每一个特定消息进行数据合法性检查。 不过利用模板技术,完全可以实现RPC参数的解析以及与C++函数的自动匹配,支持不定长参数 ...
记录一下mpl学习结果: 引用1-1.     Turn vector_c<int,1,2,3> into a type sequence with elements (2,3,4) using transform. 对vector做一个加1就可以了 typedef mpl::vector_c<int,1,2,3> AAA; typedef mpl::vector_c<int,2,3,4> CCC; typedef mpl::transform<AAA,mpl::plus<_1, mpl::int_<1> > &g ...
Global site tag (gtag.js) - Google Analytics