坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

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 架构研究 | Tagged | 1 Comment

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

Continue reading

Posted in 架构研究 | Tagged , | 2 Comments

淘宝分布式数据库系统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了。 继续观望,欢迎抛砖。向开源的项目致敬。

Continue reading

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

hive 0.7.0代码分析解读

入口: bin/hive脚本中,环境检查后执行ext中的cli.sh,进入主类:CliDriver.main。 CliDriver.main: 把分号隔开命令进cli.processLine,再进processCmd。 processCmd: 处理quit/exit,再处理source,处理!,处理list;else建立CommandProcessor(实现有Driver和各种Processor),set/dfs/add/delete命令有单独的Processor,剩下的走Driver。 如果是Driver类型的Processor: 把cmd发到这个driver的run,再进到compile,在compile中,用一个parseDriver去生成ASTNode(生成使用了antlr,主要过程:经过文法分析器切割,进解析器,出来一个TREE),这里有细节的compile的过程说明 http://fromheartgo.wordpress.com/2010/04/02/hive%E7%9A%84compile%E8%BF%87%E7%A8%8B%EF%BC%881%EF%BC%89/ ; 根据得到的ASTNode,开始语义分析,把结果设置到一个QueryPlan对象中,初始化一些task放在QueryPlan中; run里的test only代码读了test.serialize.qplan的设置,test状态会把这些查询记录写到文件里;权限检查。 退出complie,在Driver的run中分解执行MR后,退出来到了processCmd: 如果装填一切正常,通过getResul

Continue reading

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

hive迁移hadoop namenode时遇到的问题

使用了一段时间的hive和hadoop,在迁移datanode时很容易,要迁移namenode,hive里就闹情绪了。更改namenode后,在hive中运行select 依旧指向之前的namenode地址。 要如何解决呢,具体操作如下: 1.复制打包老的namenode 2.复制打包老的namenode的hdfs目录 3.到新机器准备好:修改master的值 复制到各节点 修改hive的定义 4.hive这里使用了mysql来保存metadata 因为这些信息会被写死在hive的DBS和SBS表里,下面是关键的一步: 进入mysql,执行下面的sql, update DBS set DB_LOCATION_URI=REPLACE(DB_LOCATION_URI,'old host','new host'); update SDS set LOCATION=REPLACE(LOCATION,'old host','new host'); 启动,一切正常了!迁移hive namenode成功。

Continue reading

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

硬件为王,软件为帝--记突增的访问

五一归来两周,精力都放在了因为服务器压力突增而来的各种鸡飞狗跳的事情上,今天总结一下,算是对过去两周的总结,希望对各创业团队有所借鉴。 1.访问突增,连锁反应 最先开始出现问题的,是在小负载下没有出现的问题,在大压力时,只要DB一堵,表像就会是循环锁死。 解决之道: 服务要有清晰的架构,开发规范里一定要有明确的架构层次规范,最好还有代码的层次规范。 2.mysql设计不合理,压力指数增加 mysql中存在大量的更新操作,特别是大字段或者变长字段的频繁更新,导致磁盘io居高不下,慢查询越来越多。 硬解决之道: raid卡加电,开启raid写缓存:一般服务器的raid卡都没有开启,开启是有一定用处的,但有一个前提,不是待续的高写入,否则这个写缓存是没有意义的。电池充电时无法缓存,一般三个月充一次电。 转微博:FusionioChina 回复 @YauzZ:多一个故障点。多一份丢数据的可能。而且目前有Raid卡的内存做到1GB。丢不起呀。(5月11日 23:29) 从raid分到多个盘、盘柜,都是从硬件上用多硬盘分担的好方案。 软解决之道: 写方案建立mysql隔离层,在写入前预先处理,类似软件缓存方案,效果明显,修改复杂。 3.后续可做 灵活的中间层数据层切换逻辑,让负载可以随时转移、分隔,基本可以达到“人傻钱多,万事不愁”。

Continue reading

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

用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 …

Continue reading

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

hadoop hive安装手记

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为 MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 [网络环境设置] vim /etc/hosts 192.168.100.52 hadoop1 192.168.99.34 hadoop2 192.168.103.135 hadoop3 分别到对应机器执行: hostname hadoop1 hostname hadoop2 hostname hadoop3 [打通机器] hadoop1# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa hadoop1# scp ~/.ssh/id_dsa.pub hadoop2:/root/ hadoop1# scp ~/.ssh/id_dsa.pub hadoop3:/root/ hadoop2# cat id_dsa.pub >> …

Continue reading

Posted in 架构研究 | Tagged , | 4 Comments

企业服务器监控及报警配置打造(ganglia and nagios)-part 1

系统简介: Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于测量数以千计的节点。每台计算机都运行一个收集和发送度量数据(如处理器速度、内存使用量等)的名为 gmond 的守护进程。它将从操作系统和指定主机中收集。接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结构中。正因为有这种层次结构模式,才使得 Ganglia 可以实现良好的扩展。gmond 带来的系统负载非常少,这使得它成为在集群中各台计算机上运行的一段代码,而不会影响用户性能。 我(54chen)的服务器操作系统:centos 5.5 x86_64 (六十四位centOS 5.5) 第一步,修改yum源 # cd /etc/yum.repos.d/ #vim dag.repo 写出如下信息: [dag] name=Dag RPM Repository for Red Hat Enterprise Linux baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag gpgcheck=1 gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt enabled=1 第二步,通过yum安装所有依赖 yum -y install …

Continue reading

Posted in 架构研究 | Tagged | 2 Comments

创业公司技术选型参考

java推荐框架 web项目来说,spring、struts是必选,当然有更加好用的,推荐来自疱丁分词作者王志亮在人人网的rose框架,使用上手快,配置少,是创业公司java必备。 php框架推荐 zend framework,或者直接写个简单的框架,php的框架更加倾向去规范代码,让所有项目在新人加入时快速上手。 代码版本控制 subversion是必选工具,简单易学,git也开始流行,也是可选方案。 jar包依赖管理 这是针对java项目,还在使用ant的朋友,可以考虑换换了,特别的,如果你的公司在很快扩张的时候,这个选择能让未来避开依赖混乱,遇事集体更新困难的困境。 公共代码建立 长期可遇见的公共部分,比如用户信息获取,memcache管理,毋庸置疑地需要提供公共的方法,越早越好。 代码可扩展 这就考量上面选择框架的气候是不是合理了,这里可扩展是指,在负载越来越大的时候,要能很轻易配置读写分离,rose在这方面做得很优雅,只需要简单配置就梦把看的代码用上新的数据源。 code review 有许多好用的系统,比如Review Board等,让参与者都知道修改,并且在最早期发现问题。 bug系统 jira、Bugfree等等,用系统控制流程。 培训体系 技术需要交流才会有进步,团体的进步才是真的进步。所以尽早建立起内部的培训体系非常有必要,同时也是活跃团体气氛的很好方法,其频度控制在两周一次最好。 知识管理 php+mysql的mediawiki是首选,每个优秀的工程师,都必须首先是一个完全熟悉wiki语法擅长写wiki的工程师。早年搞了一个把mysql换成postgr

Continue reading

Posted in 架构研究 | Tagged , | 7 Comments
Page 3 of 712345...Last »