2014年8月 ’ 的文章存档

用chrome浏览器实现手动“自动填充表单”

现在的浏览器基本都有自动填充表单的功能,可以极大的节约我们填写一些常见表单,尤其是登录表单的填写时间。

但是现在随着用户需求的不断发展,很多网页都是使用js来实时进行表单提交的操作,这些操作可能根本不涉及实际的submit操作,所以不会被浏览器截获并记录,这个时候面对一些需要反复重复填写的常见的表格就很郁闷了。

不过还好,这种情况依然是可以实现手动“自动填充表单”的,方法就是利用chrome浏览器的console功能。方法是在要填写表单的页面上按F12,点击console。
阅读全文

程序员生存定律-选公司前要干的事:分类

目录

  1. 给公司分类
    1. 分类的方法
    2. 具体类别的点评外包行业
    3. 具体类别的点评互联网行业
    4. 具体类别的点评外企
    5. 具体类别的点评受非市场因素影响大的公司

在武侠的世界里,帮派本身借助了个人的力量而成其威名,但反过来个人却又因为帮派的力量而被烘托的更高。如果我们把公司类比为帮派,把程序员类比为一众江湖人士,那么帮派和成员间这种异化、同化的过程就几乎在每一个程序员的身上都可以看到。

牛顿说过一句广为流传的话:如果说我比别人看得更远些,那是因为我站在了巨人的肩上。选择在什么样的公司里工作,几乎等价于选择站在什么人的肩膀上。再形象点讲就是选错了公司等价于输在起跑线上。

公司提供的岗位决定了你所接触的技术、人物,进一步决定了你的眼界、能力和人脉,也一定程度上决定了你履历的价值。这些都是对一个人至关重要的东西。

假设说一个人在大学里非常的优秀,以较高的薪资加入了一家做生僻技术的公司,5年后,这家公司倒闭了,这时候这个人可能会陷入困境,甚至变的不如很多大学里成绩比他差很多的人。这类事情往往并不是因为个人不努力,往往是因为选择不慎而把自己给憋到死角里了。

每个人要想争得选择权往往并不容易,大学四年的努力挣来的选择权却可能在一时不慎下毁于一旦。这种选择往往很难很精确,但有几个基本项目还是可以考察的。这些项目将在下面各节里逐步展开。

 

给公司分类

公司是一个含混的词,要想弄清楚公司对人生的影响,那么先要给公司分类。一说到分类大多数人可能首先会想到好公司或者坏公司,但其实这是分类的结果,在好和坏背后往往都有着一打的因素来支撑一个公司是好还是坏。不了解这些背后的因素,单纯根据一个笼统的好或坏实际上是很难判定一个公司是不是适合自己的。

 

 分类的方法

一个人要想做对选择,一要有选择权,二则要了解待选项。在这里待选项就是公司的类别。可以有非常多的视角对公司进行分类,这里主要列举和职业发展紧密相关的几个。

 

  • 分工所处位置的视角

 

帮派间是有食物链的,比如东方不败的魔教就凌驾在黄河帮之上。还不用东方不败或任我行这种大头目出来,只是盈盈就可以让这些帮派鞍前马后了。

类似的关系也存在于公司与公司之间,但这时这种关系则是有产业分工时公司所处的位置所决定的。即使我们不用心去做非常详细的调查,也可以看到iPhone生产背后的三层结构:苹果 + 富士康 + 元器件供应商。

这种链条的一个根本特征是上游的企业人少但分享的利润更高,当然其承担的创新风险也更大。

在这里无意对这种分工模式是否合理进行更多的探讨,想强调的则是,这是影响个人工作和发展的一个很重要的维度,不考察是对自己不负责任的。

商业社会中的公司所处的位置可以做简单理解:筹码多的,控制权、发言权大的在上端。比如:付钱的在上端,靠别人给钱的在下端。垄断的或接近于垄断的在上端,被垄断的在下端。比如说:公司A把业务分包了给公司B,那么公司A在食物链的上端,公司B则在下端。比如说:公司G直接面向客户,占有了市场份额60%,其他公司分享其他的40%,那么G在上端,其他公司在下端。在这个视角下可以把公司分为发包的公司,接包的公司。从分工的角度看,一个公司所处的位置越靠后,其利润空间可能也就越微薄。

