| Subcribe via RSS

[转]提问的艺术

11月 18th, 2008 | 1 Comment | Posted in 生活随笔 < by Johnny Woo >

提问是一门艺术,需要充分的思考、技巧和练习,你不能帮助别人理解你的问题,就别想让别人帮助你。好的提问才能得到预期的答案。 lifehacker.com的一篇文章谈到如何在问问题时,无论被问的人是上司、同事、朋友,还是google,注意哪些方面才能尽最大可能得到你所需要的帮助:

问题要确定、具体
模糊、问不到点子上的问题别人无法回答。是什么东西不工作了?现象和结果是什么?出什么样的错误?具体的情况是怎样的?问别人之前先问自己一遍,把这些想清楚了再问别人,节省大家的时间。

提问之前自己先研究调查一下
问别人之前最好自己先找找答案。对于显而易见的问题,不调查一下就随便去问很招人讨厌,尤其是在一些论坛里。至少你应该先看看用户手册,搜一搜 google再去麻烦别人。搜不到再去问别人,可以告诉别人“我查过手册,但是没有”或者“我搜了google,但是没有找到”,至少你努力过,别人帮助你的几率也会大很多。

问正确的人
有时候抓到一个人恨不得什么问题都问他,就好像在论坛里乱发帖子问问题,对别人有时候也是一种困扰。找到正确的人,去正确的地方,你的问题才有可能得到回答,放过其他可怜的群众吧。

让被问的人觉得值得回答你的问题
“你做的这个软件根本不工作!我都快疯了!马上帮我解决这个问题!”
你可能是快疯了,可是如果把你的这种情绪传达给别人,未必有什么正面影响。
“你好,我对你的软件很有兴趣,正准备在我的blog里宣传一下,可是我碰到了一些问题。。。”
这样别人多半有兴趣帮你解决问题,并且很愿意和你这样一个热心的测试人员合作。

PS: 希望有些人能知道google怎么用.或者至少用用百度然后再问问题.

阅读内文

书评: Linux操作系统之奥秘

11月 13th, 2008 | 4 Comments | Posted in 读书笔记 < by Johnny Woo >

一直在买书看书
但是好久没有写书评了
可能是因为书太多.所以交叉着看都没来得及读完
Feng的网站上看到推荐了一本[Linux操作系统之奥秘](免费给amazon做下广告.免运费送书,使我这个china-pub的4星会员不得不跳槽了)
看到一条 把硬件和操作系统结合起来讲
引起我的兴趣了.赶快买来一本.
心中抱着希望是那种会从硬盘引导开始一直讲到init启动的书.而且会很细.很全的那种
拿到手之后.我满足了
不仅从硬盘引导.还是从BIOS开始.一直到把控制权交给init
以前读过一本[Linux 0.01内核分析与操作系统设计--创造你自己的操作系统]
这本书就是从最原始的bootloader开始从头分析.
不过对于没有汇编基础或者C语言基础的人来说.这本书未免太底层了一点
而且即便是有基础的人.看起来也会很累.因为我们只要知道原理.不需要知道那么细节的内容
而我一直想要的一本书就是讲一些比较底层.能说明原理和过程的书.也就是知其然也知其所以然的的书.
这本书的序也提到,市面上的linux书籍,要不就在于管理或者建站,要不就是直接kernel源码分析.而没有讨论linux本身概念的书.中间其实是个真空地带.
简直是一语中的.目前linux书籍的现状就是如此.两个极端.要不就是只讲些鸡毛蒜皮的命令.要不就是直接把kernel源码拿出来给你看.而整个系统的概念.流程.都没有书提及.也一直是我觉得linux类书籍无书好看的原因.
1.命令我自己会去man,参数我自己会help,只要有些英文水平.根本用不到买书.
2.我不是开发驱动,裁剪内核的开发人员.给我看了内存调度算法.于系统管理来说有一定助益,但是成本太高.
读过一半之后.我觉得这才是一本可以真正给广大linux用户推荐的好书
一本能让新手管理员更了解linux整个体系和概念的书.
当然对于linux老手
这些概念早已经在多年的摸爬滚打中混熟了.
但是有人能够从头一点点的打散理顺.还是很有帮助的
特别是看了之后再去看那本linux 0.01内核分析
嘿嘿.自己搞搞实验还是非常有意思的.

阅读内文

[转载]大型网站运维探讨和心得

11月 6th, 2008 | 1 Comment | Posted in 系统监控, 网站架构, 读书笔记, 集中存储 < by Michael Field >

看到一篇不错的心得体会;相信我们做技术的都会有或多或少的担忧自己的未来职业发展:

今天看到一篇心得体会,转过来和大家一起探讨一下:

一、什么是大型网站运维?
首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别还是蛮大的;然后我们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范、知名度、服务器量级、pv量等考虑,其它因素不是重点;因此,我们先定义服务器规模大于1000台,pv每天至少上亿(至少国内排名前10),如sina、baidu、QQ,51.com等等;其它小型网站可能没有真正意义上的运维工程师,这与网站规范不够和成本因素有关,更多的是集合网络、系统、开发工作于一身的“复合性人才”,就如有些公司把一些合同采购都纳入了运维职责范围,还有如IDC网络规划也纳入运维职责。所以,非常重要一定需要明白:运维对其它关联工种必须非常了解熟悉:网络、系统、系统开发、存储,安全,DB等;我在这里所讲的运维工程师就是指专职运维工程师。
我们再来说说一般产品的“出生”流程:
1、首先公司管理层给出指导思想,PM定位市场需求(或copy成熟应用)进行调研、分析、最终给出详细设计。
2、架构师根据产品设计的需求,如pv大小预估、服务器规模、应用架构等因素完成网络规划,架构设计等(基本上对网络变动不大,除非大项目)
3、开发工程师将设计code实现出来、测试工程师对应用进行测试。
4、好,到运维工程师出马了,首先明确一点不是说前三步就与运维工作无关了,恰恰相反,前三步与运维关系很大:应用的前期架构设计、软/硬件资源评估申请采购、应用设计性能隐患及评估、IDC、服务性能\安全调优、服务器系统级优化(与特定应用有关)等都需运维全程参与,并主导整个应用上线项目;运维工程师负责产品服务器上架准备工作,服务器系统安装、网络、IP、通用工具集安装。运维工程师还需要对上线的应用系统架构是否合理、是否具备可扩展性、及安全隐患等因素负责,并负责最后将产品(程序)、网络、系统三者进行拼接并最优化的组合在一起,最终完成产品上线提供用户使用,并周而复使:需求->开发(升级)->测试->上线(性能、安全问题等之前预估外的问题随之慢慢就全出来了)在这里提一点:网站开发模式与传统软件开发完全不一样,网站一天开发上线1~5个升级版本是家常便饭,用户体验为王嘛,如果某个线上问题像M$ 需要1年解决,用户早跑光了;应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作、服务监控、应用状态统计、日常服务状态巡检、突发故障处理、服务日常变更调整、集群管理、服务性能评估优化、数据库管理优化、随着应用PV增减进行应用架构的伸缩、安全、运维开发工作:
a 、尽量将日常机械性手工工作通过工具实现(如服务监控、应用状态统计、服务上线等等),提高效率。
b、解决现实中服务存在的问题,如高可靠性、可扩展性问题等。
c、大规模集群管理工具的开发,如1万台机器如何在1分钟内完成密码修改、或运行指定任务?2000台服务器如何快速安装操作系统?各分布式IDC、存储集群中数PT级的数据如何快速的存储、共享、分析?等一系列挑战都需运维工程师的努力。
在此说明一下其它配合工种情况,在整个项目中,前端应用对于网络/系统工程师来说是黑匣子,同时开发工程师职责只是负责完成应用的功能性开发,并对应用本身性能、安全性等应用本身负责,它不负责或关心网络/系统架构方面事宜,当然软/硬件采购人员等事业部其它同事也不会关心这些问题,各司其职,但项目的核心是运维工程师~!所有其它部门的桥梁。
上面说了很多,我想大家应该对运维有一些概念了,在此打个比方吧,如果我们是一辆高速行驶在高速公路上的汽车,那运维工程师就是司机兼维修工,这个司机不简单,有时需要在高速行驶过程中换轮胎、并根据道路情况换档位、当汽车速度越来越快,汽车本身不能满足高速度时对汽车性能调优或零件升级、高速行进中解决汽车故障及性能问题、时刻关注前方安全问题,并先知先觉的采取规避手段。这就是运维工作~!
最后说一下运维工程师的职责:”确保线上稳定“,看似简单,但实属不容易,运维工程师必须在诸多不利因素中进行权衡:新产品模式对现有架构及技术的冲击、产品高频度的升级带来的线上BUG隐患、运维自动化管理承度不高导致的人为失误、IT行业追求的高效率导致流程执行上的缺失、用户增涨带来的性能及架构上的压力、IT行业宽松的技术管理文化、创新风险、互联网安全性问题等因素,都会是网站稳定的大敌,运维工程师必须把控好这最后一关,需具体高度的责任感、原则性及协调能力,如果能做到各因素的最佳平衡,那就是一名优秀的运维工程师了。
另外在此聊点题外话,我在这里看到有很多人要sina、QQ、baidu,51.com等聊自已的运维方面的经验,其实这对于它们有点免为其难:
a、各公司自已网络架构、规模、或多或少还算是公司的核心秘密,要保密,另外,对于大家所熟知的通用软件、架构,由于很多公司会根据自已实际业务需要,同时因为原版性能、安全性、已知bug、功能等原因,进行过二次开发(如apache,php,mysql),操作系统内核也会根据不同业务类型进行定制的,如某些应用属于运算型、某些是高IO型、或大存储大内存型。根据这些特点进行内核优化定制,如sina就在memcache上进行过二次开发,搞出了一个MemcacheDB,具体做得如何我们不谈,但开源了,是值得称赞的,国内公司对于开源基本上是索取,没有贡献;另外,服务器也不是大家所熟知的型号,根据业务特点,大部份都是找DELL/HP/ibm进行过定制;另外,在分布式储存方面都有自已解决方案,要不就是使用现成开源hadoop等解决方案,或自已开发。但90%都是借鉴google GFS的思想:分布式存储、计算、大表。
b、各公司业务方向不一样,会导致运维模式或方法都不一样,如51.com和baidu运维肯定区别很大,因为他们业务模式决定了其架构、服务器量级、IDC分布、网络结构、通用技术都会不一样,主打新闻门户的sina与主打sns的51.com运维模式差异就非常大,甚至职责都不大一样;但有一点,通用技术及大致架构上都大同小异,大家不要太神化,更多的公司只是玩垒积木的游戏罢了,没什么技术含量。
c、如上面所讲,目前大型网站运维还处于幼年时期理念和经验都比较零散,没有成熟的知识体系,可能具体什么是运维,大家都要先思索一番,或压根没想过,真正讨论也只是运维工作的冰山一角,局限于具体技术细节,或某某著名网站大的框架,真正运维体系化东西没有,这也许是目前网上运维相关资料比较少的原故吧。或者也是国内运维人员比较难招,比较牛的运维工程师比较少见的原因之一吧。

