坚信科学,分享技术

Author Archives: 54chen

人肉解析riak_admin join

riak_admin只是一个bash脚本,当riak_admin join被执行时,都是在执行riak_kv_console join。 大概过程分析 riak_kv_console:join => %%入口 riak:Join(Node) => %% 真正执行 riak_core:join(Node) => %%去到riak_core riak_core_gossip:legacy_gossip() => %%通知检查是否是 legacy gossip, riak_core:standard_join(Node,Ring,false) => %%非rejoin 非legacy riak_core_gossip:send_ring(Node, node()) => %% 进入gossip模块发起ring请求 gen_server:cast({?MODULE, FromNode}, {send_ring_to, ToNode}) => %%广而告之 riak_core_gossip:handle_cast({send_ring_to, Node}, State) => %%收到 gen_server:cast({?MODULE, …

Continue reading

Posted in linux, 架构研究 | Tagged | Leave a comment

go语言安装手记

安装 机器环境 centos 5.5 64位机器 有两种编译器,官方的文档是基于Go编译器和工具(6g 8g),另一个是gccgo(后台是gcc)。 工具和编译的对照表: amd64 (a.k.a. x86-64); 6g,6l,6c,6a 386 (a.k.a. x86 or x86-32); 8g,8l,8c,8a arm (a.k.a. ARM); 5g,5l,5c,5a 这是一个坑:Mercurial(hg工具)需要安装,并且要1.7版本以上的。(实际上给个下载的tar包不是可以降低门槛嘛,应该是还在开发状态为了方便使用hg直接升级环境)。折腾这个的人应该不在少数。 hg clone -u release https://go.googlecode.com/hg/ go cd go/src ./all.bash 最后会停在一段时间: --- cd ../test 然后提示: 0 known bugs; …

Continue reading

Posted in linux, 资料文档 | Tagged | Leave a comment

Riak Core说明

什么是riak_core? riak_core是一个单独的OTP应用,提供了所有必须的服务,以完成一个现代化的、表现良好的分布式应用。riak_core开始于Riak的一部分。当代码在建立各种分布式应用普遍有用时,我们决定重构并且分离出来核心部分,使其便于使用。 分布式系统是复杂的,riak_core可以满足这些大量复杂的需求。在深入代码之前,我将分离这些需求为明显的分类,且给出每项的概况。 注:如果你是急性子,想跳过后面的直接读代码,你可以通过hg或者git检出riak_core的代码。 节点存活 & 节点关系 riak_core_node_watcher是负责反馈riak_core_cluster内部节点状态的进程。它使用net_kernel有效地监控了许多节点。riak_core_node_watcher也有能力将一个节点按程序预定踢出cluster。当一个主节点必须临时断电而又不想完全停服的情况,这十分有用。 riak_core_node_watcher还提供了在cluster内广播和定向服务的API。当节点提供了专门的服务,比如CUDA计算节点,这个服务被cluster中的其他的节点所使用,这些API很有用。 riak_core_node_watch_events配合riak_core_node_watcher产生以活跃节点为基础的events,比如说加入或者离开cluster等等。当事人可以注册callback方法,当events被触发时会被调到。 分区 & 分布式工作 riak_core在每个节点上使用了master/worker配置,以

Continue reading

Posted in linux, 资料文档 | Tagged , | Leave a comment

maven库nexus拖不到jar包小记

使用maven,nexus是个不错的选择。 最常见的问题: 1.SNAPSHOT拿不到最新的包。 2.明明在maven central库里搜索到的包,却提示Missing。 3.plugin提示Missing。 1.SNAPSHOT拿不到最新的包。 这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下,文件数目过多,导致在取最新的包时超时了。 解决办法: 浏览器打开nexus, login->scheduled tasks->add,添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重,平时开发可能不是特别正规的时候可能会snapshot和release都需要。 2.明明在maven central库里搜索到的包,却提示Missing。 网上大多数说法都是index失败了,个人经验实际不然(当然不排除你的问题就是index失败)。 当nexus.log里没有任何异常时,请注意以下内容: 在central搜索时,如果只有pom没有jar,那说明这个依赖的项目可能有多个依赖,一定要加上pom,默认是jar。 3.plugin提示Missing。 通常原因是:nexus设置的搜索顺序有问题。 login->Public Repositories -> configuration 左边的是正在使用的定义好的仓库组,右边是可以使用的,正确的顺序应该是先在Release找,然后Snapshots,然后3rd party,最后才去外网下(这时nexus才拖下来新的jar/pom)。

Continue reading

Posted in java, linux | Tagged , | Leave a comment

服务接入层小结

接入层 是指普通用户与核心业务逻辑中间的过程。现在常见的服务接入层,像nginx、lvs、php这些都可以算是。 观点 一种观点认为:接入的量不应该影响系统的正常运行,也就是不能接入不能处理的用户请求,类似上图中前图。 另一种观点认为:接入层应该尽量接入所有用户,类似上图中后图。 做法 nginx: nginx如果用做proxy,后端挂其他服务的话,是一个纯粹的NIO server。对用户来说,nginx是长连接(http 1.1),对后端服务来说,nginx是短连接(http 1.0)。 default: proxy_connect_timeout 60s; 向后端服务创建连接的超时时间 default: proxy_read_timeout 60s; 后端返回请求响应超时时间 default: proxy_send_timeout 60s; 大请求发到后端超时时间 nginx通过上面的三个设置,当后端有响应不过来的时候,进行超时处理(记录日志),当发现超时很多了,就需要提升后端的处理能力了。 那么,nginx自身的处理能力是否有上限呢?当然有! worker_processes 1; worker_connections 1024; max_clients = worker_processes * worker_connections 当超过max_clients的用户扑上来的时候,如果幸运后端没有能力问题,那就会看到nginx在日志中要求你增加worker的提示。 php-fpm: pm = dynamic/static; dynamic时有最大进程最小进程之说

Continue reading

Posted in linux, 架构研究 | Tagged | 1 Comment

nginx防hashdos模块使用帮助

经过上周一周朋友们帮忙测试和bug fix,nginx_http_hashdos_module已经达到可以线上使用的水平,下面是使用记录。 下载 #wget --no-check-certificate https://github.com/54chen/nginx-http-hashdos-module/zipball/master #mv master nginx_hashdos.zip #unzip nginx_hashdos.zip 编译安装 #tar zxvf nginx-1.0.xx.tar.gz #cd nginx-1.0.xx/ #./configure --prefix=/opt/soft/nginx --with-pcre --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=../54chen-nginx-http-hashdos-module-f84d909 #make && make install 配置注意事项 在http段,增加如下: hashdos on; body_max_count 1000; 在各自的location段,要按照业务情况来加: client_body_buffer_size 2m; client_max_body_size 2m; …

Continue reading

Posted in linux, 架构研究 | Tagged , | Leave a comment

nginx防hashdos模块释出

2012.1.7 更新 编译的时候推荐使用nginx-1.0以上版本,不要加--with-debug参数编译,(感谢agentzh指出)。 hashdos这个事,严格意义上不是各种语言的错了(不过perl的确处理得很好),但是用nginx来擦屁股要干净些。 借鉴tomcat的作法,实现了下面这个nginx-http-hashdos-module,通过设置hashdos(默认on)的开关和body_max_count(默认值1000),对nginx后面的服务进行安全防护,相比对php或者java进行patch,这或许是最好的办法了。 nginx-http-hashdos-module项目地址 https://github.com/54chen/nginx-http-hashdos-module 如何使用 1.下载zip后保存到一个目录,如~/nginx-http-hashdos-module。 2.cd nginx-1.0.9/ 3.重新编译和安装nginx ./configure --prefix=/opt/soft/nginx --with-pcre --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=/path_to/nginx-http-hashdos-module/ && make && make install 4.配置打开: hashdos on; body_max_count

Continue reading

Posted in WEB相关, 架构研究 | Tagged , | 11 Comments

水煮鱼杯2011年度不得不总结的十件事

第一件:拖裤带爆,横尸遍野 辛卯年年间,宦官弄权,规食名以制。侠客XXX出国前夕,顺手翻出多年前收藏。 CSDN、天涯、京东 三家官方确定被拖,其他家默。 出来混,手里没几个库,已经没办法交流了。 多年前天涯一帖子,疑是五毛所作所顶,憾无证据。今有密码反查,一网打尽。 此次事件,中招数量以千万计。 在遥远的西邦,早些时候也有中招,http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/credits.c?r1=305420&r2=306409&pathrev=306409,见其中Wolegequ Gelivable。 第二件:亚马逊宕机,云计算阴影 4月份,亚马逊ec2服务宕机,连续40小时,号称永不宕机的云,宕机了。 威胁在于,世界第一大的云都挂了,别的还用说吗。 纽约时报:亚马逊事件或致云计算产业蒙上阴影。 官方回应:事故原因是大量的硬盘坏了。 第三件:小米手机,一枝独秀 首批纯会员预订,两天30万台。开放购买1小时10万台。 红海里开辟的蓝海,自然有各种势力出来攻击。大漠风烟间,一场天地变色的正邪之战,正在展开。 说多了就像广告了,明年总结的时候再来看这条。 第四件:乔爷辞世,全网默哀 牛B的演讲技能,商业奇才,还能用什么来形容? 奥巴马:乔布斯改变了我们看世界的方式。 他在车库里建立了这个星球上最成功的公司之一,充分体现了美国人的创造力。通过使电脑个人化,将互联网装进我们的口袋里,他不但让人们可以享受到信息革命的成果,而且使这种革命变得直观和有趣。 他的天赋和才华成为家喻户晓的故事,他为数以

Continue reading

Posted in 生活备份 | Tagged | 3 Comments

年终攻击hashDos-哈希表多碰撞实现拒绝服务-破解办法

起因: Wed, 28 Dec 2011 22:28:16 GMT apache tomcat公布了一个安全漏洞。 http://mail-archives.apache.org/mod_mbox/www-announce/201112.mbox/%3C4EFB9800.5010106@apache.org%3E 漏洞原理: 依靠相应语言的hashtable/hashmap实现过程(request多为此结构),当不同的key存入时如果hash值相等则以链表方式连接在前面。此漏洞利用碰撞相同的hash值得到一个长链表,重新get时,map的计算过程会将时间复杂度巨增,原来一个简单的过程将变成一个很费cpu的过程。 影响到的: 最快时间tomcat公布了解决办法。 php进行了升级。 ms也发了公告http://technet.microsoft.com/en-us/security/bulletin/ms11-100。 解决办法: tomcat 临时办法: 默认大小2097152,当maxPostSize=0时,不限制;maxPostSize=20971520时,为20M,改为一个小于10k的值,所有版本可用,会影响用户。 持久办法: 用新的版本,maxParameterCount默认值1000。 nginx 临时办法: 默认的最大请求body大小为8m,修改设置client_max_body_size=10k;此招为各种情况下万金油,会影响用户。 持久办法: 暂无,应该很快会有max_request_count的参数。 php 持久办法: php升级到5.3.9,5.2需要打

Continue reading

Posted in java, linux, php | Tagged | 9 Comments

riak 1.0.2安装手记

准备三台机器: r1 r2 r3 准备erlang环境: Erlang >= R14B03 yum install gcc glibc-devel make ncurses-devel openssl-devel $ wget http://erlang.org/download/otp_src_R14B03.tar.gz $ tar zxvf otp_src_R14B03.tar.gz $ cd otp_src_R14B03 $ ./configure && make && sudo make install git环境(看上去是非必须的): yum -y install git 下载地址: http://downloads.basho.com.s3-website-us-east-1.amazonaws.com/riak/CURRENT/riak-1.0.2.tar.gz …

Continue reading

Posted in linux, 架构研究 | Tagged | Leave a comment
Page 1 of 101234510...Last »