与这类分工相关的场景还有很多,比如:母公司与子公司、发包的和接包的、做操作系统的和必配指定操作系统的硬件厂商、做电商平台的和各个产品制造商等等。

从选择公司的角度,应该尽可能考虑上游的公司,因为这种分工上的位置对成长空间和收入会有比较大的影响。

 

  • 行业的视角

 

在这个视角下,公司往往被分为电信、金融、互联网、ERP、游戏、嵌入式等。很难讲那个行业相对另一个行业具有绝对优势,但有两点需要额外注意:

一是软件是不是公司的主营业务对发展空间往往会形成一定限制。制造业的工厂里也做软件,但不太可能选几个做软件的去做厂长,金融公司里程序员也很难发展成为总裁。

另一点是有的子行业处在成熟期,发展相对平缓,而有的子行业则处在告诉发展期,发展很迅速。后者机会更多,年轻人尤其是容易在全新的领域出头。这是因为在全新的领域中没有既定的利益格局,所有人都在同一起跑线上。

从选择公司的角度看,无疑的要尽可能选选主营是软件并在高速发展子行业的公司。而之所以选择行业非常重要,根本原因是一旦选择了那个行业,那很可能一辈子就会干这个了。做金融的很难去做互联网,做互联网的也很难去做嵌入式。

 

  • 时间轴的视角

 

从生命周期来看,公司可以分为发展期的公司,成熟期的公司和衰落期的公司。

从选择公司的角度看,极力要避免的是衰落期的公司。识别衰落期的公司简单的办法是财务数据和市场地位。已经赤字的或市场地位已经排位靠后的都是相对比较危险的公司。

而选择发展期的公司还是选择成熟期的公司上,要依赖于个人选择。通常来讲选择成熟度较高,市场地位较高的大公司会比较好,便于做技术积累。

 

  • 核心竞争力的视角

 

有的公司是核心竞争力偏向于销售渠道,有的则是技术,有的则是两者并重。

比如对于信息管理系统销售渠道就比较重要。从这个视角看,有核心竞争力的公司总是比没有的更好。而在有核心竞争力的公司里,技术导向的公司无疑更适合程序员。前面曾经提到过,非技术导向的公司里,技术路径通常会短。比如说:只做信息管理系统的公司技术路径通常不会长。

 

  • 地域的视角

 

从这个视角可以把公司分为一线城市的公司,二线城市的公司。地域主要影响可流动范围。

在2012年曾经发生了一起很有点影响的事情:摩托罗拉移动因为经营的原因,关闭南京摩托罗拉移动,裁掉了整个团队,这个时候南摩员工联合起来,一起拒绝在离职协议上签字。员工和公司前后经历多轮谈判,员工方坚持不让步,其中的一个关键理由就是:500多人一起在南京找工作非常困难。与此相对应的则是,同样是裁员,但北京方面所有员工皆较快签字走人。

这一事请本身的是非很难去评论,但南京和北京员工的不同反应却可以一定程度上折射出城市(或者说地域)所带来的影响。

南京已经是非常发达的城市,但500人的队伍已经会担心很难被吸收掉,在北京恐怕这500人就掀不起什么波澜。这很好理解,一升水倒在矿泉水瓶子里,会溢出来,但如果倒在小河里,就几乎等价于不存在。但这种城市对人员的容量对可流动性、对发展空间却会形成一种刚性的制约。

当一个人选择了某个公司的城市,也就选择了其背后隐含的一切,对于大多数人而言与城市的关联度将会随着时间的流逝而越来越高(这体现在学校、房子等方面),所以适当对此进行考察是有必要的。

总的来看越是期望快速发展,越是希望开创一番事业,对自己越是有信心,越适合到一线城市发展;而相应的越是希望安稳,越是侧重生活和工作的平衡,二线城市就更适合一点。

 

  • 公司文化的视角

 

