坚信科学,分享技术

Category Archives: 架构研究

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

senseidb使用手记

下载 https://github.com/downloads/linkedin/sensei/sensei-1.0.0-release.tar.gz 这个版本是2012年1月份发布的,如果您看到此文时时间太久,请到他们的官方网站去寻找:http://senseidb.com 下载kafka kafka:由linkedin开源的高吞吐量的消息系统。 http://people.apache.org/~nehanarkhede/kafka-0.7.0-incubating/kafka-0.7.0-incubating-src.tar.gz 下载中文分词包IKAnalyzer http://code.google.com/p/ik-analyzer/downloads/list 编译sensei tar zxvf sensei-1.0.0-release.tar.gz cd sensei-trunk ./bin/build.sh 或者 mvn package 要是没有maven客户端,需要自行安装(ubuntu下直接apt-get install maven) 编译kafka tar zxvf kafka-0.7.0-incubating-src.tar.gz cd kafka-0.7.0-incubating-src/ ./sbt update pacakge 编译IKA 新建一个jar包,里面只有一个类,内容如下: public class IKAnalyzerFactory implements SenseiPluginFac

Continue reading

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

分布式实时搜索方案介绍-senseidb

名词解释 zoie:由linkedin开源的建立在lucene之上提供实时索引的系统。它利用两 个内存索引一个硬盘索引来实现实时搜索。 bobo-browse:由linkedin开源的基于lucene的分类浏览搜索系统。 zookeeper:一个分布式的,开放源码的分布式应用程序协调服务,常用来做配置服务。 senseidb:开源,分布式,实时,半结构化的数据库(官方网站上如是说)。实际上是一个将zoie、bobo-browse、zookeeper整合起来,提供各种方便的使用办法的一个项目。项目目标是达到简单易用的分布式实时搜索系统。 kafka:由linkedin开源的高吞吐量的消息系统。 norbert:norbert是一个提供分布式集群服务的开发框架,具备集群管理功能,对开发简单的通信架构,易扩展能承受高吞吐量的框架。scala实现,java无缝使用。其原理是:netty+zookeeper+pb。 IKAnalyzer:中文分词较好用的一个。 lucene:这个不用说了。 使用senseidb 1.解决中文分词问题 senseidb支持在配置上进行自定义analyzer。 要做的事情就是,建立一个jar包,里面只要一个类即可,依赖IKA的包。代码如下: public class IKAnalyzerFactory implements SenseiPluginFactory<IKAnalyzer> {       @Override&nb

Continue reading

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

linkedin高吞吐量分布式消息系统kafka使用手记

kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。 支持通过kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 设计侧重高吞吐量,用于好友动态,相关性统计,排行统计,访问频率控制,批处理等系统。大部分的消息中间件能够处理实时性要求高的消息/数据,但是对于队列中大量未处理的消息/数据在持久性方面比较弱。 kakfa的consumer使用拉的方式工作。 安装kafka 下载:http://people.apache.org/~nehanarkhede/kafka-0.7.0-incubating/kafka-0.7.0-incubating-src.tar.gz > tar xzf kafka-.tgz > cd kafka- > ./sbt update > ./sbt package 启动zkserver: bin/zookeeper-server-start.sh config/zookeeper.properties 启动server: bin/kafka-server-start.sh config/server.properties 就是这么简单。 使用kafka import java.util.Arrays;   import java.util.List;   import&nbsp

Continue reading

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

人肉解析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

服务接入层小结

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