二、运维工作师需要什么样的技能及素质
做为一名运维工程师需要什么样的技能及素质呢,首先说说技能吧,如大家上面所看到,运维是一个集多IT工种技能与一身的岗位,对系统->网络->存储->协议->需求->开发->测试->安全等各环节都需要了解一些,但对于某些环节需熟悉甚至精通,如系统(基本操作系统的熟悉使用,*nix,windows..)、协议、系统开发(日常很重要的工作是自动运维化相关开发、大规模集群工具开发、管理)、通用应用(如lvs、ha、web server、db、中间件、存储等)、网络,IDC拓朴架构;
技能方面总结以下几点:
1、开发能力,这点非常重要,因为运维工具都需要自已开发,开发语言:c/c++(必备其中之一)、perl、python、php(其中之一)、shell(awk,sed,expect….等),需要有过实际开发经验,否则工作会非常痛苦。
2、通用应用方面需要了解:操作系统(目前国内主要是linux、bsd)、webserver相关(nginx,apahe,php,lighttpd,java。。。)、数据库(mysql,oralce)、其它杂七八拉的东东。。。系统优化,高可靠性。。。这些只是加分项,不需必备,可以边工作边慢慢学,这些东西都不难。当然在运维中,有些是有分工偏重点不一样。
3、系统、网络、安全,存储,CDN,DB等需要相当了解,知道其相关原理。
个人素质方面:
1、 沟通能力、团队协作:运维工作跨部门、跨工种工作很多,需善于沟通、并且团队协作能力要强;这应该是现代企业的基本素质要求了,不多说。
2、工作中需胆大心细:胆大才能创新、不走寻常路,特别对于运维这种新的工种,更需创新才能促进发展;心细,运维工程师是网站admin,最高线上权限者,一不小心就会遗憾终生或打入十八层地狱。
3、主动性、执行力、精力旺盛、抗压能力强:由于IT行业的特性,变化快;往往计划赶不上变化,运维工作就更突出了,比如国内各大公司服务器往往是全国各地,哪里便宜性价比高,就那往搬,进行大规模服务迁移(牵扯的服务器成百上千台),这是一个非常头痛的问题;往往时间非常紧迫,如限1周内完成,这种情况下,运维工程师的主动性及执行力就有很高的要求了:计划、方案、服务无缝迁移、机器搬迁上架、环境准备、安全评估、性能评估、基建、各关联部门扯皮,7X24小紧急事故响应等。
4、其它就是一些基本素质了:头脑要灵光、逻辑思维能力强、为人谦虚稳重、亲和力、乐于助人、有大局观。
5、最后一点,做网站运维需要有探索创新精神,通过创新型思维解决现实中的问题,因为这是一个处于幼年的职业(国外也一样,但比国内起步早点),没有成熟体系或方法论可以借鉴,只能靠大家自已摸索努力。

三、怎样才算是一个合格的运维工程师
1、保证服务达到要求的线上标准,如99.9%;保证线上稳定,这是运维工程师的基本责职所在。
2、不断的提升应用的可靠性与健壮性、性能优化、安全提升;这方面非常考验主动性、和创新思维。
3、网站各层面监控、统计的覆盖度,软件、硬件、运行状态,能监控的都需要监控统计,避免监控死角、并能实时了解应用的运转情况。
4、通过创新思维解决运维效率问题;目前各公司大部份运维主要工作还是依赖人工操作干预,需要尽可能的解放双手。
5、运维知识的积累与沉淀、文档的完备性,运维是一个经验性非常强的岗位,好的经验与陷阱都需积累下来,避免重复性范错。
6、计划性和执行力;工作有计划,计划后想法设法达到目标,不找借口。
7、自动化运维;能对日常机械化工作进行提炼、设计并开发成工具、系统,能让系统自动完成的尽量依靠系统;让大家更多的时间用于思考、创新思维、做自已喜欢的事情。
以上只是技术上的一些层面,当然个人意识也是很重要的。

四、运维职业的迷惘、现状与发展前景
运维岗位不像其它岗位,如研发工程师、测试工程师等,有非常明确的职责定位及职业规划,比较有职业认同感与成就感;而运维工作可能给人的感觉是哪方面都了解一些,但又都比上专职工程师更精通、感觉平时被关注度比较低(除非线上出现故障),慢慢的大家就会迷惘,对职业发展产生困惑,为什么会有这种现象呢? 除了职业本身特点外,主要还是因为对运维了解不深入、做得不深入导致;其实这个问题其它岗位也会出现,但我发现运维更典型,更容易出现这个问题;

针对这个问题我谈一下网站运维的现状及发展前景(也在思考中,可能不太深入全面,也请大家斧正补充)

运维现状:
1、处于刚起步的初级阶段,各大公司有此专职,但重视或重要承度不高,可替代性强;小公司更多是由其它岗位来兼顾做这一块工作,没有专职,也不可能做得深入
2、技术层次比较低;主要处于技术探索、积累阶段,没有型成体系化的理念、技术。
3、体力劳动偏大;这个问题主要与第二点有关系,很多事情还是依靠人力进行,没有完成好的提练,对于大规模集群没有成熟的自动化管理方法,在此说明一下,大规模集群与运维工作是息息相关的如果只是百十来台机器,那就没有运维太大的生存空间了。
4、优秀运维人才的极度缺乏;目前各大公司基本上都靠自已培养,这个现状导致行业内运维人才的流动性非常低,非常多好的技术都局限在各大公司内部,如google 50万台机器科学的管理,或者国内互联公司top 10 的一些运维经验,这些经验是非常有价值的东西并决定了一个公司的核心竞争力;这些问题进而导致业内先进运维技术的流通、贯通、与借签,并最终将限制了运维发展。
5、很多优秀的运维经验都掌握在大公司手中;这不在于公司的技术实力,而在于大公司的技术规模、海量PV、硬件规模足够大,如baidu可怕的流量、51.com海量数据~~~~这些因素决定了他们遇到的问题都是其它中/小公司还没有遇到的,或即将遇到。但大公司可能已有很好的解决方案或系统。
发展前景:
1、从行业角度来看,随着中国互联网的高速发展(目前中国网民已跃升为全球第一)、网站规模越来越来大、架构越来越复杂;对专职网站运维工程师、网站架构师的要求会越来越急迫,特别是对有经验的优秀运维人才需求量大,而且是越老越值钱;目前国内基本上都是选择毕业生培养(限于大公司),培养成本高,而且没有经验人才加入会导致公司技术更新缓慢、影响公司的技术发展;当然,毕业生也有好处:白纸一张,可塑性强,比较认同并容易融入企业文化。
2、从个人角度,运维工程师技术含量及要求会越来越高,同时也是对公司应用、架构最了解最熟悉的人、越来越得到重视。
3、网站运维将成为一个融合多学科(网络、系统、开发、安全、应用架构、存储等)的综合性技术岗位,给大家提供一个很好的个人能力与技术广度的发展空间。
4、运维工作的相关经验将会变得非常重要,而且也将成为个人的核心竞争力,具备很好的各层面问题的解决能力及方案提供、全局思考能力等。
5、特长发控和兴趣的培养;由于运维岗位所接触的知识面非常广阔,更容易培养或发挥出个人某些方面的特长或爱好,如内核、网络、开发、数据库等方面,可以做得非常深入精通、成为这方面的专家。
6、如果真要以后不想做运维了,转到其它岗位也比较容易,不会有太大的局限性。当然了,你得真正用心去做。
7、技术发展方向、网站/系统架构师。