如果去翻阅管理相关的书籍比如《基业长青》,《赢》等,你就会发现公司的文化被放在一个非常高的位置上。极度优秀并可存续的组织无疑是需要一种共同的价值取向来镇压气运的,但这和现实其实有点远。现实中的很多公司更可能是规则和个人双重驱动,而没有什么明显的文化特征。所以这种分类视角被放在了最后。

很难讲那种企业文化一定会成功,但如果从负面来解读文化的话,有一种文化却几乎一定会使公司挂掉。这种文化可以叫做蠹虫文化。典型特征是:一盘散沙,所有人都一起糊弄工作,工作上的事情能推就推。这类公司几乎一定会比较快的走向毁灭,除非是有某些垄断性的因素可以确保其生存。

 

具体类别的点评:外包行业

 

很难笼统的讲外包行业好或不好,有前途没有前途,因为外包也有很多层次。

假设说一家公司把一款手机从设计到制造的所有环节都外包给一家公司,只是最后自己进行贴牌,那么对于承接这种外包业务的公司而言,单纯从技术角度看与自己进行产品开发并无差别。

假设说一家银行把需求之外所有的业务都外包给一家公司,那么对于承接这种业务的外包公司而言,就更像是银行的IT部门。

上面这类外包与特定企业的核心业务相关联层次是比较高的。与此相对应,外包业务的层次可以逐级降低,比如:同样是银行业务,在外包过程中也可以把基础设计都完成之后,把量较大,但没有技术难度的编码工作外包给其他公司。这类工作往往是由成本控制而触发,所以在分工链条上所处的位置越低,工作越容易辛苦,且收入较低。

这点上可以看一点数据,当前国内最大的外包公司是文思海辉,根据公开数据,文思海辉在2012年总计有员工23270名,总收入是3.59亿美元,大致是22.7亿人民币,平均每人年创造不到10万元的收入。与之相对应,腾讯2012年总计有员工24160名,总收入438.9亿人民币,平均每人年大约创造181.6万元。这种数据大致可以说明从分工链条的角度看,国内的外包公司仍然有很大的提升空间。

那究竟加入外包公司是怎么样的一种选择?

这不能说是很差的选择,但如果让我来排个顺序则首先是知名的独立软件开发商(ISV),其次是前景比较好的独立软件供应商,接下来才是做高端外包业务的公司,做低端外包业务的公司大多时候不是什么好的选择,因为对个人成长不利。

 

具体类别的点评:互联网行业

如果说IT行业是朝阳行业,那互联网绝对是朝阳中的朝阳。在这个领域中我们看到了门户网站,看到了搜索引擎,看到了社交网络,看到了各种云平台和大数据,但故事应该远未终结。未来究竟出现什么样的产品很难预测,但未来的产品会和互联网紧密相关这点错的可能性很低。

所以在行业选择上加入一家以互联网业务为核心的公司是不错的选择,从发展的角度看很同等条件下要比加入通信、金融这样的行业更有优势一点。

假如一个人想创业,那这就更是一种必然选择,互联网是智力密集型的工作,需要一定资本,但对资本的要求并不高,几个人拉到风险投资后,假设网站开始创业怎么也比研发路由器开始创业更适应于一般人一点。

这里面在分类上有一个微妙的地方需要注意,搜索引擎、大数据、社交网络可以认为是互联网,但挪到互联网上的ERP也还是ERP,不能算是互联网行业,这个差别很大,考察公司的时候要注意。

具体类别的点评:外企

按国别来区分企业,误杀的几率很大。但毕竟同一国家的企业还是有些共通的特征,因此这里择取两个视角做一个简单的分析。一个视角是透明天花板的高低;一个则是规范程度。

什么叫透明天花板?职业路径被封死在某个高度以下,但这种封锁在可见制度层面又不存在,这就是透明天花板,往往是做到一定高度的人对此感受的更为清晰。平心而论,透明天花板在那里都有,本身倒不一定就具有贬义。但不同企业中其高度确实不同。如果要排个次序,那就是是国内企业高于欧美企业,欧美企业高于日韩企业。

