坚信科学,分享技术

Category Archives: 架构研究

大负载网站架构相关的研究记录。

服务接入层小结

接入层 是指普通用户与核心业务逻辑中间的过程。现在常见的服务接入层,像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

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

velocity2011讲师经验总结及velocity2011的ppt下载

总结: 1)会场有点小,比较热 2)讲的东西为了照顾更多人,比较片面,如果有想听深入的同学,可以参加我们哥学社的吃喝会。 3)会上遇到了douban强宁大侠、安全宝的冯大侠、还有一位来自清华的主任、以及各位一线的朋友恕不能一一列出,深感荣幸。 互联网创业服务器运维工具集 View more presentations from zhen chen.

Continue reading

Posted in WEB相关, 架构研究, 资料文档 | Tagged | 3 Comments

移动互联网api设计实践

过去一年时间里,都在做中国移动互联网下的API设计工作,所面对的情况可能是最具中国特色的了。如果你在尝试构架一整套的新的API供你的客户端使用,可以尝试以下的几点: 1)api所使用协议,要能够不怕被加js、加广告和各种代码。 全国各地的运营商,有习惯挂广告、加代码等等,要做的事情就是在客户端做各种解析判断。实践证明,这帮孙子的设备是检测http协议的head头里的content-type,如果是html/text则会加,如果是text/json就不加了,所以,你懂的。 2)api可视化 你的app上架了,后端也布好了。然后呢,就天天看下载量。但后端好坏一问三不知。所以在设计api时,要提前回答以下问题: 1.此时此刻,有多少个app正在调用这些api,每分钟多少个? 2.他们(api)有快? 3.能否很简单地通过浏览器快速debug? 4.能否快速禁止单个用户? 3)链路 在幅员辽阔的我国,总是一个地方到一个地方的IDC直接就ping不通(移动互联网下更甚)。于是需要花钱自己打通这些地方,没有专线,只有代理再代理。 4)api quota与perfcounter 对api进行quota限制,针对每个api每个人,都有限额。 这个限制的传统做法: 1.每天的上限调用次数。每天半夜清空,一天一个量累计。 2.每分钟的频度。这个防止有恶性的突发情况。 上述二者,缺一不可。 perfcounter用于对api的监控设计指标,如果一个api有异常,应当十分灵敏地得出结论,而不是误报连连。

Continue reading

Posted in linux, 架构研究 | Tagged | 3 Comments

riak源码阅读手记 操作列表及supervisorTree一览

基于0.14.2的记录,1.0的变化会在后续记录。 riak源码阅读手记一 初出茅庐 项目入口 http://www.54chen.com/_linux_/riak-source.html riak源码阅读手记二 左右开弓 启动 http://www.54chen.com/_linux_/riak-cource-code.html riak源码阅读手记 运行安装 http://www.54chen.com/_linux_/riak-source-install-run.html 一些常用的指令: http://wiki.basho.com/Command-Line-Tools.html#riak-admin riak源码阅读手记 压力测试 http://www.54chen.com/_linux_/riak-benchmark.html riak源码阅读手记 操作列表及supervisorTree一览 http://www.54chen.com/_linux_/riak-source-notes-operation-supvisor-detail.html [山寨收集操作列表] 看系统状况,有各种内存cpu硬盘的情况 bin/riak-admin status 节点更换新的ip地址: 如果是所有的节点都换,那在停下来集群,在每个节点都依次运行: ./riak-admin reip riak@192.168.103.9 riak@10.235.2.226 ./riak-admin reip riak@192.168.97.48 riak@10.235.2.183 ./riak

Continue reading

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

thrift最佳实践:版本与兼容

十分苦逼的api提供过程。一次提供,终身负责制。 "API design is like sex: Make one mistake and support it for the rest of your life." - @joshbloch Structs: 在许多系统里面,被称做message. 协议随着岁月而演变,如果一个已经存在的消息类型不再满足需求,但是你仍然想使用原来使用thrift文件生成的代码,比如你想在现在的消息类型上增加一个额外的字段。 不用担心人,不搞坏原来的任何代码而更新消息类型,是非常简单的,只需要时刻记录以下的规则: 1.不要修改现存的任何已经存在字段的数字标签 2.任何新增的字段应该是optional的,这就意味着,所有新定义产生的代码都能解析新老的格式,因为一定会有任何一个标上required的元素。你应该设置可能的默认值给这个元素,让新代码与老数据也能正常协作。与此类似,新数据也能被老代码解析,老的实现解析时会忽略新的字段。尽管如此,未知的字段不能被丢弃,并且如果消息被延迟序列化,未知的字段也会被一起序列化,因此当消息到达新代码的时候,新字段依旧可用。 3.当你更新的消息类型里不再包括相关的标签数字时,非required字段可以删除。(把这个废字段改名,比如说加个前缀OBSOLETE_ ,可以防止未来维护.thrift文件人误用原来的数字,这做法可能更好。) 4.修改默认值基本上是OK的,但是你记得这个默认值永远不会“串线”。比如,如果程序收到一个在某个字段没有值的消息,程序会看那个

Continue reading

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

用supervisord管理杂乱的服务

Supervisord是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效。 环境 centos python2.4 安装 wget http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0a10.tar.gz#md5=99c6fbd45bade87301296b7a597fb68e tar zxvf supervisor-3.0a10.tar.gz cd supervisor-3.0a10 python setup.py install 如果上述遇到问题,请按如下操作。 依赖setuptools安装 wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg#md5=bd639f9b0eac4c42497034dec2ec0c2b sh setuptools-0.6c11-py2.4.egg 产生基础配置文件 echo_supervisord_conf > /etc/supervisord.conf 配置 [inet_http_server]前面的分号去掉; 定义port=192.168.1.1:8888 启动 supervisord -c /etc/supervisord.conf 查看 浏览器打开 http://192.168.1.1:8888 深入配置 [program:service] command=sh /opt/soft/service/run.sh

Continue reading

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

riak源码阅读手记 压力测试

基础环境: 三个台式机 一次操作: 操作一段购物车数据,先写包括3个货物的数据,然后取出来,再加上三个后存入。 压力结果: 1) 10个线程,无连接池化,每次新连接。PBClient。每次req包括上述一次操作里的一写一读一写三次。 Rate: 122 req/s Rate: 103 req/s Rate: 119 req/s Rate: 110 req/s Rate: 117 req/s Rate: 116 req/s Rate: 121 req/s Rate: 110 req/s Rate: 116 req/s Rate: 111 req/s Rate: 123 req/s …

Continue reading

Posted in java, linux, 架构研究 | Tagged , | 2 Comments
Page 1 of 712345...Last »