五、运维关键技术点解剖
1、 大规模集群管理问题
首先我们先要明确集群的概念,集群不是泛指各功能服务器的总合,而是指为了达到某一目的或功能的服务器、硬盘资源的整合(机器数大于两台),对于应用来说它就是一个整体,目前常规集群可分为:高可用性集群(HA),负载均衡集群(如lvs),分布式储、计算存储集群(DFS,如google gfs ,yahoo hadoop),特定应用集群(某一特定功能服务器组合、如db、cache层等),目前互联网行业主要基于这四种类型;对于前两种类似,如果业务简单、应用上post操作比较少,可以简单的采用四层交换机解决(如f5),达到服务高可用/负责均衡的作用,对于资源紧张的公司也有一些开源解决办法如lvs+ha,非常灵活;对于后两种,那就考验公司技术实力及应用特点了,第三种DFS主要应用于海量数据应用上,如邮件、搜索等应用,特别是搜索要求就更高了,除了简单海量存储,还包括数据挖掘、用户行为分析;如google、yahoo就能保存分析近一年的用户记录数据,而baidu应该少于30天、soguo就更少了。。。这些对于搜索准备性、及用户体验是至关重要的。
接下来,我们再谈谈如何科学的管理集群,有以下关键几点:
I、监控
主要包括故障监控和性能、流量、负载等状态监控,这些监控关系到集群的健康运行,及潜在问题的及时发现与干预;
a、服务故障、状态监控:主要是对服务器自身、上层应用、关联服务数据交互监控;例如针对前端web server,我们就可以有很多种类型的监控,包括应用端口状态监控,便于及时发现服务器或应用本身是否crash、通过icmp包探测服务器健康状态,更上层可能还包括应用各频道业务的监控,常用方法是采用面业特征码进行判断,或对重点页面进行签名,以网站被黑篡改(报警、并自动恢复被篡改数据)等等,这些只是一部份,还有N多监控方式,依应用特点而定,还有一些问题需解决,如集群过大,如何高性能的进行监控也是一个现实问题。
b、其它就是集群状态类的监控或统计,为我们合理管理调优集群提供数据参考、包括服务瓶颈、性能问题、异常流量、攻击等问题。
II、故障管理
a、硬件故障问题;对于成百上千或上万机器的N多集群,服务器死机、硬件故障概率是非常大的,几乎每时每刻都有服务硬件问题,死机、硬盘损坏、电源、内存、交换机。针对这种情况,我们在设计网站架构时需要充分考虑到这些问题,并将其视为常态;更多的依靠应用的冗余机制来规避这种风险,但给系统工程师足够宽裕的处理时间。(如google不是号称同时死800台机器,服务不会受到任何影响吗);这就是考验运维工程师及网站架构师功能的地方了,好的设计能达到google所描述自恢复能力,如gfs,糟糕的设计那就是一台服务器的死机可能会造成大面积服务的连锁故障反映,直接对用户拒绝响应。
b、应用故障问题;可能是某一bug被触发、或某一性能阀值被超越、攻击等情况不一而定,但重要的一点,是要有对这些问题的预防性措施,不能想当然,它不会出问题,如真出问题了,如何应对? 这需要运维工程师平时做足功夫,包括应急响应速度、故障处理的科学性、备用方案的有效等。

III、自动化
自动化:简而言之,就是将我们日常手动进行的一些工作通过工具,系统自动来完成,解放我们的双手及枯燥的重复性劳动,例如:没有工具前,我们安装系统需要一台一台裸机安装,如2000台,可能需要10人/10天,搞烂N张光盘,人力成本更大。。。而现在通过自动化工具,只需几个简单命令就能搞定、还有如机器人类程序,自动完成以往每天人工干预的工作,使其自动完成、汇报结果,并具备一定的专家系统能力,能做一些简单的是/非判断、优化选择等。。。这些好处非常明显不再多说。。。应该说,自动化运维是运维工程师职业化的一个追求,利已利公,虽然这是一个异常艰巨的任务:不断变更的业务、不规范化的应用设计、开发模式、网络架构变更、IDC变更、规范变动等因素,都可能会对现有自动化系统产生影响,所以需要模块化、接口化、变因参数化等因此,自动化相关工作,是运维工程师的核心重点工作之一,也是价值的体现。
五、运维中关键技术点解剖(比较实际,现实中的案例,今天先想出这几条,如大家有其它感觉兴趣的,可以提出,一起交流~)

1 大量高并发网站的设计方案
2 高可靠、高可伸缩性网络架构设计
3 网站安全问题,如何避免被黑?
4 南北互联问题,动态CDN解决方案
5 海量数据存储架构

转自chinaunix

阅读内文

恶心的百度

11月 5th, 2008 | 13 Comments | Posted in 生活随笔 < by Johnny Woo >

为了推出自己的C2C网站
可谓下流无耻手段无所不用其极.

阅读内文

搬迁完成

9月 12th, 2008 | 5 Comments | Posted in 生活随笔 < by Johnny Woo >

www.hiadmin.com已经搬迁至新的美国VPS
如果大家看到这篇文章
说明已经访问的是新空间了

阅读内文

搬迁通知

9月 12th, 2008 | 5 Comments | Posted in 生活随笔 < by Johnny Woo >

因为各种原因
本BLOG需要搬迁到新地址
新的服务器将使用美国的VPS
从公告发出开始
将会进行DNS切换
切换途中不会导致大家无法访问
但是可能造成部分评论数据丢失
所以请大家看到搬迁结束通告之后再评论
:D

阅读内文

关于学习方法

9月 12th, 2008 | 11 Comments | Posted in 生活随笔 < by Martian Guo >

今天终于去了上周说的那家公司,基于上几次的面试经历,这次我的打算就不是为了面试而去的,只是想去看看那边的工作环境.顺便认识一下他们的技术老大,面试的结果自然是毫无悬念,结果肯定不理想了。这次面试是否成功对于我来说已经没有多大意义了,正如他们老大说的那样,每一次面试都是一个很好的学习过程,找到自己的不足之处。说一下具体情况吧,今天的结果都不如前几次在网上的面试,有好几个基础问题比如像TCP的几种状态,Iptables中数据包通过链和表的过程(后来在回去的路上才发觉自己把表和链搞混了,当时居然没想起来),这些东西我之前很认真的做过笔记,难道是我脑子不好使了?还有一个问题:shell中的xargs用法,也许是我平时疏忽把这么有用的一个东西给忘记了。以至于问到另外一个问题:当一个目录下文件超过rm命令参数列表长度时如何删除,我当时只是想到一个for循环或者find命令,其实这个问题很简单: ls |xargs rm 就可以完成。另外涉及到的一些关于系统的问题,我之前对于这方面自我感觉良好,后来才发现实际上很多问题自己也仅仅是处于一知半解状态,对于32位LINUX系统的内存管理,pagesize,ext3文件系统单目录支持的最大文件数,文件系统的特点(ext3和reiserfs) 如何在源码目录树中直接编译模块,这些问题我想在平时应该是有所接触,只是自己没有太多的关注,关于linux内核方面的内容,IBM developerWorks 网站上有很多好文章,可惜自己从来没有仔细研究过。我想再问我一些如LinuxThreads,NPTL,epoll的问题 恐怕我也答不上来了。还有一些问题,如通过哪些方法检查导致apache僵死进程,如果apache负载过大,如何检查产生这些负载的原因。什么原因导致产生大量TCP SYN_RECV(除了DDOS之外),如何减小time_wait时间(除了修改/proc 下几个tcp_tw 参数外), LVS DR模式的原理等等,这些都没有怎么回答好,除了这些,还有一部分架构上面的问题,比如分布式,负载均衡的一些问题,这些内容虽然平时看的文章也不少,但自己并没有好好的整理过思路,还是相当混乱的。总的来说这次问的问题也不是那种特别难理解的,这些都是在实际工作中会接触到的,而我的表现却是:不是忘记想不起来了,就是没仔细研究过或者是理解错误。我的朋友兼前同事Johnny Woo 写过很多关于架构方面的文章, (具体哪些文章自己在这里找了,呵呵) 虽然之前讨论过这些内容,但我并没有很深入的去领会,或者说是没有把这些知识掌握好。在这里说一下我们这个blog,Johnny Woo应该是这个blog的核心人物,其中90%的文章都是出于他的手。Johnny Woo 思路敏捷,知识掌握全面,兴趣爱好广泛,等等…(不夸他了,要被他喷了),总之在我看来,他是很值得我们大家学习的。