理论上讲一个人在国内企业里的发展是不受高度限制的,可以想见联想,阿里巴巴未来的接班人还是个中国人,空降个黑人或白人CEO的可能性不大。而欧美企业相对开放,至少在大中华区,高层人士里还主要是华人,但想再往上走则很艰难。这可以从李开复老师的自传里读出些端倪,李老师无疑非常优秀,但从自传里绝对看不到成为微软或者Google CEO的可能性。高晓松老师在优酷上做了个很有意思的节目叫《晓说》,里面更是很直接的谈到这一点:在好莱坞就是犹太人升迁快,华人虽然收入高,但就是有天花板,要很辛苦工作来维持自己的收入。

在日韩企业这点上就收的比较紧一点,各个子公司的负责人基本上会选本国人。

所以假如说你认为自己非常优秀,并且期望无限的发展空间,那么优选本土公司(也许注册地不是中国)是对的,虽然它们的CEO没准也是美国华裔,虽然它们可能会有一些负面的报道,虽然不管怎样成为CEO都是一种可能性非常低期望,但至少存在着这种可能性。

顺道说一句,从这个角度上看,我们真有理由希望这个国家和对应的企业强大,只有如此,大多数和本土的优秀人才会有更加光明的未来。

从规范程度来讲,越是本土企业,反而可能会越差一点,这也符合知己知彼百战不殆原则,虽然有点黑色幽默。而跨国企业往往是些大公司,在规范性这点上都会非常的注意。我个人倒是感觉,只要没滑落到无赖公司的地步,稍微有点不规范也是可以接受的,犯不上刀兵相见。所以说单纯的希望成为优秀的工程师,那么优秀的外企仍然是个不错的选择。

具体类别的点评:受非市场因素影响大的公司

非市场因素影响大的公司是个诡异的类别,完全是我杜撰出来的,这个类别的公司特征是可以因为特别的机会(某个大单或某项特别资助)在短时间蓬勃发展,但接下来又很可能会在短时间轰然倒下。在IT业中最典型的例子托普,有点年纪的IT人应该还记得这家公司。

我个人倾向于认为应该规避这类公司,因为这类公司通常并不会把精力放在产品的开发上,而会放在非市场因素的经营上,这对个人成长并不是很有利,尤其是走技术方向的人。一旦公司出现危机,那么个人反倒可能会因此陷入困境。

上面的文字有点含糊,为了把事情说的更清楚一点,我们来看一个历史上的故事。

中国人里面不知道胡雪岩的恐怕不多。胡雪岩出身不高,几近于白手起家,先后得王有龄、左宗棠之助迅速成为显赫一时的红顶商人。百度百科上对这段往事的记载是:

他从扫地、倒尿壶等杂役干起,三年师满后,就因勤劳、踏实成了钱庄正式的伙计。正是在这一时期,胡雪岩靠患难知交王有龄的帮助,一跃而成为杭州一富。

王有龄,字英九,号雪轩,福建侯官人。在道光年间,王有龄就己捐了浙江盐运使,但无钱进京。后胡雪岩慧眼识珠,认定其前途不凡,便资助了王五百两银子,叫王有龄速速进京混个官职。后王有龄在天津遇到故交侍郎何桂清,经其推荐到浙江巡抚门下,当了粮台总办。王有龄发迹后并未忘记当年胡雪岩知遇之恩,于是资助胡雪岩自开钱庄,号为阜康。之后,随着王有龄的不断高升,胡雪岩的生意也越做越大,除钱庄外,还开起了许多的店铺。

庚申之变成为胡雪岩大发展的起点。在庚申之变中,胡雪岩处变不惊,暗中与军界搭上了钩,大量的募兵经费存于胡的钱庄中,后又被王有龄委以办粮械、综理槽运等重任,几乎掌握了浙江一半以上的战时财经,为今后的发展奠定了良好的基础。

 

