Category Archives: 架构研究
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 …
riak源码阅读手记 与Cassandra相比
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 实现上: 1)虽然二者都是dynamo的实现,具体方法还是不一样的,riak更忠于dynamo的原文档,实现了所有文档提到的关键点。同时还增加了map reduce和links等功能。 2)Cassandra略去了一些文档里的关键点:向量时钟、按照key范围的大分区等。增加了一些方法如:范围查询、固定分区。 扩展: 1) riak提供了bin/riak join这样的命令来加入新的节点,基本完全按照dynamo文档所说的一样来实现了,从多个节点去获取原来的负载和数据回来,每个节点的压力都可以得到平衡。 2)相比之下,Cassandra集群的节点需要计算数据的一个范围。当加入节点时,Cassandra的策略是分出来相应分区上一半的范围去新节点。这点在一个Cassandra集群需要加节点时会很痛苦,可能会存在两个节点之间大规模的数据转移。 查询和分布: 1)riak有map reduce。 2)Cassandra可以接ha
riak源码阅读手记 运行安装
riak源码阅读手记一 初出茅庐 项目入口 http://www.54chen.com/_linux_/riak-source.html riak源码阅读手记二 左右开弓 启动 http://www.54chen.com/_linux_/riak-cource-code.html 代码运行入口 riak-kv/ebin/riak_kv.app文件定义了otp标准项目的结构,一个不错的实例:http://www.iteye.com/topic/342819 {mod, {riak_kv_app, []}}一行定义了入口。打开riak_kv_app文件: -export([start/2,stop/1]). 定义了两大个方法,start和stop。 先看start: 启动riak_kv及相关的server。 检查系统时间。 加入系统变量。 确保设置NWR的值和一些vclock的初始值。 看storage_backend是否启动。 在cluster_info中注册。 启动supervisor。 全部启动。 stop:application:stop。 跑一把试试: A机:192.168.103.10 B机:192.168.97.48 C机:192.168.100.52 三个节点,已经装好erlang R13B04。 先在A机操作: wget http://downloads.basho.com/riak/riak-0.14/riak-0.14.2.tar.gz tar zxvf riak-0.14.2.tar.gz cd riak-0.14.2 make …
淘宝分布式数据库系统OceanBase观后闲话小记
http://code.taobao.org/trac/OceanBase/wiki/intro 讲得还比较细。 数据模型: oceanBase采用类似cassandra的tablet/sstable数据模型实现,简单说就是bigtable的数据模型。 系统目标: 其目标比较明确,是一个强CA类系统,P(分区能力)。目标是强一致性、高可用性,分区能力稍弱。从文档上看,他们并不担心的快速的数据增长量。 去中心化: 见图: RootServer/UpdateServer是一个中心节点,这个有死翘翘的可能性(好吧,他们搞了一主一备)。 支持的操作: 基础的merge/join都可以,一般使用上是够用了。DDL DML的定义基本上是还需要发展的。另外如果开源出来了,广泛项目使用意义上,还需要支持UDF user defined function,实际上把mysql文档实现一遍就ok了。 继续观望,欢迎抛砖。向开源的项目致敬。
riak源码阅读手记二 左右开弓 启动
目标系统(target system) OTP系统定义里有这么一个东西: 可以被一般的erl脚本启动的系统叫基础目标系统; 除此之外还可以做运行时代码替换的系统叫简单目标系统; 如果还支持日志输出到文件、自动定时启动的话就叫做内嵌目标系统。 启动目标系统的方式 通过erlang/OTP标准的reltool工具生成的目标系统,可以用多种方式灵活启动。 第一种: os> /usr/local/erl-target/bin/erl 这只启动了一个基础目标系统。基本没什么具体功能。 第二种: os> /usr/local/erl-target/bin/erl -boot /usr/local/erl-target/releases/FIRST/start 用-boot参数,这可以启动一个简单目标系统。releases/RELEASES文件可用来做热替换。 第三种: bin/start 这个脚本会去调用 bin/run_erl ,最终调用 bin/start_erl启动。run_erl是一个提供运行时日志输出到文件的封装。还提供了简单的机制attach到一个erlang shell。 自定义behaviour -spec behaviour_info(atom()) -> 'undefined' | [{atom(), arity()}]. behaviour_info(callbacks) -> [{start,2}, % (Partition, Config) {stop,1}, …
riak源码阅读手记一 初出茅庐 项目入口
简介 basho(相扑)是一家美国的技术公司,专营数据存储和管理软件,11年6月30日获得了750万美元的融资。basho将riak开源,通过收取riak的维护和管理界面软件的使用费用来赚钱,和resin的公司类似。 今天主要研究的是,basho旗下的riak:一个类dynamo系统的kv存储。riak使用了erlang进行开发,将代码精简到极致。 rebar riak的代码使用了一个叫做rebar(钢筋)的erlang构建工具,使用起来真的很方便,其使用方法建议参考这篇文章:http://www.linezing.com/blog/?p=347。每个项目下,都有一个叫做rebar.config的文件,里面用erlang语法记录了这个项目需要的目录、环境、版本、以及依赖的包在github上的位置。真的很方便。riak项目中,rebar和reltool被大量使用。reltool使用方法参见 http://erlangdisplay.iteye.com/blog/508944 riak的总控工程:https://github.com/basho/riak。 看rebar.config定义的依赖部分: {deps, [ {cluster_info, "1.1.*", {git, "git://github.com/basho/cluster_info", {branch, "master"}}}, %% 这个模块提供了一个松散易扩展的导出集群节点状态的办法。可以收集的信息包括:时间、所有的erlang进程的静态统计、网络连接情况、cpu和内存、大队列进程、内部内存调
记hadoop故障一例:BlockAlreadyExistsException
hive版本:0.7.0 hadoop版本:0.20.2 在线上跑了一个季度了,基本上没什么问题,今天突然出了问题。 在hive执行时留下的蛛丝马迹: Failed with exception org.apache.hadoop.hdfs.server.namenode.NotReplicatedYetException: Not replicated yet:/tmp/hive-root/hive_2011-08-15_00-31-02_332_247809173824307798/-ext-10000/access_bucket-2011-08-14_00004 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1257) at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) at sun.reflect.GeneratedMethodAccessor2037.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Met
巧用交换机,瞬间切流量
需求: 1号机服务移到2号机,然后要把1号机搬走。 原理: 交换机有ip对应mac地址的缓存,只需复制到ip和mac,可以在机房内的局域网里瞬间切换到另一个机器上。 操作: 1)在2号机准备好1号机的服务,并测试通过。记录1号机的mac和ip 2)以下操作要双开窗口,快速操作 3)在1号机执行:ifocnfig eth0 down 4)在2号机执行: ifconfig eth0:0 123.123.123.1 ifconfig eth0:0 hw ether 111111111111[1号机mac] ifconfig eth0:0 up 5)恭喜成功了! 6)搬走1号机,再也不要回来! 7)在2号机/etc/rc.local里添加: ifconfig eth0:0 123.123.123.1 ifconfig eth0:0 hw ether 111111111111[1号机mac] ifconfig eth0:0 up 终。
硬件为王,软件为帝--记突增的访问
五一归来两周,精力都放在了因为服务器压力突增而来的各种鸡飞狗跳的事情上,今天总结一下,算是对过去两周的总结,希望对各创业团队有所借鉴。 1.访问突增,连锁反应 最先开始出现问题的,是在小负载下没有出现的问题,在大压力时,只要DB一堵,表像就会是循环锁死。 解决之道: 服务要有清晰的架构,开发规范里一定要有明确的架构层次规范,最好还有代码的层次规范。 2.mysql设计不合理,压力指数增加 mysql中存在大量的更新操作,特别是大字段或者变长字段的频繁更新,导致磁盘io居高不下,慢查询越来越多。 硬解决之道: raid卡加电,开启raid写缓存:一般服务器的raid卡都没有开启,开启是有一定用处的,但有一个前提,不是待续的高写入,否则这个写缓存是没有意义的。电池充电时无法缓存,一般三个月充一次电。 转微博:FusionioChina 回复 @YauzZ:多一个故障点。多一份丢数据的可能。而且目前有Raid卡的内存做到1GB。丢不起呀。(5月11日 23:29) 从raid分到多个盘、盘柜,都是从硬件上用多硬盘分担的好方案。 软解决之道: 写方案建立mysql隔离层,在写入前预先处理,类似软件缓存方案,效果明显,修改复杂。 3.后续可做 灵活的中间层数据层切换逻辑,让负载可以随时转移、分隔,基本可以达到“人傻钱多,万事不愁”。
用hadoop hive协同scribe log用户行为分析方案
scribe 是facebook 开源的分布式日志系统,在其示例配置中,并发量可达到max_msg_per_second=2000000。54chen使用手记见:http://www.54chen.com/java-ee/log-server-scribe-helper.html hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为 MapReduce任务进行运行。54chen使用手记见:http://www.54chen.com/_linux_/hive-hadoop-how-to-install.html 下面来讲述二者合成的使用办法: 创建和scribe格式相符的hive table bin/hive > create table log(active string,uuid string,ip string,dt string) row format delimited fields terminated by ',' collection items terminated by "\n" stored as textfile; 加载数据 >LOAD DATA LOCAL INPATH '/opt/soft/hadoop-0.20.2/hive-0.7.0/data/log-2011-04-13*' OVERWRITE INTO …
SEARCH
Update
- 54chen Twitter memo 2012-02-12
- 人肉解析riak_admin join
- go语言安装手记
- 54chen Twitter memo 2012-02-05
- Riak Core说明
- maven库nexus拖不到jar包小记
- 服务接入层小结
- 54chen Twitter memo 2012-01-15
- nginx防hashdos模块使用帮助
- 54chen Twitter memo 2012-01-08
- nginx防hashdos模块释出
- 54chen Twitter memo 2012-01-01
- 水煮鱼杯2011年度不得不总结的十件事
- 年终攻击hashDos-哈希表多碰撞实现拒绝服务-破解办法
- 54chen Twitter memo 2011-12-25