在这里不想谈关于面试技巧上的问题,我想说说关于学习的问题。面试结束后,他们技术老大找我谈了一会话,给我映象最深的一句话是:不在于你现在掌握了多少知识,而在于你如何学习知识。如何通过现有的知识快速解决出现的新问题。想想看互联网每天都有新的技术出现,你不可能全部都掌握,互联网的出现改变了我们很多思维方式,这其中包括如何学习知识和寻找问题的答案,你有什么问题,google一下就能找到,很多时候我们都是在使用别人的知识解决当前的问题,比如说配置一台WEB服务器,实现一个脚本功能,随便网上一搜就能搜到一大堆范例,我们也会毫不客气,复制/粘贴 。而之后很少会去考虑,对于目前的情况该如何设置这些参数,修改了这些参数会有什么后果。这几个参数是否适合我的应用。说的简单点就是,很多时候我们始终处于怎么用的状态,就如上面说的配置一台web,写几句配置就能搞定,而且也没有多少难度。仅仅是配置,你要是教一个新人做这些东西,也是很快就能上手的。而真正有用的学习方式是你得自己找问题,比如说为什么nginx比apache性能要好,nginx有epoll,epoll的工作原理,epoll的实现方式…… 只有自己去找问题,你才能把现在已经掌握知识了解的更深入,学习最重要的目的在于有所创新,我们要从老问题中找出新问题。我们也经常会碰到一个学习瓶颈问题,自以为足够的知识往往不像我们想像的那么充足,(比如说英文,比如说C编程。),我们只能在原地踏步甚至倒退几步,对于这个问题,我现在也是在寻找答案当中,我想是否可以忘记这个瓶颈,重新寻找乐趣,想办法解决它然后继续学习(乐趣也许是学习的最大动力)。另外还有一些学习方式的问题,面试的时候有人问我,平时都学些什么?说到以后的发展方向,学习动力的问题上,我想我要好好反省反省了,学习应该是要有目的的。要有选择性的。好了,不多说了,最后在这里感谢一下这位技术老大,他最后跟我说:不要觉得自己不行,大家都是从不懂开始学的,呵呵,很高兴能认识他。

阅读内文

python-对象基础 思维导图

9月 9th, 2008 | 1 Comment | Posted in Python, 思维导图 < by Michael Field >

学习python可谓是学一时也,用一时也。
看着屏幕发呆,一个函数一个类的搞得自己头晕,所以我重新整理一下思路,借助思维导图的魔力,重新在脑海中整理和描绘python对象,来加深理解,可谓是新手入门,老手回顾,一举两得!

以下是根据最近比较热门的python核心编程第二版,构思的python对象的思维导图,希望对各位整理思路,加深记忆带来帮助。

源文件下载

看书枯燥,偶尔咱看图缓解一下疲劳。

阅读内文 Tags: , , ,

欢迎Ready,Page,xiaole加入

9月 9th, 2008 | 3 Comments | Posted in 生活随笔 < by Johnny Woo >

最早认识ready是我们和henry在一家公司的时候
那时候还记得天天晚上回去就CS
而我最早做SA也是跟着ready做起来的
后来又和ready在一起共事.直到我到了fortel,而他就去了朋友公司.
现在ready在琥珀的技术部工作.
似乎编程和系统维护都要做.呵呵
很高兴ready也能加入进来
他和我说了一句.东西太多要整理.哈哈
大家应该有很多东西可以看了

Page和xiaole都是我原来在fortel的同事
page是苦命的装机男
虽然他执着的追求linux系统管理
不过还是装机男的宿命
向宿命挑战吧~!
希望以后可以看到他更多的装机.哦…不是…是系统管理方面的文章

xiaole是做网络这块的
正好hiadmin就网络一块最薄弱了
最近他在测试pix 525的vpn
正好可以有文章发表了

阅读内文

一次网上面试经历

9月 7th, 2008 | 16 Comments | Posted in Squid, 生活随笔 < by Martian Guo >

应朋友介绍,有幸在网上接受了一家国内比较著名的网络公司的面试,其实这家公司之前已经接触过两次,对于这次面试,和上两次一样,至少自己是不满意的,感觉自己仍旧欠缺很多东西,先把这次面试的问题说一下

  • 你认为组成web站点体系有哪些元素?
  • 这样的配置,在apache起来后会有几个子进程? (别把这个问题想的简单化)
    <IfModule mpm_prefork_module>
    StartServers 5
    MinSpareServers 50
    MaxSpareServers 100
    MaxClients 150
    MaxRequestsPerChild 0
    </IfModule>
  • 在apache的worker MPM中,为什么ServerLimit要放到配置段最前面?
  • 千兆网卡的极限pps是多少?是如何算出来的?
  • 为什么lighttpd,nginx的并发性能比apache要高?
  • top命令里running的值表示什么意思?这个值和CPU数有什么关系?
  • 在http header头里看到的:Last-Modified,Expires,max-age,etag这四者有什么关系?
  • 一个web站点,如何计算所需要的带宽?公式是什么?
  • 如何看http的并发连接数的?
  • FIN_WAIT2是在什么状态?
    iostat看到的:
    wsec/s = 600
    那么wKB/s = ?
  • 当打开apache的mod_status后,可以通过http://ip/server-status看到相关的状态值,那么Srv, Acc, M,SS,Req各表示什么含义?
  • 如何计算客户端到服务器段的带宽?

对于上面这些问题,也说不上有多难,很多问题google上都能够找到,而且对于系统运维人员来说这些内容是必须了解的,但是你说仅仅是了解,恐怕也不够,其实很多东西不是说没接触过,而是都做过和接触过,但没有深入的去研究过,只知其然 而不知其所以然,感觉做我们这行的,需要掌握的知识面是相当广泛的,大到网络应用架构到,小到一个命令的参数,一个脚本编写,你都要知道,知识是需要积累的,但也需要你怎么运用他,我们很多时候所做的仅仅是如何用,而没有去考虑为什么要这样用,比如说技术文档,有多少人会仔细的查看MAN帮助,有多少人去研究过RFC文档?再比如说简单的iptables应用,一般很少会过多的去考虑当使用了iptables 后会对tcp连接产生多大的影响,可能在等到出现 “ip_conntrack: table full, dropping packet.”的情况下才会去检查问题的所在,很多人会觉得这些东西都是需要经验的,你碰到过这个问题就知道,没有碰到过就不知道,就如上面的问题,假如你的服务器每天就几千连接,恐怕你是一辈子都不会碰到这个问题的。道理是这样,但我们是不是也应该多了解一下这么做合理性,可能会出现什么问题。一个架构的实施一个软件的应用,不是简单的把它部署运行起来,我们应该考虑更多的问题。像我们blog的Johnny Woo同学,他考虑的问题就比我要深入的多,比如说他经常会做一些测试,各种WEB服务器,缓存服务器的性能测试,一些架构技术的研究,我想知识的积累就是如此,不是等待问题的出现,而是自己去找出可能会出现问题,GOOGLE提供给了我们一个非常巨大的知识库,我们如何把别人共享的知识转化成我们自己掌握的知识,关键还是在于实践,在于自己去找问题。还有一点,环境因素,就如上面说的,如果你的环境是每天只有几千人的访问量,你可能不会太多的去关注性能方面的问题,而即使关注,也仅仅是靠自己做一些实验测试而不能真正在生产环境下检验,这也是其中的一个问题,但关键一点还是在于自己,一个问题,一个技术是否是想继续深入的去了解呢,还是仅仅满足现在的要求而不考虑其他方面了。我想,我现在所欠缺的应该就是这些了。