胡雪岩之所以可以迅速倔起,除了得益于王有龄之外,另一个人也起到了重要的作用,这个人就是左宗棠。1862年,王有龄因丧失城池而自缢身亡。经曾国藩保荐,左宗棠继任浙江巡抚一职。左宗棠所部在安徽时晌项已欠近五个月,饿死及战死者众多。此番进兵浙江,粮饱短缺等问题依然困扰着左宗棠,令他苦恼无比。急于寻找到新靠山的胡雪岩又紧紧地抓住了这次机会:他雪中送炭,在战争环境下,出色地完成了在三天之内筹齐十万石粮食的几乎不可能完成的任务,在左宗棠面前一展自己的才能,得到了左的赏识并被委以重任。在深得左宗棠信任后,胡雪岩常以亦官亦商的身份往来于宁波、上海等洋人聚集的通商口岸间。他在经办粮台转运、接济军需物资之余,还紧紧抓住与外国人交往的机会,勾结外国军官,为左宗棠训练了约千余人、全部用洋枪洋炮装备的常捷军。这支军队曾经与清军联合进攻过宁波、奉代、绍兴等地。 胡雪岩是一位商人,商人自然把利益放在第一位。在左宗棠任职期间,胡雪岩管理赈抚局事务。他设立粥厂、善堂、义垫,修复名寺古刹,收硷了数十万具暴骸;恢复了因战乱而一度终止的牛车,方便了百姓;向官绅大户劝捐,以解决战后财政危机等事务。胡雪岩因此名声大振,信誉度也大大提高。这样,财源滚滚来也就不在话下了。自清军攻取浙江后,大小将官将所掠之物不论大小,全数存在胡雪岩的钱庄中。胡以此为资本,从事贸易活动,在各市镇设立商号,利润颇丰,短短几年,家产己超过千万。

 

没仔细考证过,也许上面的描述与历史有所偏差,但其崛起与左宗棠有紧密关联这一点,大致不错。胡雪岩成功的快,败落的也很快。败落的原因很多其中关键的一条就是在李鸿章与左宗棠的内斗。从发迹到败落前后大概20年。但在现代这种变化节奏因为某些原因变快了,往往不要20年,托普走完这条路用了10年左右,未来就可能会更短。从这个角度看,这类公司是不适合纯粹的工程师的。

文章来自:http://blog.csdn.net/leezy_2000/article/details/38377735

master_pos_wait函数与MySQL主从切换

背景

  主从切换是高可用MySQL架构的必要步骤(即使用不发生,也要有备无患)。一般设置为双M(M1、M2),假设当前状态为写M1,而M2只读,切换的大致流程如下:

1、  停止应用写M1,将M1设置为只读
2、  检查M2的slave status直到赶上M1
3、  将M1设置为可写

其中在第2步细化为
a)       在M1上show master status;得到binlog位置P,因为已经设为只读,不会变化
b)       循环检测M2上的执行位置,若未到P,则过几秒再查。循环直到从库追上。

这里介绍一个函数用于简化步骤b。
阅读全文

如何捕获和分析 JavaScript Error

前端工程师都知道 JavaScript 有基本的异常处理能力。我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常。但估计绝大多数前端工程师都没考虑过收集这些异常信息。反正只要 JavaScript 出错后刷新不复现,那用户就可以通过刷新解决问题,浏览器不会崩溃,当没有发生过好了。这种假设在 Single Page App 流行之前还是成立的。现在的 Single Page App 运行一段时间后状态复杂无比,用户可能进行了若干输入操作才来到这里的,说刷新就刷新啊?之前的操作岂不要完全重做?所以我们还是有必要捕获和分析这些异常信息的,然后我们就可以修改代码避免影响用户体验。

捕获异常的方式

我们自己写的 throw new Error() 想要捕获当然可以捕获,因为我们很清楚 throw 写在哪里了。但是调用浏览器 API 时发生的异常就不一定那么容易捕获了,有些 API 在标准里就写着会抛出异常,有些 API 只有个别浏览器因为实现差异或者有缺陷而抛出异常。对于前者我们还能通过 try-catch 捕获,对于后者我们必须监听全局的异常然后捕获。
阅读全文

如何用一个糟糕的执行流程毁掉你的创业公司

wrong-way.jpg

我是技术创始人经营自己公司的坚持支持者,但是技术创始人一直以来的一种做法给自身企业造成了极大的伤害,这种做法就是把预算编制过程搞砸。是的,编预算。很荒谬吧。怎么会这样?为什么说对于工程师来说这个问题特别大?

首先我会以自己的反面事例现身说法。我们的销售增长迅速无比,以至于我们面临的最大问题是无法应付那么多想要注册 Loudcloud 的客户。为了扩大能力和先于竞争对手占领市场,我和我的团队努力规划好一切必要的活动。接下来,我布置了子目标和活动给每一位职能负责人。我跟领导团队一起分别为每个目标设定了领先和滞后指标,设定确保了目标的可衡量的。然后我告诉团队找出实现这些目标需要做些什么,然后返回所需的人员和预算。最后,我按照业界基准(大多有削减)对这些需求进行了调整,通过这样做出了一个自认为行得通的计划。
阅读全文

8种提升ASP.NET Web API性能的方法

ASP.NET Web API 是非常棒的技术。编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能。

在本文中,我将介绍8项提高 ASP.NET Web API 性能的技术。

1) 使用最快的 JSON 序列化工具

JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响。 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了。

我测量过,Web API 的性能提升了20%左右。 我强烈建议你去尝试一下这个序列化工具。这里有一些最近的流行序列化工具性能的比较数据。

c1

 

更新: 似乎It seams that StackOverflow 使用了他们号称迄今为止最快的 JSON 序列化工具Jil。 一测试数据可参见他们的GitHub page Jil serializer.

2)从DataReader中手动串行化JSON

我已经在我的项目中使用过这种方法,并获得了在性能上的福利。

你可以手动地从DataReader创建JSON字符串并避免不必要的对象创建,这样你就不用从DataReader中取值并写入对象,再从这些对象中取值并使用JSON Serializer产生JSON.
阅读全文

Linux 与 BSD 有什么不同?

01

 

Linux 和 BSD 都是免费的,开源的,类Unix系统。他们甚至使用很多相同的软件。他们看上去简直就像是一个操作系统,那么,它们有什么不同吗?

其实,两者之间的不同,远远超出了我们下面提到的这些,尤其是在构建完整操作系统和许可授权的哲学思想上,更是相差甚远。通过这篇短文将可以简单的了解它们之间的不同。

基础

许多人所称的“Linux”实际上不是 Linux。Linux 从技术上说只是 Linux 内核,典型的 Linux 发行版则包括了 Linux 内核和许多软件。这是为什么 Linux 有时被称为 GNU/Linux。事实上,许多在 Linux 上使用的软件同样也在 BSD 上使用。
阅读全文

9个最好用的在线编译/调试工具

本文要推荐9个最好用的在线编译器,以下顺序不按排名先后:

1、ideone

可以在线编译、调试C/C++,JAVA,PHP,Python,Perl,以及其他40多种编程语言。

a1

 

官方网站:www.ideone.com

2、codepad

codepad.org是一个提供在线编译/调试工具的网站,你可以将代码复制到这里,然后提交运行,就会生成一个URL连接,将此URL连接通过邮件发送至你的好友来求助。codepad还提供移动设备版,让你可以随时分享代码。

a2

 

官方网站:www.codepad.org

3、comeaucomputing

一个测试驱动的C/C++在线编译器。

a4

 

官方网站:www.comeaucomputing.com/tryitout

4、compilr

一个在线的编译器和IDE,可以编译C,JAVA,C#和C++

a4

 

官方网站:www.compilr.com

5、jsfiddle

这是一个在线调试Javascript、CSS、HTML和CoffeeScript的免费工具。

a5

 

官方网站:www.jsfiddle.net

6、CodeRun(译者注:已无法访问)

也是一个在线编译器和IDE工具

官方网站:www.coderun.com/ide

7、botskool

一个在线C和C++编译器,并且可以将你的问题直接发送到论坛中求助。

a7

 

官方网站:www.botskool.com/online-compiler

8、GCC Explorer

基于WEB的C++编译器,有非常完美的输入输出界面,并且它是开源的。