另外再讨论一个问题:我们每天接触的最多的是自由软件,在感叹全世界那么多无私的开发者贡献出那么多完美的软件的同时,对于我们能做的难道仅仅是使用这些软件吗?我是相当佩服国内外一些做系统运维的牛人,他们是相当优秀的系统架构师,另外同时也是相当优秀的软件工程师。使用者最了解自己需要什么样的软件,那么对于系统运维,有谁比我们更了解我们需要什么吗?一个好的环境,再加上一份激情,你会有很多事情要做。

以上内容只是我个人的一些感受,希望经常关注我们blog的朋友能提供一些建议,非常感谢。

阅读内文

[转载]RRDTool 中文手册-简易入门(二)

8月 19th, 2008 | No Comments | Posted in Cacti, RRDTool, 系统监控, 读书笔记 < by Michael Field >

三、RRD数据库更新实例

    在简易入门(一)中已经介绍过update 命令:它使用1个或多个参数,其格式为: : . 如果你知道可以用一个 N 表示当前的时间,你一定会高兴的。或者你可以用Perl中的 time 函数来指定时间:
    perl: perl -e ‘print time, “\n” ‘
    shell: date +%s
    如何按照固定间隔运行某个程序各操作系统不同。不过可以用伪码来表示:
    - Get the value and put it in variable “$speed”
    - rrdtool update speed.rrd N:$speed

    就这些。每5分钟运行一次上面的脚本。在你想知道图像看起来是啥样时,运行上面的例子。你可以把他们放入一个脚本中。运行此脚本后,查看我们刚才创建的graph。

四、SNMP相关知识

    我可以想像到只有少数的人能够每5分钟从他们的汽车中读取一次真实的数据。其他人不得不清算其他类型的计数器。你可以测量打印机打印的页数,咖啡机做的咖啡杯数,计算使用的电流的设备,都可以。递增的计数器可以被监视,并且用你已经学会的方法被绘制成图像。稍后我们就能够监视像温度计这样的值了。
    大多数对RRDtool感兴趣的人会使用一个跟踪网络设备传输数据量的计数器。这样我们下一步就来作这个。我们会从解释如何收集数据开始。

    有些人会说有些工具可以帮助你收集数据。他们是对的!不过,我感觉理解这些工具不是必须的非常重要。在你能够确定为什么事情发生了错误,你要知道他们是如何工作的。

    本例中使用的工具在本文档前面非常简短地提到过,它就是所谓的SNMP。它是与联网设备交谈的方式。

下面用到的工具名为 snmpget ,以下是关于它是如何工作的说明:

snmpget device password OID

snmpget -v[version] -c[password] device OID
    对于device, 你要用设备的名称或者IP地址来替换。对于password, 你需要使用SNMP领域中称为 comunity read string 来替换。对于某些设备来说,缺省的 public 可以工作,但是该设置可能会被关闭,调整或者由于安全和机密的原因而被保护起来。请阅读你的设备或程序的文档。

    接下来有一个称为OID的参数,它用来表示 对象标识符 。

    刚开始学习SNMP时,它看起来有些令人困惑。在你看到MIB管理信息基时,就不会那么困难了。MIB是用来描述数据的倒状树,它有只有一个根结点,并且由根结点开始有多个分支。这些分支都以另一个结点终结,他们继续向下分支,如此继续。所以的分支都有一个名称,它们构成了一个我们能够沿着往下的路径。我们所沿着的这些分支都被命名了:iso, org, dod, internet, mgmt 和mib-2.这些名称也可以用数字方式记录,就像 1 3 6 1 2 1。
    iso.org.dod.internet.mgmt.mib-2 (1.3.6.1.2.1)

    有些程序会使用前导点 . , 令人感到许多困惑。在一个OID中并 没有前导点。为了显示OID缩记法和OID完整记法的区别,(通常约定)在使用OID的完整记法时使用前导点。通常这些程序在返回数据给你时,会省略却缺省的部分。这些程序有的有几个缺省前缀,这会让事情显得更加糟糕。
    Ok, lets continue to the start of our OID: we had 1.3.6.1.2.1 From there, we are especially interested in the branch interfaces which has number 2 (e.g., 1.3.6.1.2.1.2 or 1.3.6.1.2.1.interfaces).

    好了,我们继续OID的初步学习:我们有一个1.3.6.1.2.1的OID,我们对(其下面的) interface 分支特别感兴趣,其编号为2(例如:1.3.6.1.2.1.2 或 1.3.6.1.2.1.interface)。

    首先,我们得要有几个SNMP的程序。先看看你的OS平台上是否有已编译好的软件包。这是最便捷的方式。如果没有,你就得下载源代码、并编译。互联网上到处都是源代码、程序。你可以用你喜欢的任何方式、搜索引擎来找到相关的信息。

    假设你已经有了这些程序。先试着收集大多数系统都有的数据。记住:那些引起我们兴趣的树,它上面的部分都有一个简略名。

    在此我会给出一个在Fedora Core 3操作系统上可用的例子。如果对你的操作系统不可用,请查看snmp的手册,并作相应的调整让它能够运行。

snmpget -v2c -c public myrouter system.sysDescr.0
    该设备应当回应其自身的描述,该描述可能是一个空的。只有在你从某个设备获得响应后,你才能够继续。其中可能需要使用不同的口令、或者不同的设备。
snmpget -v2c -c public myrouter interfaces.ifNumber.0

    最好你得到的结果是一个数字。如果这样的话,你就可以继续往下,并试试另一个叫做 snmpwalk 的程序。

snmpwalk -v2c -c public myrouter interfaces.ifTable.ifEntry.ifDescr
    如果该命令返回一系列的接口,这就对了。以下是该命令运行的返回结果的例子:
[user@host /home/alex]$ snmpwalk -v2c -c public cisco 2.2.1.2
interfaces.ifTable.ifEntry.ifDescr.1 = "BRI0: B-Channel 1"
interfaces.ifTable.ifEntry.ifDescr.2 = "BRI0: B-Channel 2"
interfaces.ifTable.ifEntry.ifDescr.3 = "BRI0" Hex: 42 52 49 30
interfaces.ifTable.ifEntry.ifDescr.4 = "Ethernet0"
interfaces.ifTable.ifEntry.ifDescr.5 = "Loopback0"
    对于cisco设备,我想监视 ‘Ethernet0` 接口,从上面的输出结果能够看到该接口的编号是 4。 我试着运行如下命令:
[user@host /home/alex]$ snmpget -v2c -c public cisco 2.2.1.10.4 2.2.1.16.4

interfaces.ifTable.ifEntry.ifInOctets.4 = 2290729126
interfaces.ifTable.ifEntry.ifOutOctets.4 = 1256486519
    这样,我就有两个OID需要监视,他们是(这次使用完整记法):
    1.3.6.1.2.1.2.2.1.10

    1.3.6.1.2.1.2.2.1.16
    这两个OID都有接口编号4。
    别被糊弄了,我可不是试一次就搞定的。我花了一些数据来搞清这些数字都是什么意思。把这些编号转换成描述文字大有帮助… 至少在大家谈论MIB和OID时,你知道他们是什么东西。别忘了接口编号(如果它不是附属接口,就是0),如果用snmpget没有得到响应,试试 snmpwalk。

五、应用RRDtool的实例

    实际运用的例子
    开始有趣的东东吧。首先,创建一个新的数据库。它包含输入和输出2个计数器的数据。该数据被放入能够进行平均的归档中。他们一次使用1、6、24、或 288个样本。他们同时被存入保存最大数字的归档中。稍后会解释。样本间隔时间为300秒,也就是5分钟,这是一个好的开始。:

    1个样本 “平均” 保留5分钟的周期
    6个样本 每30分钟进行一次平均
    24个样本 每2小时进行一次平均
    288个样本 每1天进行一次平均

    我们试着与MRTG互相兼容,MRTG存储以下数据::

    600 5分钟样本数: 2天和2小时
    600 30分钟样本数: 12.5天
    600 2小时样本数: 50天
    732 1天样本数: 732天

    这些范围被补充进去,因此在数据库中保存的数据总数大约797天。RRDtool存储不同的数据,它不会在 每日 归档停止的地方开始 每周 归档。对于这两个归档,最新的数据会是在 now 附近,因此我们需要比MRTG保存更多的数据!
    我们需要::

    600个5分钟的样本 (2天和2小时)
    700个30分钟的样本 (2天和2小时,加12.5天)
    775个2小时的样本 (上述+50天)
    797个1天的样本 (上述+732天,环型回绕最大797)

rrdtool create myrouter.rrd \
DS:input:COUNTER:600:U:U \
DS:output:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797

接下来要做的就是收集数据并把它保存起来。以下是一个例子。它是用伪码写的,你得根据OS调整后让它能够运行。:

while not the end of the universe
do
get result of
snmpget router community 2.2.1.10.4
into variable $in
get result of
snmpget router community 2.2.1.16.4
into variable $out

rrdtool update myrouter.rrd N:$in:$out

wait for 5 minutes
done

在收集了1天的数据后,试着用下面的命令创建图像::

rrdtool graph myrouter-day.png --start -86400 \
DEF:inoctets=myrouter.rrd:input:AVERAGE \
DEF:outoctets=myrouter.rrd:output:AVERAGE \
AREA:inoctets#00FF00:"In traffic" \
LINE1:outoctets#0000FF:"Out traffic"

这会产生一个具有1天流量值的图像。1天有24(小时)x60(分钟)x60(秒)。我们从当前时间-86400秒开始。我们用DEF把输入和输出字节数定义成myrouter.rrd数据库中的的平均值,并且绘制输入流量区和输出流量线。

阅读内文 Tags: , , ,

[转载]RRDTool 中文手册-简易入门(一)

8月 18th, 2008 | No Comments | Posted in Cacti, RRDTool, 系统监控, 读书笔记 < by Michael Field >

一、简介

    RRDtool是由Tobias Oetiker 编写并由全球各地的许多人贡献的工具。本篇文档的作者是Alex van den Bogaerdt 主要是帮助你理解RRDtool是什么,它能够帮助你作些什么。 RRDtool的文档对于有些人来说过于技术化。本教程帮助你理解RRDtool的基本概念。它为你自学RRDtool的文档做好准备。本文档还重点介绍了网络统计方面的知识。


1、RRDtool是什么东西?

    RRDtool是指Round Robin Database 工具(环状数据库)。Round robin是一种处理定量数据、以及当前元素指针的技术。想象一个周边标有点的圆环--这些点就是时间存储的位置。从圆心画一条到圆周的某个点的箭头--这就是指针。就像我们在一个圆环上一样,没有起点和终点,你可以一直往下走下去。过来一段时间,所有可用的位置都会被用过,该循环过程会自动重用原来的位置。这样,数据集不会增大,并且不需要维护。RRDtool处理RRD数据库。它用向RRD数据库存储数据、从RRD数据库中提取数据。


2、RRD中可以存放什么样的数据?

    可以适合时间序列的数据。就是说你必须能够在时间的几个点上度量某些值,并提供这些信息给RRDtool。如果你能够做到这一点,RRDtool就能够存储它们。这些数值必须是数字,但是不一定要是整数,在与MRTG合用时。(下一节会给出更详细的介绍)。
    下面的例子是关于SNMP的,SNMP是简单网络过来协议的缩写。简单是指协议简单--并不表示管理或监视网络简单。读完本篇文档后,你应当能够对人们谈论的SNMP的东西有更多的理解。现在,只要知道SNMP可以用来查询设备中保持的计数器的值就可以了。我们要存放到RRD数据库中的正是这些计数器中的数值。


3、RRDtool可以用来干什么?

    RRDtool源自MRTG(多路由器流量绘图器)。MRTG是有一个大学连接到互联网链路的使用率的小脚本开始的。MRTG后来被当作绘制其他数据源的工具使用,包括温度、速度、电压、输出量等等。
    很可能你会从使用RRDtool来存储和处理通过SNMP收集到的数据开始。这些数据很可能是某个网络或计算机接收或发送的字节数(比特数)。它也可以用来显示潮水的波浪、阳光射线、电力消耗、展会的参观人员、机场附近的噪音等级、你喜欢的度假区的温度、电冰箱的温度、以及任何你可以想象的东西。
    你最需要一个度量数据,以及能够提供这些数据给RRDtool的感应器就可以了。RRDtool会让你创建数据库、存储数据、提取数据、创建用于在Web浏览器中显示的PNG格式的图像。这些PNG图像以来于你收集的数据,它可以是网络平均使用率、峰值。


4、问题探讨

    首先:再读一遍!你可能漏了某些地方。如果你无法编译源代码,而且你的操作系统相当普遍,很可能不是RRDtool的错误。互联网上有已经编译好的版本。如果来自可信赖的网站,就下载一个。
    另一种情况是程序能够工作,但是没有得到预期的结果,可能是配置方面的问题。检查你的配置,与后面例子的配置比较一下。
    RRDtool有一个邮件列表及其归档。读一下几周的列表并搜索归档。没有搜索过归档就提问是很粗鲁的做法:你遇到的问题可能已经由其他人解决了!尽管不是全部,大多数问题都会这样,邮件列表不是经济为了某个参与者服务的。看看RRDtool的文档了解邮件列表的位置和使用方法。
    我建议你马上就花点时间订阅邮件列表,只要发送一封主题为 subscribe 的邮件到 rrd-user-request@list.ee.ethz.ch 就可以了。如果要退定该邮件列表,只需要发送主题为 unsubscribe 到同样的地址即可。


二、学习实例
1、第一个RRD数据库

    在我看来,学习某个东西的最好办法就是实践。为什么现在不开始呢?我们会创建一个数据库,放一些数值到它里面,然后提取这些数据。你的输出应当与本文档中的输出是一样的。
    我们会从一些简单的入手,然后把汽车与路由器比较,或者将公里和比特、字节数比较。他们都是一样的:都是某些时段的某些数值。
    假设我们有一个向互联网发送数据和接收数据的设备。该设备保留一个计数器,该计数器在开启设备时设置为0,并在每传送一个字节就加1。该计数器可能会有一个最大值。如果该值达到最大时,在加一个字节的计数,该计数器就会再次从0开始。这与世界上的许多计数器都是一样的,比如车辆上的里程计数器。
    关于网络的讨论通常用每秒比特数来衡量,因此我们要习惯这种用法。把一个字节看成是8个比特,并且开始用比特而不是字节来思考问题。不过,计数器仍然用字节数为单位来计量!在SNMP世界里,大部分的计数器都是32比特的。这就意味着他们计数范围是0-4294967。我们在例子里会用到这些数值。该设备在被查询时,会返回计数器的当前值。我们知道从上次查询设备开始到现在的时间,因此我们现在就知道每秒 平均传输了多少字节数。这不难计算。首先用文字来描述,然后计算:

用当前查询到的计数器值,减去上一次查询的计数器值
把当前查询时间和上次查询时间作上述同样操作(秒)
将(1)的结果除以(2)的结果,得到的结果就是每秒的字节数。乘以8就得到每秒的比特数(bps)

  • 实例一
    • 你现在正在开车。12:05时你看了一下仪表盘上的里程计数器,它显示这俩车已经行驶了12345公里。12:10分时,你有看了一下里程计数器,它显示 12357公里。这表示你在5分钟内行驶了12公里。科技人员会把它转换成米/秒,这样可以更好的进行比较(每5分钟的字节数)和(每秒比特数)。
      我们行驶了12公里,也就是12000米。我们在5分钟内,或者说是300秒内完成。我们的速度是1200米/300秒,或者说是40米/秒。
      我们可以用公里/小时来计算速度:12乘以5分钟就是一个小时,因此我们必须把12公里乘以12得到144公里/小时。对于和我一样说英语的朋友来说,就是90英里/小时,因此不要在家里或我生活的地方尝试这个速度 :)
      记住:这些数值都仅仅是平均值。如果无法从数字中得到你是否以固定的速度在行驶。本教程后面有一个例子说明这个问题。我希望你理解在计算米/秒或者比特/秒。唯一的差别在于收集数据的方式。即使是K这个单位也是一样的,因为在网络术语中,K同样表示1000。
      我们现在要创建一个数据库,在此数据库中我们能够保存所有这些有趣的数字。启动这个程序的方法可能在各个操作系统上各不相同,但是我假设你可以搞清楚它是否与你的操作系统不同,键入下面的行作为一个长长的行(为了可读性,我得把他分成几行)并且用 \ 来分割。
    rrdtool create test.rrd \
    --start 920804400 \
    DS:speed:COUNTER:600:U:U \
    RRA:AVERAGE:0.5:1:24 \
    RRA:AVERAGE:0.5:6:10


    2、创建了什么东西?

      我们创建的rrd数据库名为test (test.rrd),它的起始时间是我写这篇文档的当天下午,也就是1999年3月7日(该日期转换成920804400秒)。我们的数据库存放一个名为 ’speed’ 的数据源(DS),它表示一个计数器。该计数器每5分钟(缺省)读取一次。在同一个数据库中,保存有2个环状归档(RRA),一个是每次读取时的平均数据(例如:没有东西进行平均)并保留24个样本(24乘以5分钟是2小时)。另一个RRA有6个平均值(半小时)并包含10个这样的平均值(例如5个小时)。

      RRDtool使用来源于UNIX世界的特殊时间戳。该时间戳是自1979年1月1日UTC时间开始到当前逝去的秒数。该时间戳的值被转换成本地时间,它在不同的时区会不一样。
      可能你不是和我在地球的同一个地方。这就是说时区不同。在所有的例子中,我所说的时间当中,小时可能对你来说是错误的。这对这些例子中的结果有一点影响,在阅读时,只需要修正时间中的小时即可。例如:我看到 12:05 的话,在英国的家伙看到的时间就是 11:05 。

    现在我们得向数据库中填入一些数字。我们希望读到以下数据:
    12:05 12345 KM
    12:10 12357 KM
    12:15 12363 KM
    12:20 12363 KM
    12:25 12363 KM
    12:30 12373 KM
    12:35 12383 KM
    12:40 12393 KM
    12:45 12399 KM
    12:50 12405 KM
    12:55 12411 KM
    13:00 12415 KM
    13:05 12420 KM
    13:10 12422 KM
    13:15 12423 KM

  • 我们用下面的命令把上述数据填入数据库:
  • rrdtool update test.rrd 920804700:12345 920805000:12357 920805300:12363
    rrdtool update test.rrd 920805600:12363 920805900:12363 920806200:12373
    rrdtool update test.rrd 920806500:12383 920806800:12393 920807100:12399
    rrdtool update test.rrd 920807400:12405 920807700:12411 920808000:12415
    rrdtool update test.rrd 920808300:12420 920808600:12422 920808900:12423

    正如你说看到的那样,可以在一个命令里向数据库中填入多个值。为了可读性,我得只用三个数据,实际一行里运行的最大数据与操作系统相关。
    我们可以使用 rrdtool fetch 命令从数据库中提取数据。

    rrdtool fetch test.rrd AVERAGE --start 920804400 --end 920809200
      该命令会返回如下输出结果:
      speed

      920804700: nan
      920805000: 4.0000000000e-02
      920805300: 2.0000000000e-02
      920805600: 0.0000000000e+00
      920805900: 0.0000000000e+00
      920806200: 3.3333333333e-02
      920806500: 3.3333333333e-02
      920806800: 3.3333333333e-02
      920807100: 2.0000000000e-02
      920807400: 2.0000000000e-02
      920807700: 2.0000000000e-02
      920808000: 1.3333333333e-02
      920808300: 1.6666666667e-02
      920808600: 6.6666666667e-03
      920808900: 3.3333333333e-03
      920809200: nan
      如果不是像上面的输出结果,可能哪里有错误。也许你的操作系统会打印出不同的格式 NaN 。 NaN 表示 非数字 。 如果你的操作系统输出 U 或 UNKN 或者其他类似东西都是正常的。如果其他地方错误,可能是因为你的过程中的那些步骤出错了(当然假设我的教程是完全正确的 :-))。这样的话,删除数据库文件然后再重新尝试。 有时事情就会变化。本例哟难道的数据像 0.04 而不是 4.0000e-02 。这些实际上是一样的数字,只是写法不同而已。如果rrdtool今后的版本显示略有不同是输出也不要大惊小怪。本文档中的例子对于RRDtool 1.2.0版本都是正确的。


    3、绘第一张图

    建几个图示的时候到了,试试下面的命令:

    rrdtool graph speed.png \
    --start 920804400 --end 920808000 \
    DEF:myspeed=test.rrd:speed:AVERAGE \
    LINE2:myspeed#FF0000

  • 如图一

    • 该命令会创建名为speed.png的图像文件,该图像从12:00开始,到13:00。有一个名为myspeed的变量定义,它使用来自 test.rrd数据库的 speed RRA中的数据。绘制的线条是2像素高,表示myspeed变量。颜色是红色的.
      你会注意到图像的起始不是12:00而是12:05。这是因为在此时间之前的数据不够计算出平均值。这只会在缺少某些样本的情况下发生,不会经常发生。
      颜色是由红、绿、蓝构成的。对每种颜色成分,你可以用16进制来表示使用多少,其中00表示不包含,FF表示完全包含。白色是由红、绿、蓝组成的:FFFFFF。黑色是全部不包含:000000。


    4、用几种数学方法来绘图

      查看图像时,你会注意到横轴下标为 12:10、12:20、12:30、12:40、12:59。有时某些下标不适合(可能是12:00和13:00)会被忽略掉。
      纵轴显示我们输入的范围。下面提供的公里数,以及除以300妙的结果,我们得到非常小的数值。为了更加精确,第一个值是12(12567-12456),除以300后得到0.04,RRDtool显示时为 40m 表示 40/1000 。 其中的 m 与米、公里、或者毫米都没有任何关系!RRDtool不知道我们的数据单位,它只处理没有单位的数据。
      如果我们用米来衡量我们的距离,就会是这样:(12′357′000-12′345′000)/300 = 12′000/300 = 40.
      因为许多人都对这样的数值范围感觉更好,我们就来修正一下。我们将重新创建数据库,并存储正确的数据。但是有更好的办法:在创建png文件时进行一些计算!
    rrdtool graph speed2.png \
    --start 920804400 --end 920808000 \
    --vertical-label m/s \
    DEF:myspeed=test.rrd:speed:AVERAGE \
    CDEF:realspeed=myspeed,1000,\* \
    LINE2:realspeed#FF0000

  • 如图二


  • 注意:不要忘记操作符 * 后面的 。这个反斜杆用来将*从操作系统可能解释的符号转义,而不是直接传递给rrdtool命令。
    在查看PNG文件后,你会注意到 m 不见了。正确的结果就是这样。同样,在图像中加入了一个标注。出了上面提到的几点外,PNG看起来应当是一样的。

      计算是在CDEF部分中指定的,使用逆波兰表达式( RPN )表示的。我们要求RRDtool所作的事情是:`取数据源myspeed, 以及数值1000;把他们相乘` 。在此不要被RPN表达式困扰了,后面会详细介绍。同时,你可能想读一读关于CDEF的教程。以及Steve Rader的RPN表达式的教程。不过哦首先看我这篇教程吧。
      如果我们用1000乘以这些数值,显示把同样的数据显示成公里/小时也是可以的。
      要修改米/秒为单位的值:
      计算米/小时: value * 3′600
      计算公里/小时: value / 1′000
      合起来: value * (3′600/1′000) 或者 value * 3.6

    下面我们来创建这个PNG文件,并加入更多的魔幻功能…

    rrdtool graph speed3.png \
    --start 920804400 --end 920808000 \
    --vertical-label km/h \
    DEF:myspeed=test.rrd:speed:AVERAGE \
    "CDEF:kmh=myspeed,3600,*" \
    CDEF:fast=kmh,100,GT,kmh,0,IF \
    CDEF:good=kmh,100,GT,0,kmh,IF \
    HRULE:100#0000FF:"Maximum allowed" \
    AREA:good#00FF00:"Good speed" \
    AREA:fast#FF0000:"Too fast"

  • 如图三


  • 这个图像看起来更好。速度用KM/H表示,有一个附加的线条表示最大允许的速度(在我行驶的道路上的最大限速)。我还修改了速度的显示颜色,把它从线条改为区块。


    5、一个更复杂的图例

      现在计算更加复杂一些。对于在限速内的速度衡量方法是:
      检查公里/小时是否大于100 ( kmh,100 ) GT
      如果是,返回0,否则返回公里/小时。 ((( kmh,100 ) GT ), 0, kmh) IF

      对于上述的限速值:
      检查公里/小时是否大于100 ( kmh,100 ) GT
      如果是,返回公里/小时,否则返回0。 ((( kmh,100) GT ), kmh, 0) IF

    我愿意相信RRDtool的绘图功能能够处理的数据没有任何虚拟的限制。我会解释他们是如何工作的,不过看看下面的PNG图像:

    rrdtool graph speed4.png \
    --start 920804400 --end 920808000 \
    --vertical-label km/h \
    DEF:myspeed=test.rrd:speed:AVERAGE \
    "CDEF:kmh=myspeed,3600,*" \
    CDEF:fast=kmh,100,GT,100,0,IF \
    CDEF:over=kmh,100,GT,kmh,100,-,0,IF \
    CDEF:good=kmh,100,GT,0,kmh,IF \
    HRULE:100#0000FF:"Maximum allowed" \
    AREA:good#00FF00:"Good speed" \
    AREA:fast#550000:"Too fast" \
    STACK:over#FF0000:"Over speed"

  • 如图四

  • 第一部分完
    本文从网上转载,本人重新整理和附图,出处未考证。

    阅读内文 Tags: , , ,

    RRDTool 快速学习-思维导图

    8月 14th, 2008 | 18 Comments | Posted in RRDTool, 思维导图 < by Michael Field >

    最近研究了RRDTool,边学边做了笔记;
    参考网址:
    RRD doc
    大作 rrdtool (像 mrtg 的東東) 完全攻略
    画了这张导图,虽然没有涵盖所有的内容,但基本常用的都加入进去了;
    学习rrdtool还是要靠多多实践,反复练习;
    这张图只能给大家一个快速记忆和简单介绍;

    如果需要导图源文件下载;请留言并留下邮箱地址我会发给大家。
    RRDTool 快速学习:

    阅读内文 Tags: , , , , , ,

    BLOG增加了WAP支持

    7月 30th, 2008 | 2 Comments | Posted in 生活随笔 < by Johnny Woo >

    直接访问
    http://www.hiadmin.com/wap/
    使用了WP-T-WAP插件
    不仅能够通过WAP访问
    还能够通过WAP登录后台并且进行文章管理以及留言管理

    自从有了黑莓之后
    发现手机上网的好处还是很多的
    而这个市场.也有待于成熟
    今后手机互联游戏的市场
    也是非常大的一个潜在增长点

    阅读内文

    PERL正则 思维导图

    7月 29th, 2008 | 1 Comment | Posted in Perl, 思维导图 < by Johnny Woo >

    虽然不是很全.但是使用其中的内容
    有80%的工作可以处理了

    preg

    阅读内文 Tags: , ,

    PHP 正则表达式 思维导图

    7月 25th, 2008 | 3 Comments | Posted in PHP, 思维导图 < by Martian Guo >

    源文件下载

    阅读内文 Tags: , ,

    PHP5 OOP 学习 思维导图

    7月 20th, 2008 | 3 Comments | Posted in PHP, 思维导图 < by Martian Guo >

    学习PHP5 面向对象程序设计中的一些内容总结。
    源文件下载:
    php5_oop.mm

    阅读内文 Tags: ,

    BlackBerry查询版本

    7月 17th, 2008 | 1 Comment | Posted in 生活随笔 < by Johnny Woo >

    在BB的主画面, 同时按下ALT+CAP+H

    部分代理BB的知名运营商的代号一览
    100 美国T-Mobile
    102 北美Cingular
    107 加拿大Roger
    114 丹麦/奥地利T-Mobile
    116 香港3 (和记电讯)
    119 法国Orange
    120 英国Vodafone
    123 英国T-Mobile
    124 德国Vodafone
    125 英国/爱尔兰的O2
    128 新加坡StarHub
    141 香港CSL
    142 英国Orange
    144 新加坡Singtel
    146 澳大利亚 optus
    167 新加坡MobileOne
    176 香港数码通Smartone

    完整的运营商ID编号
    100 T-Mobile US
    101 AWS
    102 Cingular Wireless
    103 Nextel
    104 Sprint PCS
    105 Verizon
    106 Alltel
    107 Rogers
    109 BWA (Aliant/Sasktel)
    111 MM02 DE
    113 Telfort
    114 T-Mobile DE/AU
    115 TIM
    116 Hutchison
    117 Bouygues
    118 SFR
    119 Orange_France
    120 VODAFONE (UK)
    121 Telcel
    122 Telstra
    123 T-Mobile (UK)
    124 Vodafone Germany
    125 MM02 UK/IRL/NL
    126 Telus
    127 SMART
    128 Starhub
    129 Telefonica
    130 Swisscom
    131 Cable & Wireless
    132 Vodafone (IT)
    133 Vodafone (ES)
    134 T-Mobile (NL)
    135 Cincinnati Bell
    136 Telefonica_LAM
    137 Vodafone Austria
    138 Vodafone Australia
    139 Vodafone Ireland
    140 Vodafone Sweden
    141 CSL
    142 Orange UK
    143 Vodafone New Zealand
    144 SingTel
    145 Globe
    146 Optus
    147 Orange Mobistar
    148 Vodafone_HU
    149 Bharti
    150 KPN
    151 TIM_Greece
    152 Proximus
    153 Vodafone_Portugal
    154 TIM_Brazil
    155 BT_Mobile
    156 Earthlink
    158 E-Plus
    159 BASE
    160 Dobson
    161 Vodafone_Egypt
    162 Orange_Switzerland
    164 Triton
    165 Maxis
    166 Vodafone_Denmark_(TDC)
    167 MobileOne_(Voda_Singapore)
    168 Vodacom
    169 T-Mobile_PO
    170 T-Mobile_CZ
    171 T-Mobile_HU
    173 MTN
    174 Entel
    175 Amena
    176 SmarTone
    177 TCS
    178 Avea
    179 F100
    180 Turkcell
    181 Partner
    183 Orange_Global
    186 Telkomsel
    188 Vodafone_Greece
    189 USCC
    190 Mobilink
    194 Voda_Luxembourg
    195 Voda_Iceland
    198 Vodafone_CZ
    204 China_Mobile
    205 Movilnet
    209 Sympac
    210 TIM_Argentina
    212 Etisalat
    214 AMX
    215 Telefonica_Venezuela
    217 Orange Romania
    218 KTP
    222 Mobitel Bulgaria
    224 PCCW/Sunday
    227 Mobily
    229 Eurotel
    230 Hutchison Essar

    PS:用后感
    1.铃声清脆响亮.除了山寨机.是最响的一款了.而且最大没有破音.高音低音音质都很好
    2.信号好.通话清晰.办公室在40楼.信号非常差.NOKIA的都会断断续续.并且打一会儿就突然没信号.或者是放在桌上.不一会儿信号变成没有.黑莓就很稳定了.而且接听通话很清晰.
    3.待机长.如果按照一款手机待机4天,那不算长,但是黑莓的超大宽屏还能做到待机4天.实在是NB
    4.屏幕细腻,显示效果好.加上黑莓的抗日照的技术.即便是超大的太阳.还能够看得清.
    5.辐射小.以前的NOKIA 6070.一来信号.屏幕就开始抖.所以我都能预知是来电话还是来短信.看屏幕的抖动就知道了.现在的黑莓放在旁边.来了电话和短信.一点反应都没有.

    WAP上网设定
    1.自带浏览器无法使用CMWAP上网
    2.由于现在CMWAP/CMNET流量合并.所以建议使用CMNET方式.使用OPREA MINI.
    3.选项->高级设置-> TCP -> APN 输入CMNET 保存即可.
    4.8700 4.2.114ROM之后无需激活MDS.所以MDS可以不用去管.设置APN之后就可以了.

    阅读内文

    一个令我感动的人

    7月 16th, 2008 | 2 Comments | Posted in 生活随笔 < by Johnny Woo >

    Paul Potts
    一个走在街上你都不会多看两眼的人
    甚至连平凡都够不上的人
    现实生活中的丑小鸭
    “身材矮胖,长着一口烂牙的土豆”
    当他走上舞台
    评委都没有任何预期的时候
    他给了所有人一个震惊
    当你听到他的歌声的时候
    你才会发现他是真正把歌唱当作生命
    从心底来歌唱的人
    他的歌声和所有的歌手不同
    听到他的歌声,会有种莫名的感动
    在他的初赛中.我们确实看到了一块宝石从石头中诞生的过程
    http://v.youku.com/v_show/id_XNTY1NzU5Mg==.html
    而在最终决赛的时候
    他再一次感动了所有人
    用他的真挚的演唱
    http://v.youku.com/v_show/id_cf00XNTkwNjgzMg==.html
    也许和simon说的一样
    “我们看到了拥有才华却不自知的普通人,平常做着普通工作,然后你却看到了截然不同的光芒。我们发现了宝石,青蛙变成了王子”
    我们每个人其实都拥有特定的才华
    但是平凡的生活却掩盖了我们的闪光点
    Paul让我感动在于
    他的努力,让不可能变成可能.
    让我看见最平凡人的闪光.
    那种执着和真诚.

    阅读内文

    WordPress 2.6 正式版发布

    7月 15th, 2008 | No Comments | Posted in 生活随笔 < by Johnny Woo >

    经过了RC1,2之后
    WordPress 2.6正式版发布
    中文正式版可由此处下载
    http://wpchina.org/downloads/
    令我比较开心的是新版本之中
    引入了类似版本控制的功能
    能够比较新老版本文章之间的变化

    自 WordPress 2.5 以来,WordPress 2.6 的主要更新包括:
    # 文章版本管理功能,将保存你每次所修改的版本,允许你查看(不是编辑)每次修改的版本,可以对任何两个版本进行比较;
    # 允许在文章和页面中显示图片的说明;
    # 在管理面板的设计中,增加了主题分页功能;
    # 在撰写和编辑文章的时候,自动统计字数;
    # 增加里“快速发布”书签;
    # 增加了相册排序功能;
    # 导入/导出文章摘要;
    # 增加了主题预览工具;
    # TinyMCE 编辑器升级到 3.1;
    # 允许两个分类有相同的子分类。

    阅读内文 Tags: , ,