gcc

 

官方网站:gcc.godbolt.org

9、djgpp

如果你想调试一段DOS程序,那么这个在线调试工具就非常有用。

djgpp

 

译文链接:http://www.codeceo.com/article/top-10-online-compiler.html
英文原文:Top 10 Online Compiler
翻译作者:码农网 – 小峰

2种JAVA乐观锁的比较( NonfairSync VS. FairSync)

本文从成员函数和锁的获取这2个角度, 比较这2种锁. 发现区别其实不大.只有在阻塞队列为0的时候才有些许区别. 如果分析的不对,请斧正.

稍后如果有时间,准备使用实例来测试一下.

成员函数的比较

从下面的截图可以清晰的看到除了构造函数不一样,其他的都一样.重点是都只有lock() 和 tryAcquire(), 那从另一个角度也可以说明,只有锁的获取是不一样的,锁的释放和从阻塞队列选取线程来激活的方法是一样的.

b1
阅读全文

换个角度看GlusterFS分布式文件系统

GlusterFS(GNU ClusterFile System)是一个开源的分布式文件系统,它的历史可以追溯到2006年,最初的目标是代替Lustre和GPFS分布式文件系统。经过八年左右的蓬勃发展,GlusterFS目前在开源社区活跃度非常之高,这个后起之秀已经俨然与Lustre、MooseFS、CEPH并列成为四大开源分布式文件系统。由于GlusterFS新颖和KISS(KeepIt as Stupid and Simple)的系统架构,使其在扩展性、可靠性、性能、维护性等方面具有独特的优势,目前开源社区风头有压倒之势,国内外有大量用户在研究、测试和部署应用。

aaa

 

当然,GlusterFS不是一个完美的分布式文件系统,这个系统自身也有许多不足之处,包括众所周知的元数据性能和小文件问题。没有普遍适用各种应用场景的分布式文件系统,通用的意思就是通通不能用,四大开源系统不例外,所有商业产品也不例外。每个分布式文件系统都有它适用的应用场景,适合的才是最好的。这一次我们反其道而行之,不再谈GlusterFS的各种优点,而是深入谈谈GlusterFS当下的问题和不足,从而更加深入地理解GlusterFS系统,期望帮助大家进行正确的系统选型决策和规避应用中的问题。同时,这些问题也是GlusterFS研究和研发的很好切入点。

1、元数据性能

GlusterFS使用弹性哈希算法代替传统分布式文件系统中的集中或分布式元数据服务,这个是GlusterFS最核心的思想,从而获得了接近线性的高扩展性,同时也提高了系统性能和可靠性。GlusterFS使用算法进行数据定位,集群中的任何服务器和客户端只需根据路径和文件名就可以对数据进行定位和读写访问,文件定位可独立并行化进行。

这种算法的特点是,给定确定的文件名,查找和定位会非常快。但是,如果事先不知道文件名,要列出文件目录(ls或ls -l),性能就会大幅下降。对于Distributed哈希卷,文件通过HASH算法分散到集群节点上,每个节点上的命名空间均不重叠,所有集群共同构成完整的命名空间,访问时使用HASH算法进行查找定位。列文件目录时,需要查询所有节点,并对文件目录信息及属性进行聚合。这时,哈希算法根本发挥不上作用,相对于有中心的元数据服务,查询效率要差很多。

从我接触的一些用户和实践来看,当集群规模变大以及文件数量达到百万级别时,ls文件目录和rm删除文件目录这两个典型元数据操作就会变得非常慢,创建和删除100万个空文件可能会花上15分钟。如何解决这个问题呢?我们建议合理组织文件目录,目录层次不要太深,单个目录下文件数量不要过多;增大服务器内存配置,并且增大GlusterFS目录缓存参数;网络配置方面,建议采用万兆或者InfiniBand。从研发角度看,可以考虑优化方法提升元数据性能。比如,可以构建全局统一的分布式元数据缓存系统;也可以将元数据与数据重新分离,每个节点上的元数据采用全内存或数据库设计,并采用SSD进行元数据持久化。
阅读全文