你的自我感觉会在很大程度上影响着别人如何看待你。在很多人前不发言,怕被人说自己笨,其实你低估了自己的承受力;当你过分注意你想要得到的东西,脑子里就会有很多理由你为什么需要它,这样会导致你细想自己的弱点;坐在前排,并不一定能带来多大好处,但它确实能表明你已经克服自己的恐惧。如果您正在寻找培养自信的方法,那这篇文章一定不能错过。-psytopic.com
自信就是不同于“不可阻挡”和“手足无措”之间的一种感觉。自我感觉深刻影响着别人对你自己的认知。认知是这样的事实—你越自信,越有可能成功。
尽管影响自信的很多因素都不能受人控制,但是你也可以坚持做一些事情以建立自信。采用以下10种策略,你可以获得激发潜能所需的精神优势。?
尽管衣着不能决定一个人,可衣服的确影响人的自我感觉方式。没有人比你自己注意你的外表。当你的衣着看起来不太好时,你的行事方式以及和别人交流的方式就会改变。因而你可以通过好好打理自己的外表来增加自己的优势。很多情况下,常沐浴、修胡须,穿干净的衣服以及换个最新款式的打扮能帮助你取得重大的进步。
但这不是说要你花很多钱在穿着上。重要的准则便是“花两倍足已,买一半也够”。与其买一大堆廉价衣服,不如多挑挑,只买一些高品质的东西。要长期坚持这种减少开销策略,因为相比廉价衣服,好的衣服不容易穿坏也不容易过时。少买点衣服还可以减少你橱柜的混乱程度。?
告诉别人一个人自我感觉怎么样的最简单的方法就是看她走路。慢?疲倦?痛苦?或者精力充沛并且有目的?有自信的人走路都很快。他们知道自己要去什么地方,知道要去见什么人,并且有重要的事情做。即使你不着急,你也可以通过脚步的活力来增强自信。走快25%可以让你看起来更加自信,也让你自我感觉更加自信。?
同样,人们的体态都有一个故事。耷拉着肩膀、无精打采的人看起来缺乏自信。他们对自己所做的事情没有热情,也不认为自己很重要。拥有好的体态,你自然而然就会感觉更自信。挺胸抬头,眼睛直视前方。你将给人一个好的印象,立马觉得更警觉更有力量。?
建立自信最好的方法是听励志的演讲。很不幸,听一个好的演讲的机会难得。但是你可以通过商业广告来填补这个空缺。写一个约30到60秒的能表达你力量和目标的演讲稿。一旦你感觉需要信心助你向前时,就在镜子面前大声朗读(如果你喜欢的话也可以在心里读)。?
当你过分注意你想要得到的东西,脑子里就会有很多理由你为什么需要它。这样会导致你细想自己的弱点。避免这点最好的方法便是一直持有一颗感恩的心。每天花一些时间在脑子里列出你所需要感恩的所有事情。回想自己过去的成功,独有的技能,来自各方面的爱,还有积极的动力。你可能会为自己拥有这么多适合自己的事物而感到震惊,更会有动力朝成功迈向下一步。?
当我们消极地评价自我时,通常情况下我们也会喜欢对他人闲言闲语甚至充满侮辱,将这种消极的感觉推己及人。为打破这种消极的循环,我们需要养成一种赞美他人的好习惯。不要对别人造谣中伤,而应该称赞身边的人。在这个过程中,你将变得招人喜欢,还能建立自信。通过看到旁人最好的方面,你将直接激发自己最好的一面。
在学校,办公室以及世界其他的公共集会中,人们总是争取坐到屋子的最后面。大多数人喜欢后排因为他们害怕被人注意。这表明人们缺乏自信。如果你坐在前排,你可以抛开这种毫无理性的恐惧并建立自信。你也将更容易被在前面说话的重要人物注意到。?
在团队讨论中,很多人从来不发言因为他们害怕别人觉得自己说的话让人觉得他们很笨。这种恐惧并不对。一般而言,人们的承受力比想象的更强。事实上大多数人都在和同样的恐惧做斗争。只要努力在每个团队讨论中大声说出自己的想法,你就可能成为一个更好的公共场所发言者,对自己的想法也会更自信,并会被公认为同类的领导。?
沿着个人外表的思路,能推出健康的身体对自信影响甚大。如果你身材走样,你会感觉不安全,且精力不足。通过体育锻炼,能塑造体型,让自己充满精力,积极地做好事情。科学地锻炼身体不仅让你感觉更好,还能在未来的日子创造积极的动力。?
我们太过注重自我欲望的满足。我们太过关注自我而很少关心他人的需求。如果你停止考虑自己且专注于自己对这个社会的贡献,你就不会如此担心自己的缺点了。这样可以增加自信,能让你最有效地为社会做贡献。你对社会的贡献越大,你所获得的个人成就和赞誉就越多。
? 规律的生活没有多长时间,现在感觉好像有又点乱了,我很讨厌这种感觉,我还是希望自己忙了一点,生活过的有序一点,有一个目标让我去努力,现在的状态有点低迷了。上班也不太清楚要做什么?我想如果我在找工作的划我一定要找一个,计划性好的,规划能力强的,执行能力强的,有想法的,有激情的公司。最好能让我每天都生活在梦想里,至少让我知道我今天是在为了我的梦想而奋斗!!!!!让我对未来充满自信!!!!!!
爱情到底是什么?我的幸福又在那里啊!不知道是不是我太挑剔了,对于爱情太苛刻了,我总是希望爱情是最单纯的东西,透明的像水,我不希望他有其它任何的杂质?不是为了结婚,也不是因为一时的孤独,更不能是因为一时的冲动.或许这就是梦想,可能永远也实现不了的梦想,但是在我心中它还是最美的东西,永远都会是我追求的最终目标.
????? 有时就想,为什么现实中的爱情要夹杂着这么多的东西呢?或者爱情对他们来说就附带品.我有时会幻想有一个女人为和我在一起,她宁愿放弃她的家人,不顾所有人的反对和我一起私奔.那么这个女人就应该是一个让我幸福一生的女人.我会爱死她一辈子的.为了他我也可以放弃我的一切,哪怕是自己的生命.
???? 这一切都是很虚幻的东西,可是我想要知道她在那里,如果人的一生中经历了这样的事情,或者说遇到了这样的一个人,那该是多么幸福的事情.
??? 幸福在那里?
规划是GTD的重要一部分,在“GTD的好处与如何在GTD系统中落实这些目标”中已经谈到这个问题,这里不再详述。今天主要谈的是如何去做规划,这是很多人都非常关心的问题,我结合自己读过的相关书籍和实践经验,对这个问题进行一下系统的探讨。
首先我要说的是,人生并不存在所谓的“规划”,人生有一个梦想,却没有规划,因为人生很难规划,您可以有一个梦想说我要成为百万富翁,或者是成为世界首富,或者如何如何,那您也会有个大概的途径来如何实现这一梦想,但是您能够把它们规划出来吗?个人认为不能,或者与其说不能,倒不如说没有什么意义。因为所谓成功(这里的成功视达成自己的梦想为成功)所需要的因素实在太多,成功受外界太多的影响,您无法预测未来五十年的世界状况,中国环境,那么您规划五十年后自己的生活方式又有多大的意义呢?
为什么要了解自己的人生梦想呢?因为它将给你巨大的动力和激情,想一想你在做一件无聊的事情和一个为了实现自己梦想的事情之间动力上的差别,您就可以很容易的明白了。同时人生梦想是做后续规划的必要基础,它是你的目标,您的十年规划是为了实现这个梦想。当然还有很多的好处,比如您现在想要跳槽,但是不知道应该选取哪一个行业和公司,有了人生梦想这个决策就会变得很简单了!
所以,我说,规划的第一步,是找到人生的梦想!人生梦想不难找到,对于很多人来说这根本就不能算作一个什么问题,他从初中二年级开始就有一个梦想,到现在也没有改变过(有这种人,比如我,汗……),所以不用去寻找(但需要完善),但是对于一些人来说,这就需要一些途径来帮助自己。下面我们先来探讨一下这个途径。另外附加一点,这里的梦想要包含所有的方面,事业、生活、情感、社会责任、家庭、休闲娱乐等等。
首先我建议从《如何掌控自己的时间和生活》中提到的那三个经典问题中的两个开始:
“我的人生梦想是什么?”和“如果我只有六个月的生命我会如何安排?”
(后一个问题书中的说法是如果六个月后你将被雷劈死,你会做什么?我头脑中的第一反应是,买个质量好的避雷针,天天呆在脑袋上……#$%^&)
在这里我要说明的是,回答这类问题所采用的方法我会一直用到一个词汇“头脑风暴”或者“脑力激荡”,这是一种方法,您可以简单理解为拿起笔,不停的写,不停的写所有和问题有关的答案,或者是为了达到提到的目标所可以进行的事情,不要分析,不要判断,不要评估,只是写,或者是使用MindManager软件来不停的录入这些东西。
用头脑风暴来回答第一个问题“我的人生梦想是什么?”,这个问题无所谓对错,去TMD道德观,如果你就是喜欢钱,您就写上去我人生目标就是有几千万,如果你就是喜欢什么别的东西,尽管写上去,反正您又不会拿出来公布!写完之后就是一个检查的过程,看看它们真的是对于你来说重要的吗?真的像想象中那样重要吗?或许您会突然发现有些东西并不重要,有些东西重要却一直被忽略了。
之后用同样的方法回答第二个问题“如果我只有六个月的生命,我会如何安排?”。回答这个问题的目的并不是真的告诉你自己六个月内自己要做什么,而是迫使你问自己什么才是对你来说真正重要的!
当回答完第二个问题后,拿出它的答案,与第一个问题的答案相对照,相信您一定会受到很大的启发,更为清晰的看到什么对于你来说什么是更加重要的。
OK,到这里,第一步已经基本完成了,也就是说人生梦想已经基本确立,但是对于第一次做人生梦想规划的朋友来说,我建议用一个月的时间规划四次,也就是每周进行一次规划,这样避免遗漏某些对您来说重要的东西。当然每年一次的重新审视是必须的。
下面开始第二步:十年规划!
十年规划是整个规划过程的重中之重,因为它是最切实可行的,它是与我们现实的生活密切相关的,它不像梦想只能提供一个较虚的东西,它需要我们踏踏实实的向前走。
十年规划的第一步骤,是分解人生梦想。现在同样采用头脑风暴的方式来分解人生梦想,写下所有你觉得可能对实现人生梦想有帮助的行动、小目标、资源等等。
第二步骤,组合十年规划。为什么叫“组合”?等下您就知道了!现在关于人生梦想的东西已经被分解了,那么就开始一个简单的整理,把它们按照实现的顺序和条件优先性整理出一个结构,这是我建议使用思维导图的原因,因为它提供了非常优秀而便利的排序整理方式,可以极大的节省时间。当你把头脑风暴后的产物进行整理和组成结构后,您就可以很清楚的看到要达到人生梦想所需要经历的大概途径,而这个时候,您就可以非常简便的找到十年后做到一个怎样程度将会对人生梦想的实现有巨大的帮助!把它们拣出来,您就组合成了十年规划的目标。
第三步骤:十年规划的分解。在这里我要强调一点,在这一步骤内我个人建议不要引入时间概念,虽然是十年规划,但是不要引入时间概念!尤其是对于年轻人来说,至于原因“规划”的下一步会说清楚。继续头脑风暴,继续组织分解,一直分解到一个有一个的小目标或者是Actions,这里有没有达到Acitons的程度并不重要,因为还有后面一步。
第三步,也是规划的最后一步:疯狂梦想!
我一般建议要有这样的一步,尤其是对于年轻人来说,因为当你二十五岁大学毕业,步入社会,您在短时间内可以有很大的飞跃,可以很多变化的机会,如果不把握住,实在有些对不起自己。
所谓疯狂梦想就是把十年规划压缩为五年!
很简单,是吧?呵呵,在这里引入时间概念,五年时间并不长,当你把一个五年后的目标写在那里,你自然会清楚的知道今后五年每一年需要达到一个怎样的程度,写上去30岁(假设五年后您30岁)的目标,然后是29岁,然后是28、27、26岁,哦,它们真的很容易就能够写出来,时间不够?那您就需要抓紧了!
这也是我建议大家在上一步十年规划中最后可以不达到Actions的程度也是可以接受的原因,因为你要把它们全部进行更改!现在就开始压缩吧,看看结果如何,这一点是否适合全看您自己,有些人喜欢压力较大的方式,比如我,我觉得这样很有趣,生活一下子充满了阳光和激情!如果您实在不太习惯这种方式,那么我依旧建议您做完这一步骤,因为这种压缩给了您一个很好的机会去认清真正重要的东西。把十年目标压缩到五年,您必须剔除很多目标,否则时间一定是不够用的,当你真正完成这个压缩之后,什么重要什么不重要就可以非常清晰的摆在您的面前。如果您实在不喜欢这种强度和压力太大的规划,那么您尽可以回到第二步,继续以十年为时间段来作为规划的最终版本!
你可以有理由难过,同样你可以找个理由快乐。懂得放心的人可以找到轻松;懂得遗忘的人可以找到自由;懂得关怀的人可以找到朋友。其实,快乐就是一种选择,世上没有绝对幸福的人,只有不肯快乐的心。
幸福就是现在,生活,其实就是在和生命进行对话,谁不是一无所有地来,又一无所有地去?只有好好珍惜现在的幸福,才会有一个快乐的未来。心安即幸福,在这个世界上,金钱并不等于幸福。许多穷怕了的女人嫁了大款,还不是一样日夜空虚。
读懂幸福三要素:一是有希望,二是有事做,三是能爱人。幸福三要素,其实也是生命价值的体现,如果一个人沦为世俗的奴隶,那么对他而言,也就没有什么快乐了。幸福是一种心情,一种感觉。快乐其实很简单,只要他不被贫困压倒。快乐不快乐,就看你自己的心态。寻找快乐的支点,快乐从不远离我们,而是我们远离了快乐。学会为快乐多寻找一个支点,学会为自己换一下看这世界的眼光,那也许我们的生活就会是另一番模样了。
世上只有不肯快乐的心,人的一生总会有许多缺陷,也会有太多的遗憾,世上没有十分圆满的人生。所以快乐是什么?快乐就是珍惜已拥有的一切。人活着就是最大的快乐,出生入死,就是一道坎,像一个被命运扼住咽喉的人,稍稍的呼吸都欣喜若狂。这样说,境况的水准越低,境界的领域可能越高远,就像高山流水,飞瀑千尺,方显出山势巍峨。如此,跟草木比,跟生灵比,跟灰暗的过去比,还有什么理由抱怨或哀叹呢?
快乐是一种回报,你平时怎样待人,决定别人怎样待你。能妙手回春,还是一错再错,全在于你的内心。当你换一种方式处理时,一定得到的是不同的结局。快乐不因贫富而改变,快乐是因为心灵的快乐。贫穷是因为思想的贫穷。
放弃负面心态,选择快乐人生,天底下没有绝对的好事和绝对的坏事,有的只是你如何选择面对事情的态度。如果你凡事皆抱着负面的心态来看等,那么就让你中了彩金一千万,也是坏事。不要向别人索要你成功的条件,那样你容易抱怨。没有付出的回报往往得不到别人的珍惜,我们也无法从中得到成功的喜悦。记住,吃自己种的爪,你会感到分外地甜。
挣脱心灵的枷锁,人的一生的确充满坎坷,许多愧疚,许多迷惘,许多无奈,稍不留神,我们就会被自己营造的心灵监狱所监禁。而心狱,就残害我们心灵的极大杀手,它在使心灵凋零的同时又严重地威胁着我们的健康。
大型Web2.0站点构建技术初探
一、 web2.0网站常用可用性功能模块分析
二、 Flickr的幕后故事
三、 YouTube 的架构扩展
四、 mixi.jp:使用开源软件搭建的可扩展SNS网站
五、 Technorati的后台数据库架构
六、 通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建
七、 从LiveJournal后台发展看大规模网站性能优化方法
八、 说说大型高并发高负载网站的系统架构
一、 web2.0网站常用可用性功能模块分析
Web 2.0网站是指将传统的网站构架(平台、内容源、用户、传播方式等)转化到以用户为核心的网站构架上来,包括一系列体现web2.0概念的元素、定位和创意。web2.0网站在构架上须体现两大宗旨,即强大的后台系统和简单的前台页面,也即提供良好的用户体验,体现以人为本,技术服务人类的宗旨。
web2.0网站常用功能块通常包括以下几大项:
1. Tag标签功能块
Tag(中文叫做”标签”) 是一种新的组织和管理在线信息的方式。它不同于传统的、针对文件本身的关键字检索,而是一种模糊化、智能化的分类。
网页使用Tag标签的好处:
为页面设置一个或者多个Tag标签可以引导读者阅读更多相关文章,为别人带去流量同理也为自己带来流量。
可以帮助读者及时了解一些未知的概念和知识点,提高用户体验。
Tag是人的意志和趋向的体现,Tag可以帮助你找到兴趣相投的人。
基于以上优势,Tag标签代替了传统的分类法,成为web2.0网站使用率最高的功能块(与其说是功能块倒不如说是一种内容导航和内容组织形式)。
一句话:Tag标签是一种更灵活的分类方法,功能在于引导,特点是无处不在,体现智能性、模糊性和趋向性。
2. RSS订阅功能块
RSS是在线共享内容的一种简易方式(也叫聚合内容,Really Simple Syndication)。通常在时效性比较强的内容上使用RSS订阅能更快速获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件(例如SharpReader,NewzCrawler、FeedDemon),在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。
RSS订阅的方式:
订阅到客户端软件如周伯通、遨游浏览器RSS阅读、Foxmail RSS阅读等,此方式使用者较多
订阅到在线阅读(聚合类)门户网站如Google Reader,Yahoo Reader,抓虾、Gougou等,省去了安装RSS阅读器的麻烦
订阅到在线单用户聚合器如Lilina等,比较灵活
RSS订阅功能的最大好处是定向投递,也就是说RSS机制更能体现用户的意愿和个性,获取信息的方式也最直接和简单,这是RSS订阅功能备受青睐的一大主要原因。
3. 推荐和收藏功能块
说到推荐功能,不仅web2.0网站在大量使用,传统的以cms平台为代表的内容模式的网站也在大量使用,推荐功能主要是指向一些网摘或者聚合类门户网站推荐自己所浏览到的网页。当然,一种变相的推荐就是阅读者的自我收藏行为,在共享的模式下也能起到推荐的作用。
比较有名的推荐目标有以del.icio.us为代表的网摘类网站包括国内比较有名气的365key、和讯网摘、新浪vivi、天极网摘等。这里值得一提的是前段时间曾涌现了大批网摘类网站,但他们坚持活下来的好像没有几个了,推荐使用前面提到的这几个网摘门户,人气基本上是使最旺的。
4. 评论和留言功能块
web2.0强调参与性,强调发挥用户的主导作用,这里的参与性除了所谓的订阅、推荐功能外更多地体现在用户对内容的评价和态度,这就要靠评论功能块来完成。一个典型的web2.0网站或者说一个能体现人气的web2.0网站都会花大量篇幅来体现用户的观点和视觉。这里尤其要提到web2.0中的带头老大web blog,评论功能已经成为博客主人与浏览者交流的主要阵地,是体现网站人气的最直观因素。
评论功能块应用在博客系统中实际上已经和博客内容相分离,而更好的应用恰恰是一些以点评为主的web2.0网站比如豆瓣、点评网等,这里的评论功能块直接制造了内容也极大地体现了网站的人气,所以说评论功能块是web2.0网站最有力的武器。
5. 站内搜索功能块
搜索是信息来源最直接的方式之一,无论你的网站是否打上web2.0的烙印,搜索对于一个体系庞大、内容丰富的大型网站都是非常必要的。Tag标签在某种程度上起到搜索的作用,它能够有效聚合以此Tag为关键词的内容,但这种情况的前提是此Tag标签对浏览者是可见的,也就是说当Tag标签摆在浏览者的眼前时才成立,而对于那些浏览者想要的信息却没有Tag标签来引导时搜索就是达到此目的的最好方法。
对于web2.0网站,站内搜索以标题或者Tag为搜索域都能起到好的效果,但本人不建议使用内容搜索域,因为这不符合搜索的高效性原则。同时,具有突出关键词的内容往往都可以用Tag标签来引导,因此使用内容域来搜索实际上是一种浪费服务器资源的行为,而且搜索结果的准确性将大打折扣。
6. 群组功能块
我为什么要把群组作为web2.0网站的功能块来分析呢,因为群组是web2.0网站的一大特点,也是web2.0所要体现的服务宗旨所在。一个web2.0网站,博客也好、播客也好、点评也好,抑或是网摘、聚合门户,他们都强调人的参与性。物以类聚、人以群分,每个参与者都有自己的兴趣趋向,web2.0网站的另一主要功能就是帮助这些人找到同样兴趣的人并形成一个活跃的群体,这是web2.0网站的根本。
总结:web2.0网站倡导的是集体创作、共享资源,靠的是人气,体现的是参与性,一个没有参与性的web2.0网站都不足以成为web2.0。以上提到的这几个功能块就是以吸引用户参与和引导用户参与为目的的,真正的web2.0不是什么深奥的东西,只有一点,那就是如何让浏览者沸腾起来。
二、 Flickr的幕后故事
我们都看到 Flickr 的成功,而又有多少”精英”们了解过 Flickr 背后的过程是多么充满艰险。
Flickr 是全 CGI 的动态构架,并以一种 .gne 的脚本作为 CGI 程序语言。不管网站制作菜鸟还是高手都会疑惑:gne 是哪种程序语言?答案:gne 不是一种语言,Flickr 是以极为经典的 PHP + MySQL 方式实现的,在被 Yahoo 收购服务器搬入美国之前,使用了 21 台(69.90.111.101-121) Apache/PHP 做 Web、23 台图片服务器、另有 MySQL 服务器组成的数据库集群的服务器数量未知。现在估计使用的是 Yahoo 的负载均衡系统,对外只有一个 Web 的 IP 和图片服务器的 IP 了。
那为何 .php 的文件要改成 .gne 呢?以往有大型网站为向后兼容性考虑,隐藏以程序语言命名的脚本文件扩展名,比如 Baidu 隐藏了 .php(Google 的 http 服务器是自己写的,整合了脚本程序,个别页面是 .py–Python);还有一些网站是改成自己网站名相关的扩展名,如 MSN 的群组则是 .msnw,榕树下是 .rs。
那 Flickr 的 gne 是什么意思?我在维基百科的 Flickr 条目上找到了答案(中文 Flickr 条目上没有写明) 。原来 GNE 是 Game NeverEnding 的缩写,Flickr 的开发者 Ludicorp 在 2002-2004 年一直在开发这套以 Game NerverEnding 为名称的大型多人在线角色扮演游戏–一套基于浏览器的 Web 游戏系统,个人以为应该就是当年九城的虚拟城市。但是开发近 3 年后该计划不得不破产,最终只发布了一个 Beta 版,而 Ludicorp 将这套系统稍加移植,就有了 Flickr。呵呵,原来 gne 是一个项目的名称。关于 GNE 的一些连接:http://del.icio.us/schee/gne。
早期的 Flickr 想做成在类似聊天室的地方让网友分享、交流自己的照片,注重社区形式和保护照片不被外部引用(见徐子涵2004年的文章),可能是看到了 Hello 的模式吧。但是聪明的 Flickr 团队不久就改变了策略,淡化了传统的社区形式–如聊天室、而加强了现在使其功成名就的 Tag 组织形式,一种更自由更随兴更轻松好玩的大社区形式,或者叫它广义社区吧,我随便叫的,可能太学究,看着别太在意就是了。另外,将原来照片只能在 Flash 内浏览的限制区除了,并大力推荐用户将照片引用到自己的 Blog,这无疑对于挑战传统相册系统有决定性意义。减少 Flash 后的网页更多地引进了新兴的 Ajax 技术,使界面操作变得非常 Cool。
这就是 Flickr 的历史,清晰地看到了他们对于优秀产品的执著。有了技术和经验积累,加上不断坚持,总有一天时来运转,你的产品会成为新潮流的里程碑。
还有一句话要告诉 Yupoo 等:把 Flickr 想成一个有 Tag 功能的在线相册就已经错远了;复制粘贴者们想当然将 Flickr 去其糟粕取其精华,结果无关紧要的拿来了,将令人激动的优点都去掉了,结果剩下什么?
三、 YouTube 的架构扩展
在西雅图扩展性的技术研讨会上,YouTube 的 Cuong Do 做了关于 YouTube Scalability 的报告。视频内容在 Google Video 上有(地址),可惜国内用户看不到。
Kyle Cordes 对这个视频中的内容做了介绍。里面有不少技术性的内容。值得分享一下。(Kyle Cordes 的介绍是本文的主要来源)
简单的说 YouTube 的数据流量, “一天的YouTube流量相当于发送750亿封电子邮件.”, 2006 年中就有消息说每日 PV 超过 1 亿,现在? 更夸张了,”每天有10亿次下载以及6,5000次上传”, 真假姑且不论, 的确是超乎寻常的海量. 国内的互联网应用,但从数据量来看,怕是只有 51.com 有这个规模. 但技术上和 YouTube 就没法子比了.
1. Web 服务器
YouTube 出于开发速度的考虑,大部分代码都是 Python 开发的。Web 服务器有部分是 Apache, 用 FastCGI 模式。对于视频内容则用 Lighttpd 。据我所知,MySpace 也有部分服务器用 Lighttpd ,但量不大。YouTube 是 Lighttpd 最成功的案例。(国内用 Lighttpd 站点不多,豆瓣用的比较舒服。by Fenng)
2. 视频
视频的缩略图(Thumbnails)给服务器带来了很大的挑战。每个视频平均有4个缩略图,而每个 Web 页面上更是有多个,每秒钟因为这个带来的磁盘 IO 请求太大。YouTube 技术人员启用了单独的服务器群组来承担这个压力,并且针对 Cache 和 OS 做了部分优化。另一方面,缩略图请求的压力导致 Lighttpd 性能下降。通过 Hack Lighttpd 增加更多的 worker 线程很大程度解决了问题。而最新的解决方案是起用了 Google 的 BigTable, 这下子从性能、容错、缓存上都有更好表现。看人家这收购的,好钢用在了刀刃上。
出于冗余的考虑,每个视频文件放在一组迷你 Cluster 上,所谓 “迷你 Cluster” 就是一组具有相同内容的服务器。最火的视频放在 CDN 上,这样自己的服务器只需要承担一些”漏网”的随即访问即可。YouTube 使用简单、廉价、通用的硬件,这一点和 Google 风格倒是一致。至于维护手段,也都是常见的工具,如 rsync, SSH 等,只不过人家更手熟罢了。
3. 数据库
YouTube 用 MySQL 存储元数据–用户信息、视频信息什么的。数据库服务器曾经一度遇到 SWAP 颠簸的问题,解决办法是删掉了 SWAP 分区! 管用。
最初的 DB 只有 10 块硬盘,RAID 10 ,后来追加了一组 RAID 1。够省的。这一波 Web 2.0 公司很少有用 Oracle 的(我知道的只有 Bebo,参见这里). 在扩展性方面,路线也是和其他站点类似,复制,分散 IO。最终的解决之道是”分区”,这个不是数据库层面的表分区,而是业务层面的分区(在用户名字或者 ID 上做文章,应用程序控制查找机制)
YouTube 也用 Memcached.
很想了解一下国内 Web 2.0 网站的数据信息,有谁可以提供一点 ?
四、 mixi.jp:使用开源软件搭建的可扩展SNS网站
Mixi目前是日本排名第三的网站,全球排名42,主要提供SNS服务:日记,群组,站内消息,评论,相册等等,是日本最大的SNS网站。Mixi从2003年12月份开始开发,由现在它的CTO – Batara Kesuma一个人焊,焊了四个月,在2004年2月份开始上线运行。两个月后就注册了1w用户,日访问量60wPV。在随后的一年里,用户增长到了21w,第二年,增长到了200w。到今年四月份已经增长到370w注册用户,并且还在以每天1.5w人的注册量增长。这些用户中70%是活跃用户(活跃用户:三天内至少登录一次的用户),平均每个用户每周在线时间为将近3个半小时。
下面我们来看它的技术架构。Mixi采用开源软件作为架构的基础:Linux 2.6,Apache 2.0,MySQL,Perl 5.8,memcached,Squid等等。到目前为止已经有100多台MySQL数据库服务器,并且在以每月10多台的速度增长。Mixi的数据库连接方式采用的是每次查询都进行连接,而不是持久连接。数据库大多数是以InnoDB方式运行。Mixi解决扩展问题主要依赖于对数据库的切分。
首先进行垂直切分,按照表的内容将不同的表划分到不同的数据库中。然后是水平切分,根据用户的ID将不同用户的内容再划分的不同的数据库中,这是比较通常的做法,也很管用。划分的关键还是在于应用中的实现,需要将操作封装在在数据层,而尽量不影响业务层。当然完全不改变逻辑层也不可能,这时候最能检验以前的设计是否到位,如果以前设计的不错,那创建连接的时候传个表名,用户ID进去差不多就解决问题了,而以前如果sql代码到处飞,或者数据层封装的不太好的话那就累了。
这样做了以后并不能从根本上解决问题,尤其是对于像mixi这种SNS网站,页面上往往需要引用大量的用户信息,好友信息,图片,文章信息,跨表,跨库操作相当多。这个时候就需要发挥memcached的作用了,用大内存把这些不变的数据全都缓存起来,而当修改时就通知cache过期,这样应用层基本上就可以解决大部分问题了,只会有很小一部分请求穿透应用层,用到数据库。Mixi的经验是平均每个页面的加载时间在0.02秒左右(当然根据页面大小情况不尽相似),可以说明这种做法是行之有效的。Mixi一共在32台机器上有缓存服务器,每个Cache Server 2G内存,这些Cache Server与App Server装在一起。因为Cache Server对CPU消耗不大,而有了Cache Server的支援,App Server对内存要求也不是太高,所以可以和平共处,更有效的利用资源。
图片的处理就显得相对简单的多了。对于mixi而言,图像主要有两部分:一部分是经常要使用到的,像用户头像,群组的头像等等,大概有100多GB,它们被Squid和CDN所缓存,命中率相对比较高;另一部分是用户上传的大量照片,它们的个体访问量相对而言比较小,命中率也比较低,使用Cache不划算,所以对于这些照片的策略是直接在用户上传的时候分发到到图片存储服务器上,在用户访问的时候直接进行访问,当然图片的位置需要在数据库中进行记录,不然找不到放在哪台服务器上就郁闷了。
五、 Technorati的后台数据库架构
Technorati (现在被阻尼了, 可能你访问不了)的 Dorion Carroll在 2006 MySQL 用户会议上介绍了一些关于 Technorati 后台数据库架构的情况.
基本情况
目前处理着大约 10Tb 核心数据, 分布在大约 20 台机器上.通过复制, 多增加了 100Tb 数据, 分布在 200 台机器上. 每天增长的数据 1TB. 通过 SOA 的运用, 物理与逻辑的访问相隔离, 似乎消除了数据库的瓶颈. 值得一提的是, 该扩展过程始终是利用普通的硬件与开源软件来完成的. 毕竟 , Web 2.0 站点都不是烧钱的主. 从数据量来看,这绝对是一个相对比较大的 Web 2.0 应用.
Tag 是 Technorati 最为重要的数据元素. 爆炸性的 Tag 增长给 Technorati 带来了不小的挑战.
2005 年 1 月的时候, 只有两台数据库服务器, 一主一从. 到了 06 年一月份, 已经是一主一从, 6 台 MyISAM 从数据库用来对付查询, 3 台 MyISAM 用作异步计算.
一些核心的处理方法:
1) 根据实体(tags/posttags))进行分区
衡量数据访问方法,读和写的平衡.然后通过不同的维度进行分区.( Technorati 数据更新不会很多, 否则会成为数据库灾难)
2) 合理利用 InnoDB 与 MyISAM
InnoDB 用于数据完整性/写性能要求比较高的应用. MyISAM 适合进行 OLAP 运算. 物尽其用.
3) MySQL 复制
复制数据到从主数据库到辅数据库上,平衡分布查询与异步计算, 另外一个功能是提供冗余. 如图:
六、 通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建.
在每个里程碑,站点负担都会超过底层系统部分组件的最大载荷,特别是数据库和存储系统。接着,功能出现问题,用户失声尖叫。最后,技术团队必须为此修订系统策略。
虽然自2005年早期,站点账户数超过7百万后,系统架构到目前为止保持了相对稳定,但MySpace仍然在为SQL Server支持的同时连接数等方面继续攻坚,Benedetto说,”我们已经尽可能把事情做到最好”。
1. 里程碑一:50万账户
按Benedetto 的说法,MySpace最初的系统很小,只有两台Web服务器和一个数据库服务器。那时使用的是Dell双CPU、4G内存的系统。
单个数据库就意味着所有数据都存储在一个地方,再由两台Web服务器分担处理用户请求的工作量。但就像MySpace后来的几次底层系统修订时的情况一样,三服务器架构很快不堪重负。此后一个时期内,MySpace基本是通过添置更多Web服务器来对付用户暴增问题的。
但到在2004年早期,MySpace用户数增长到50万后,数据库服务器也已开始汗流浃背。
但和Web服务器不同,增加数据库可没那么简单。如果一个站点由多个数据库支持,设计者必须考虑的是,如何在保证数据一致性的前提下,让多个数据库分担压力。
在第二代架构中,MySpace运行在3个SQL Server数据库服务器上–一个为主,所有的新数据都向它提交,然后由它复制到其他两个;另两个全力向用户供给数据,用以在博客和个人资料栏显示。这种方式在一段时间内效果很好–只要增加数据库服务器,加大硬盘,就可以应对用户数和访问量的增加。
2. 里程碑二:1-2百万账户
MySpace注册数到达1百万至2百万区间后,数据库服务器开始受制于I/O容量–即它们存取数据的速度。而当时才是2004年中,距离上次数据库系统调整不过数月。用户的提交请求被阻塞,就像千人乐迷要挤进只能容纳几百人的夜总会,站点开始遭遇”主要矛盾”,Benedetto说,这意味着MySpace永远都会轻度落后于用户需求。
“有人花5分钟都无法完成留言,因此用户总是抱怨说网站已经完蛋了。”他补充道。
这一次的数据库架构按照垂直分割模式设计,不同的数据库服务于站点的不同功能,如登录、用户资料和博客。于是,站点的扩展性问题看似又可以告一段落了,可以歇一阵子。
垂直分割策略利于多个数据库分担访问压力,当用户要求增加新功能时,MySpace将投入新的数据库予以支持它。账户到达2百万后,MySpace还从存储设备与数据库服务器直接交互的方式切换到SAN(Storage Area Network,存储区域网络)–用高带宽、专门设计的网络将大量磁盘存储设备连接在一起,而数据库连接到SAN。这项措施极大提升了系统性能、正常运行时间和可靠性,Benedetto说。
3. 里程碑三:3百万账户
当用户继续增加到3百万后,垂直分割策略也开始难以为继。尽管站点的各个应用被设计得高度独立,但有些信息必须共享。在这个架构里,每个数据库必须有各自的用户表副本–MySpace授权用户的电子花名册。这就意味着一个用户注册时,该条账户记录必须在9个不同数据库上分别创建。但在个别情况下,如果其中某台数据库服务器临时不可到达,对应事务就会失败,从而造成账户非完全创建,最终导致此用户的该项服务无效。
另外一个问题是,个别应用如博客增长太快,那么专门为它服务的数据库就有巨大压力。
2004年中,MySpace面临Web开发者称之为”向上扩展”对”向外扩展”(译者注:Scale Up和Scale Out,也称硬件扩展和软件扩展)的抉择–要么扩展到更大更强、也更昂贵的服务器上,要么部署大量相对便宜的服务器来分担数据库压力。一般来说,大型站点倾向于向外扩展,因为这将让它们得以保留通过增加服务器以提升系统能力的后路。
但成功地向外扩展架构必须解决复杂的分布式计算问题,大型站点如Google、Yahoo和Amazon.com,都必须自行研发大量相关技术。以Google为例,它构建了自己的分布式文件系统。
另外,向外扩展策略还需要大量重写原来软件,以保证系统能在分布式服务器上运行。”搞不好,开发人员的所有工作都将白费”,Benedetto说。
因此,MySpace首先将重点放在了向上扩展上,花费了大约1个半月时间研究升级到32CPU服务器以管理更大数据库的问题。Benedetto说,”那时候,这个方案看似可能解决一切问题。”如稳定性,更棒的是对现有软件几乎没有改动要求。
糟糕的是,高端服务器极其昂贵,是购置同样处理能力和内存速度的多台服务器总和的很多倍。而且,站点架构师预测,从长期来看,即便是巨型数据库,最后也会不堪重负,Benedetto说,”换句话讲,只要增长趋势存在,我们最后无论如何都要走上向外扩展的道路。”
因此,MySpace最终将目光移到分布式计算架构–它在物理上分布的众多服务器,整体必须逻辑上等同于单台机器。拿数据库来说,就不能再像过去那样将应用拆分,再以不同数据库分别支持,而必须将整个站点看作一个应用。现在,数据库模型里只有一个用户表,支持博客、个人资料和其他核心功能的数据都存储在相同数据库。
既然所有的核心数据逻辑上都组织到一个数据库,那么MySpace必须找到新的办法以分担负荷–显然,运行在普通硬件上的单个数据库服务器是无能为力的。这次,不再按站点功能和应用分割数据库,MySpace开始将它的用户按每百万一组分割,然后将各组的全部数据分别存入独立的SQL Server实例。目前,MySpace的每台数据库服务器实际运行两个SQL Server实例,也就是说每台服务器服务大约2百万用户。Benedetto指出,以后还可以按照这种模式以更小粒度划分架构,从而优化负荷分担。
当然,还是有一个特殊数据库保存了所有账户的名称和密码。用户登录后,保存了他们其他数据的数据库再接管服务。特殊数据库的用户表虽然庞大,但它只负责用户登录,功能单一,所以负荷还是比较容易控制的。
4. 里程碑四:9百万到1千7百万账户
2005年早期,账户达到9百万后,MySpace开始用Microsoft的C#编写ASP.NET程序。C#是C语言的最新派生语言,吸收了C++和Java的优点,依托于Microsoft .NET框架(Microsoft为软件组件化和分布式计算而设计的模型架构)。ASP.NET则由编写Web站点脚本的ASP技术演化而来,是Microsoft目前主推的Web站点编程环境。
可以说是立竿见影, MySpace马上就发现ASP.NET程序运行更有效率,与ColdFusion相比,完成同样任务需消耗的处理器能力更小。据技术总监Whitcomb说,新代码需要150台服务器完成的工作,如果用ColdFusion则需要246台。Benedetto还指出,性能上升的另一个原因可能是在变换软件平台,并用新语言重写代码的过程中,程序员复审并优化了一些功能流程。
最终,MySpace开始大规模迁移到ASP.NET。即便剩余的少部分ColdFusion代码,也从Cold-Fusion服务器搬到了ASP.NET,因为他们得到了BlueDragon.NET(乔治亚州阿尔法利塔New Atlanta Communications公司的产品,它能将ColdFusion代码自动重新编译到Microsoft平台)的帮助。
账户达到1千万时,MySpace再次遭遇存储瓶颈问题。SAN的引入解决了早期一些性能问题,但站点目前的要求已经开始周期性超越SAN的I/O容量–即它从磁盘存储系统读写数据的极限速度。
原因之一是每数据库1百万账户的分割策略,通常情况下的确可以将压力均分到各台服务器,但现实并非一成不变。比如第七台账户数据库上线后,仅仅7天就被塞满了,主要原因是佛罗里达一个乐队的歌迷疯狂注册。
某个数据库可能因为任何原因,在任何时候遭遇主要负荷,这时,SAN中绑定到该数据库的磁盘存储设备簇就可能过载。”SAN让磁盘I/O能力大幅提升了,但将它们绑定到特定数据库的做法是错误的。”Benedetto说。
最初,MySpace通过定期重新分配SAN中数据,以让其更为均衡的方法基本解决了这个问题,但这是一个人工过程,”大概需要两个人全职工作。”Benedetto说。
长期解决方案是迁移到虚拟存储体系上,这样,整个SAN被当作一个巨型存储池,不再要求每个磁盘为特定应用服务。MySpace目前采用了一种新型SAN设备–来自加利福尼亚州弗里蒙特的3PARdata。
在3PAR的系统里,仍能在逻辑上按容量划分数据存储,但它不再被绑定到特定磁盘或磁盘簇,而是散布于大量磁盘。这就使均分数据访问负荷成为可能。当数据库需要写入一组数据时,任何空闲磁盘都可以马上完成这项工作,而不再像以前那样阻塞在可能已经过载的磁盘阵列处。而且,因为多个磁盘都有数据副本,读取数据时,也不会使SAN的任何组件过载。
当2005年春天账户数达到1千7百万时,MySpace又启用了新的策略以减轻存储系统压力,即增加数据缓存层–位于Web服务器和数据库服务器之间,其唯一职能是在内存中建立被频繁请求数据对象的副本,如此一来,不访问数据库也可以向Web应用供给数据。换句话说,100个用户请求同一份资料,以前需要查询数据库100次,而现在只需1次,其余都可从缓存数据中获得。当然如果页面变化,缓存的数据必须从内存擦除,然后重新从数据库获取–但在此之前,数据库的压力已经大大减轻,整个站点的性能得到提升。
缓存区还为那些不需要记入数据库的数据提供了驿站,比如为跟踪用户会话而创建的临时文件–Benedetto坦言他需要在这方面补课,”我是数据库存储狂热分子,因此我总是想着将万事万物都存到数据库。”但将像会话跟踪这类的数据也存到数据库,站点将陷入泥沼。
增加缓存服务器是”一开始就应该做的事情,但我们成长太快,以致于没有时间坐下来好好研究这件事情。”Benedetto补充道。
5. 里程碑五:2千6百万账户
2005年中期,服务账户数达到2千6百万时,MySpace切换到了还处于beta测试的SQL Server 2005。转换何太急?主流看法是2005版支持64位处理器。但Benedetto说,”这不是主要原因,尽管这也很重要;主要还是因为我们对内存的渴求。”支持64位的数据库可以管理更多内存。
更多内存就意味着更高的性能和更大的容量。原来运行32位版本的SQL Server服务器,能同时使用的内存最多只有4G。切换到64位,就好像加粗了输水管的直径。升级到SQL Server 2005和64位Windows Server 2003后,MySpace每台服务器配备了32G内存,后于2006年再次将配置标准提升到64G。
意外错误
如果没有对系统架构的历次修改与升级,MySpace根本不可能走到今天。但是,为什么系统还经常吃撑着了?很多用户抱怨的”意外错误”是怎么引起的呢?
原因之一是MySpace对Microsoft的Web技术的应用已经进入连Microsoft自己也才刚刚开始探索的领域。比如11月,超出SQL Server最大同时连接数,MySpace系统崩溃。Benedetto说,这类可能引发系统崩溃的情况大概三天才会出现一次,但仍然过于频繁了,以致惹人恼怒。一旦数据库罢工,”无论这种情况什么时候发生,未缓存的数据都不能从SQL Server获得,那么你就必然看到一个’意外错误’提示。”他解释说。
去年夏天,MySpace的Windows 2003多次自动停止服务。后来发现是操作系统一个内置功能惹的祸–预防分布式拒绝服务攻击(黑客使用很多客户机向服务器发起大量连接请求,以致服务器瘫痪)。MySpace和其他很多顶级大站点一样,肯定会经常遭受攻击,但它应该从网络级而不是依靠Windows本身的功能来解决问题–否则,大量MySpace合法用户连接时也会引起服务器反击。
“我们花了大约一个月时间寻找Windows 2003服务器自动停止的原因。”Benedetto说。最后,通过Microsoft的帮助,他们才知道该怎么通知服务器:”别开枪,是友军。”
紧接着是在去年7月某个周日晚上,MySpace总部所在地洛杉矶停电,造成整个系统停运12小时。大型Web站点通常要在地理上分布配置多个数据中心以预防单点故障。本来,MySpace还有其他两个数据中心以应对突发事件,但Web服务器都依赖于部署在洛杉矶的SAN。没有洛杉矶的SAN,Web服务器除了恳求你耐心等待,不能提供任何服务。
Benedetto说,主数据中心的可靠性通过下列措施保证:可接入两张不同电网,另有后备电源和一台储备有30天燃料的发电机。但在这次事故中,不仅两张电网失效,而且在切换到备份电源的过程中,操作员烧掉了主动力线路。
2007年中,MySpace在另两个后备站点上也建设了SAN。这对分担负荷大有帮助–正常情况下,每个SAN都能负担三分之一的数据访问量。而在紧急情况下,任何一个站点都可以独立支撑整个服务,Benedetto说。
MySpace仍然在为提高稳定性奋斗,虽然很多用户表示了足够信任且能原谅偶现的错误页面。
“作为开发人员,我憎恶Bug,它太气人了。”Dan Tanner这个31岁的德克萨斯软件工程师说,他通过MySpace重新联系到了高中和大学同学。”不过,MySpace对我们的用处很大,因此我们可以原谅偶发的故障和错误。” Tanner说,如果站点某天出现故障甚至崩溃,恢复以后他还是会继续使用。
这就是为什么Drew在论坛里咆哮时,大部分用户都告诉他应该保持平静,如果等几分钟,问题就会解决的原因。Drew无法平静,他写道,”我已经两次给MySpace发邮件,而它说一小时前还是正常的,现在出了点问题……完全是一堆废话。”另一个用户回复说,”毕竟它是免费的。”Benedetto坦承100%的可靠性不是他的目标。”它不是银行,而是一个免费的服务。”他说。
换句话说,MySpace的偶发故障可能造成某人最后更新的个人资料丢失,但并不意味着网站弄丢了用户的钱财。”关键是要认识到,与保证站点性能相比,丢失少许数据的故障是可接受的。”Benedetto说。所以,MySpace甘冒丢失2分钟到2小时内任意点数据的危险,在SQL Server配置里延长了”checkpoint”操作–它将待更新数据永久记录到磁盘–的间隔时间,因为这样做可以加快数据库的运行。
Benedetto说,同样,开发人员还经常在几个小时内就完成构思、编码、测试和发布全过程。这有引入Bug的风险,但这样做可以更快实现新功能。而且,因为进行大规模真实测试不具可行性,他们的测试通常是在仅以部分活跃用户为对象,且用户对软件新功能和改进不知就里的情况下进行的。因为事实上不可能做真实的加载测试,他们做的测试通常都是针对站点。
“我们犯过大量错误,”Benedetto说,”但到头来,我认为我们做对的还是比做错的多。”
七、 从LiveJournal后台发展看大规模网站性能优化方法
LiveJournal是99年始于校园中的项目,几个人出于爱好做了这样一个应用,以实现以下功能:
- 博客,论坛
- 社会性网络,找到朋友
- 聚合,把朋友的文章聚合在一起
LiveJournal采用了大量的开源软件,甚至它本身也是一个开源软件。
在上线后,LiveJournal实现了非常快速的增长:
- 2004年4月份:280万注册用户。
- 2005年4月份:680万注册用户。
- 2005年8月份:790万注册用户。
- 达到了每秒钟上千次的页面请求及处理。
- 使用了大量MySQL服务器。
- 使用了大量通用组件。
二、LiveJournal架构现状概况
三、从LiveJournal发展中学习
LiveJournal从1台服务器发展到100台服务器,这其中经历了无数的伤痛,但同时也摸索出了解决这些问题的方法,通过对LiveJournal的学习,可以让我们避免LJ曾经犯过的错误,并且从一开始就对系统进行良好的设计,以避免后期的痛苦。
下面我们一步一步看LJ发展的脚步。
1、一台服务器
一台别人捐助的服务器,LJ最初就跑在上面,就像Google开始时候用的破服务器一样,值得我们尊敬。这个阶段,LJ的人以惊人的速度熟悉的Unix的操作管理,服务器性能出现过问题,不过还好,可以通过一些小修小改应付过去。在这个阶段里LJ把CGI升级到了FastCGI。
最终问题出现了,网站越来越慢,已经无法通过优过化来解决的地步,需要更多的服务器,这时LJ开始提供付费服务,可能是想通过这些钱来购买新的服务器,以解决当时的困境。
毫无疑问,当时LJ存在巨大的单点问题,所有的东西都在那台服务器的铁皮盒子里装着。
2、两台服务器
用付费服务赚来的钱LJ买了两台服务器:一台叫做Kenny的Dell 6U机器用于提供Web服务,一台叫做Cartman的Dell 6U服务器用于提供数据库服务。
LJ有了更大的磁盘,更多的计算资源。但同时网络结构还是非常简单,每台机器两块网卡,Cartman通过内网为Kenny提供MySQL数据库服务。
暂时解决了负载的问题,新的问题又出现了:
- 原来的一个单点变成了两个单点。
- 没有冷备份或热备份。
- 网站速度慢的问题又开始出现了,没办法,增长太快了。
- Web服务器上CPU达到上限,需要更多的Web服务器。
3、四台服务器
又买了两台,Kyle和Stan,这次都是1U的,都用于提供Web服务。目前LJ一共有3台Web服务器和一台数据库服务器。这时需要在3台Web服务器上进行负载均横。
6、现在我们在哪里:
现在服务器基本上够了,但性能还是有问题,原因出在架构上。
数据库的架构是最大的问题。由于增加的数据库都是以Slave模式添加到应用内,这样唯一的好处就是将读操作分布到了多台机器,但这样带来的后果就是写操作被大量分发,每台机器都要执行,服务器越多,浪费就越大,随着写操作的增加,用于服务读操作的资源越来越少。
由一台分布到两台
最终效果
现在我们发现,我们并不需要把这些数据在如此多的服务器上都保留一份。服务器上已经做了RAID,数据库也进行了备份,这么多的备份完全是对资源的浪费,属于冗余极端过度。那为什么不把数据分布存储呢?
问题发现了,开始考虑如何解决。现在要做的就是把不同用户的数据分布到不同的服务器上进行存储,以实现数据的分布式存储,让每台机器只为相对固定的用户服务,以实现平行的架构和良好的可扩展性。
为了实现用户分组,我们需要为每一个用户分配一个组标记,用于标记此用户的数据存放在哪一组数据库服务器中。每组数据库由一个master及几个slave组成,并且slave的数量在2-3台,以实现系统资源的最合理分配,既保证数据读操作分布,又避免数据过度冗余以及同步操作对系统资源的过度消耗。
由一台(一组)中心服务器提供用户分组控制。所有用户的分组信息都存储在这台机器上,所有针对用户的操作需要先查询这台机器得到用户的组号,然后再到相应的数据库组中获取数据。
这样的用户架构与目前LJ的架构已经很相像了。
在具体的实现时需要注意几个问题:
- 在数据库组内不要使用自增ID,以便于以后在数据库组之间迁移用户,以实现更合理的I/O,磁盘空间及负载分布。
- 将userid,postid存储在全局服务器上,可以使用自增,数据库组中的相应值必须以全局服务器上的值为准。全局服务器上使用事务型数据库InnoDB。
- 在数据库组之间迁移用户时要万分小心,当迁移时用户不能有写操作。
7、现在我们在哪里
问题:
- 一个全局主服务器,挂掉的话所有用户注册及写操作就挂掉。
- 每个数据库组一个主服务器,挂掉的话这组用户的写操作就挂掉。
- 数据库组从服务器挂掉的话会导致其它服务器负载过大。
对于Master-Slave模式的单点问题,LJ采取了Master-Master模式来解决。所谓Master-Master实际上是人工实现的,并不是由MySQL直接提供的,实际上也就是两台机器同时是Master,也同时是Slave,互相同步。
Master-Master实现时需要注意:
- 一个Master出错后恢复同步,最好由服务器自动完成。
- 数字分配,由于同时在两台机器上写,有些ID可能会冲突。
解决方案:
- 奇偶数分配ID,一台机器上写奇数,一台机器上写偶数
- 通过全局服务器进行分配(LJ采用的做法)。
Master-Master模式还有一种用法,这种方法与前一种相比,仍然保持两台机器的同步,但只有一台机器提供服务(读和写),在每天晚上的时候进行轮换,或者出现问题的时候进行切换。
8、现在我们在哪里
现在插播一条广告,MyISAM VS InnoDB。
使用InnoDB:
- 支持事务
- 需要做更多的配置,不过值得,可以更安全的存储数据,以及得到更快的速度。
使用MyISAM:
- 记录日志(LJ用它来记网络访问日志)
- 存储只读静态数据,足够快。
- 并发性很差,无法同时读写数据(添加数据可以)
- MySQL非正常关闭或死机时会导致索引错误,需要使用myisamchk修复,而且当访问量大时出现非常频繁。
9、缓存
去年我写过一篇文章介绍memcached,它就是由LJ的团队开发的一款缓存工具,以key-value的方式将数据存储到分布的内存中。LJ缓存的数据:
- 12台独立服务器(不是捐赠的)
- 28个实例
- 30GB总容量
- 90-93%的命中率(用过squid的人可能知道,squid内存加磁盘的命中率大概在70-80%)
如何建立缓存策略?
想缓存所有的东西?那是不可能的,我们只需要缓存已经或者可能导致系统瓶颈的地方,最大程度的提交系统运行效率。通过对MySQL的日志的分析我们可以找到缓存的对象。
缓存的缺点?
- 没有完美的事物,缓存也有缺点:
- 增大开发量,需要针对缓存处理编写特殊的代码。
- 管理难度增加,需要更多人参与系统维护。
- 当然大内存也需要钱。
10、Web访问负载均衡
在数据包级别使用BIG-IP,但BIG-IP并不知道我们内部的处理机制,无法判断由哪台服务器对这些请求进行处理。反向代理并不能很好的起到作用,不是已经够快了,就是达不到我们想要的效果。
所以,LJ又开发了Perlbal。特点:
- 快,小,可管理的http web 服务器/代理
- 可以在内部进行转发
- 使用Perl开发
- 单线程,异步,基于事件,使用epoll , kqueue
- 支持Console管理与http远程管理,支持动态配置加载
- 多种模式:web服务器,反向代理,插件
- 支持插件:GIF/PNG互换?
11、MogileFS
LJ使用开源的MogileFS作为分布式文件存储系统。MogileFS使用非常简单,它的主要设计思想是:
- 文件属于类(类是最小的复制单位)
- 跟踪文件存储位置
- 在不同主机上存储
- 使用MySQL集群统一存储分布信息
- 大容易廉价磁盘
到目前为止就这么多了,更多文档可以在http://www.danga.com/words/找到。Danga.com和LiveJournal.com的同学们拿这个文档参加了两次MySQL Con,两次OS Con,以及众多的其它会议,无私的把他们的经验分享出来,值得我们学习。在web2.0时代快速开发得到大家越来越多的重视,但良好的设计仍是每一个应用的基础,希望web2.0们在成长为Top500网站的路上,不要因为架构阻碍了网站的发展。
八、 说说大型高并发高负载网站的系统架构
我在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,可以和大家一起探讨一下。
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。
大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。
上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。
1、HTML静态化
其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。
同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。
2、图片服务器分离
大家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率。
3、数据库集群和库表散列
大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。
在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可。
上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。
4、缓存
缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。
架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。
网站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大型社区使用了这样的架构。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多了,.net不是很熟悉,相信也肯定有。
5、镜像
镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实时更新。在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。
6、负载均衡
负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。
负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,我个人接触过一些解决方法,其中有两个架构可以给大家做参考。
- 硬件四层交换
第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。 第四层交换功能就象是虚IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。
在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。
- 软件四层交换
大家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。但是满足一定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看你配置的熟悉能力。
软件四层交换我们可以使用Linux上常用的LVS来解决,LVS就是Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。
一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性,随时往架构里面增减节点都非常容易。这样的架构我准备空了专门详细整理一下和大家探讨。
对于大型网站来说,前面提到的每个方法可能都会被同时使用到,我这里介绍得比较浅显,具体实现过程中很多细节还需要大家慢慢熟悉和体会,有时一个很小的squid参数或者apache参数设置,对于系统性能的影响就会很大,希望大家一起讨论,达到抛砖引玉之效。
经典故事
1.「傻瓜缴学费学习,聪明人以傻瓜缴的学费学习」-- 巴西谚语
有一个楞头楞脑的流浪汉,常常在市场里走动,许多人很喜欢开他的玩笑,并且用不同的方法捉弄他。
其中有一个大家最常用的方法,就是在手掌上放一个五元和十元的硬币,由他来挑选,而他每次都选择五元的硬币。
大家看他傻乎乎的,连五元和十元都分不清楚,都捧腹大笑。
每次看他经过,都一再的以这个手法来取笑他。
过了一段时间,一个有爱心的老妇人,就忍不住问他:「你真的连五元和十元都分不出来吗?」
流浪汉露出狡黠的笑容说:「如果我拿十元,他们下次就不会让我挑选了。」
默想~
当人自以为聪明时,其实正显出愚昧和无知。
让我们多以柔和谦卑的态度与人相处,那才真正是智者的作为。
2.「多数人的失败不是因为他们的无能,而是他的心志不专一。」 ----吉鲁德
有一个外科医生告诉学生:「当个外科医生,需要二项重要的能力:
第一、不会反胃,
第二、观察力要强。」
接着,他伸出一只手指,沾入一碟看来令人作呕的液体中,然後张口舔舔手指。
他要全班学生照着做,他们只好硬起头皮照做一遍。
医生颔首一笑说:「各位,恭喜你们通过了第一关测验。
不幸的是,第二关你们都没通过,因为你们没注意到我舔的手指头,不是我探入碟中的那根手指。」
默想~
你有没有仔细而认真的观察,现在从事的工作是否有不佳之处?
及时调整,永远不晚。一个认真的人也必是一个智慧的人。
3.「不要害怕你的生命会结束,而要害怕它从未开始。」 ----格雷斯.汉森
有一个人搭船到英国,途中遇到暴风,全船的人惊慌失措,他看到一个老太太非常平静的在祷告,神情十分的安详。
等到风浪过去,全船脱离了险境,这人很好奇的问这老太太,为什麽一点都不害怕。
老太太回答:
「我有两个女儿,大女儿叫马大,已经被上帝接走,回到天家,二女儿叫马利亚住在英国。刚才风浪大作时,我就向上帝祷告,如果接我回天家,我就去看大女儿,如果留我性命,我就去看二女儿,不管去那里我都一样,所以我怎麽会害怕呢?」
默想~
无论是甚麽样的遭遇任何事,总不致惧怕。
把命运交托上苍,充实而用心的过好每一天。
4.「没有乌云,没有暴风雨,便没有美丽的彩虹。」---- 芬生
有一朵看似弱不禁风的小花,生长在一棵高耸的大松树下。
小花非常庆幸有大松树成为她的保护,为它挡风挡雨,每天可以高枕无忧。
有一天,突然来了一群伐木工人,两三下的功夫,就把大树整个锯了下来。
小花非常伤心,痛哭道:
「天啊!我所有的保护都失去了;从此那些嚣张的狂风会把我吹倒,滂沱的大雨会把我打倒!」
远处的另一棵树安慰她说:「不要这麽想,刚好相反,少了大树的阻挡,阳先会照耀、甘霖会滋润 ; 弱小的身躯将长得更茁壮, 盛开的花办将一一呈现在灿烂的日光下。人们会看到 ,并且称赞 说,这朵可爱的小花长得真美丽啊!」
默想~
当失去了一些以为可以长久依*的东西,自然会有难过及割舍的痛苦,但其中却隐藏着无限的祝福和机会。
日後回首时,你才惊讶自己成长的痕迹,是那麽清晰明显,甚至是令人满心喜悦的。
5.没有失败,只有暂时停止成功。
如果你已经为人父母,当你的孩子正在学习走路时,你会给他几次机会?
你会在他跌倒十次之後,让他改坐轮椅吗?
还是只给他二十次学走的机会,若学不会走路就要他放弃?
或者当你身边有五十个人叫嚣着劝你放弃,你就决定让他坐轮椅呢?
我想你的答案是: 不会。
的确,当我问每一位父母,会给你的孩子几次机会呢?
他们都说:
我会给他无数次机会,直到他站起来,学会走路为止!
是的,一直坚持到底者,最终都会站起来。
为什麽许多父母只给孩子一次联考的机会?
为什麽常用失望的口气告诉孩子不适合某种行业,要求他转行呢?
而许多人竟也因为没有坚定的信念,一遇挫折就认为自己能力不足,因此放弃了他们的理想。
其实,凡事没有失败,只有暂时停止成功。
6.上帝的延迟并不是上帝的拒绝。
有一个人,他在二十一岁时,做生意失败。
二十二岁时,角逐州议员落选。
二十四岁时,做生意再度失政。
二十六岁时,爱侣去世。
二十七岁时,一度精神崩溃。
三十四岁时,角逐联邦众议员落选。
三十六岁时,角逐联邦众议员再度落选。
四十五岁时,角逐联邦参议员落选。
四十七岁时,提名副总统落选。
四十九岁时,角逐联邦参议员再度落选。
五十二岁时,当选美国第十六任总统。
这个人就是林肯,因为他坚信上帝的延迟,并不是上帝的拒绝,因此能屡仆屡起,最终成就不凡。
7.重要的不是发生了什麽事,而是要做哪些事来改善它。
佛家说逆境是「增上缘」,可遇而不可求。
遇到困难时,重要的不是发生了什麽事,而是你即将用什麽态度来面对,做些什麽事来改善它。
8.我对我的生命完全负责。
成功者对事情百分之百负责,负责的定义是永远握有主控权,如果不能主控生命,很可能一生随波逐流。
对生命负全责者,他为自己而活,并学习替别人着想。
把心化为水,以身为容器,反映世界的影子,我在影子中找寻自己的价值…….
中午吃完饭后,我从长春坐车到哈尔滨。上车后昏睡了一会,醒来后习惯性地在口袋里摸手机,准备打几个电话发几条信息。结果发现口袋是空的,心里就不免一惊,难道手机丢了?在汽车的座位上找,在各个角落里找,结果就是没有找到。我让旁边的人打电话到我手机号码上,很正常地响着,就是没有人接听。我记得在长春开会时把手机调到了无声状态,所以即使手机响别人也听不见。打电话给我吃过饭的饭店,对方说没有见到手机。在折腾了一个多小时之后,我确信手机已经丢失,心中开始产生说不出来的懊恼情绪,浑身不自在,好像产生了一种悬在半空的空荡荡的感觉。
按说一部手机现在也不值钱,而且只要到电话营业厅报失以后就可以办一张同号码的新卡。但心里依然觉得丢了一部手机好像失去了很多不可弥补的东西。仔细想来,那部手机拿在手里的时候从来没有觉得什么,现在找不到了,才觉得好像丢了很多东西。这部手机已经变成了我生活和工作中不可缺少的一部分。
四年前买了这部手机,跟了我也有好几个年头了,日久生情,尽管后来有很多新款手机出现,但我还是没有舍得更换。好像一个老朋友一样,交往久了,尽管知道对方有一些不足和缺点,但依然愿意交往。因为和老朋友在一起,熟悉对方的脾气和个性,感到更加自在。我是一个有点害怕新技术的人,现在的手机把什么功能都放到一起了,弄懂就得花几天时间,又费时间又费精力又太麻烦。我的手机里还储存了上千个电话号码,号码没有在电脑里备份,丢了手机就把和无数朋友的联系方式给丢了,这又是一件非常可惜的事情。另外,手机里还储存了一些我常常拿出来阅读和背诵的文章,手机里的英汉、汉英字典,还有在很多场合照下的一些纪念照片,现在突然没有了,就像丢了一个老朋友一样,有点魂不守舍了。
突然想到,在我们生活中拥有的很多东西,拥有的时候完全没有感到这些东西对于我们有多么重要,只有失去了,才发现这些东西是多么珍贵,多么值得留恋。但我们生活中不能等到拥有的东西真的失去了才去体会这些东西的珍贵,因为有些东西一旦失去,就再也不会回来。所以我们必须学会在没有失去前就小心照看好这些东西,而不是失去后留下后悔和遗憾。如果一个小小的手机失去了都让我们感到牵挂、留恋和魂不守舍的话,那我们生命中一定还有远比手机更为珍贵的东西,我们绝对不能随便失去。
什么东西我不能失去呢?什么东西一旦失去了,我会觉得终生遗憾甚至痛苦呢?我开始在我心中思索我不能失去的东西,并开始在头脑中罗列出来。下面是我列出来的一张不完整的清单。
我不能失去我的孩子,这不仅仅是从生命层面上说的,而且是从情感层面上说的,我不能失去孩子对我的爱,也不能失去我对孩子的爱;我不能失去帮助孩子成长的机会,否则孩子长大了没有出息或者变成坏蛋,我将会终生遗憾。因此,从今天开始,我必须把更多的时间用在孩子身上,使我和孩子之间产生更多的爱和感情。
我不能失去我的爱人,我的爱人和我生活在一起了二十年,感情由爱情变成了亲情,再也没有惊心动魄的情感碰撞,日常在一起,就像左手握右手,很平淡的感觉,但实际上我们已经融入了对方的骨髓,生活这么多年相濡以沫,两个灵魂已经不可分离。因此,从今天起,我要更加爱护这种家的感觉,让两个灵魂一起互相伴随着走到生命的终点。
我不能失去我的母亲,我的父亲在十几年前已经去世,我父亲在世的时候我还很清贫,连给父亲买瓶酒的钱都没有,我父亲去世后我一直觉得遗憾。现在我母亲已经年老,但我常年累月在外面奔波,每个月只能去见她一到两次;尽管母亲天天希望能够见到我,但我却没法做到,我觉得我在做着不孝的事情;因此,从今天起,我要争取尽可能多地去看望母亲,使我的母亲更加开心,使她更加长寿健康。
我不能失去我的朋友,在生命四十多年的历程中,之所以有生命的精彩和起伏,是因为有朋友;之所以有事业的成长和辉煌,是因为有朋友;之所以有痛苦后的安慰和温暖,是因为有朋友;之所以有思想的进步和喜悦,是因为有朋友;我不敢想象没有朋友的生活是一种怎样的生活,那生命该会有多痛苦和寂寞;因此,从今天起,我要更加关怀朋友们的处境,向他们吐露心声,使生命的旅程一路有朋友陪伴。
我不能失去书籍,书籍成了我生命中最大的慰藉,再孤单的人生只要有书籍相伴就不怕一个人独行在路上,书藉也是永远不会离我们而去的朋友,在需要的时候随时来到身边,在不需要的时候默默守候在一旁。一旦你打开书本,总能产生生命的意义和冲动。有人说在监狱里整治犯人最残酷的办法就是不让犯人看书读报,这样他的精神就会一片茫然,心理就会崩溃。我有过这样的体会,在坐长途飞机的时候,十几个小时,如果有一本你喜欢的书,时间就会过得飞快,如果没有书籍,十几个小时就变成了一段度日如年的难熬时光。因此,在我浪迹天涯的时候,我可以什么都不带,但是一定要带上两本我可以反复阅读的书籍。现在我只要一抬头就可以从书架上把任何一本我喜欢的书拿下来阅读,这是多么幸福的一件事情。
我不能失去蓝天白云,尽管这件事由不得我作主,但我深深体会到了人类失去蓝天白云有多么可怕。城市上空的污染让我们呼吸困难,疾病丛生;人类的生活从来没有像现在这样充满了灰色和压抑;当我到达草原看到辽阔的天空和黑夜中满天的繁星时,我突然明白,人类只有生存在这样的天空下,才是真正酣畅淋漓地活着;难怪草原的歌曲是如此的嘹亮、悠长和动听。因此,我觉得自己应该和大家一起努力,尽可能让汽车不要出去乱跑,让城市的上空出现更多的蓝天白云。
我不能失去纯净的水,小时候只要渴了,在任何一条河边弯下腰去就可以喝水,现在很多的河流你连脚都不敢放进去;当我看到清澈的溪流从远方的雪山流淌下来时,我的心里充满了欢欣。我知道城市的水源越来越少,几乎每一个城市都存在着缺水的危险,但同时人们却在不断地浪费水源和增加污染;因此,我觉得我应该更加节约用水,在洗澡洗脸时随时把水关上,在喝矿泉水时一定不要喝半瓶扔半瓶,一定要像西藏人民一样,把水看作是神圣的东西。
……
我突然发现,我生命中不能失去的东西太多太多,而且都是如此的珍贵,但所有这些珍贵的东西似乎和我日常的追求和工作没有太多的关系。在日常工作中,我在追求着事业的成功,追求着财富,追逐着世俗的名声和地位;当然我也在追求着买更好的房子、汽车、电子设备;但如果有一天,我们只能在两边选择一边,要不选择亲人、朋友、书籍、蓝天白云和纯净的水,要不选择财富、名声、地位和汽车时,我想大部分人会毫不犹豫地选择前者而不是后者;因此,什么东西对于我们的生命最重要已经一目了然。
想到这里,我觉得丢失手机已经不那么重要,幸亏我生命中拥有的很多珍贵的东西还没有丢掉,我还来得及把这些珍贵的东西保存得更好。也许偶然丢失手机是上天对我的生活已经误入歧途的一种警示?如果这样,我觉得丢手机未尝不是一件好事。
想着想着,汽车已经到达了哈尔滨,就在我很释然地跨出汽车的时候,突然发现手机静静地躺在汽车门上的手扣里面。在进汽车的时候我无意中把它放在了里面,坐在汽车里一直没有发现。现在手机突然失而复得了,我的心情顿时如春花般地绽放。
尽管手机能够失而复得,但我知道生命中太多的东西是没有办法失而复得的,让我们一起珍惜我们拥有的那些珍贵的东西和感情吧。
《福布斯》网站日前评出了迄今为止美国的15大富豪.结果,洛克菲勒拔得头筹,以3053亿美元的总资产高居榜首.
据悉,排行榜所引用的个人资产总额均为上榜富豪资产高峰时期数据.并且,对照了当时的美国国内生产总值(GDP),转换成2006年的美元价值.因此,如果约翰·洛克菲勒今天依然健在,那么其资产将是比尔·盖茨的几倍.以下为《福布斯》网站评出的美国迄今为止15大富豪:
1. 约翰·洛克菲勒(1839-1937)
预计资产3053亿美元
2. 安德鲁·卡内基 (1835-1919)
预计资产2812亿美元
3. 科尼利厄斯·范德比尔特(1794-1877)
预计资产1684亿美元
4. 约翰·雅各布·奥斯塔 (1763-1848)
预计资产1101亿美元
5. 史蒂芬·吉拉德(1750-1831)
预计资产956亿美元
6. 理查德·梅隆(1858-1933)
预计资产823亿美元
7. A.T.斯图尔特(1803-1876)
预计资产808亿美元
8. 弗雷德里克·韦尔豪泽(1834-1914)
预计资产722亿美元
9. 马歇尔·菲尔德(1834-1906)
预计资产601亿美元
10. 萨姆·沃尔顿(1918-1992)
预计资产586亿美元
11. 杰·古尔德(1836-1892)
预计资产582亿美元
12. 亨利·福特(1863-1947)
预计资产543亿美元
13. 比尔·盖茨(1955- )
预计资产530亿美元
14.安德鲁·梅隆(1855-1937)
预计资产505亿美元
15. 沃伦·巴菲特 (1930- )
预计资产460亿美元
不知道为什么还是想写点东西,可是要写点什么呢?我也不知道?感觉心里乱乱的,不是悲伤,也不是忧愁,而是一种淡淡的惆怅,和一种难以名状的无奈。该得到,却没有得到,该失去,然而却依然还在,得到的东西,也没有带来那种获胜的感觉,哪怕是一点点的虚荣感,或者是一种可以欺骗自己的自豪感,即便是虚假的不存在,可是就连这些也没有。
????? 我不知道,是不是自己太自卑了,或者是自己太自私了,或许我真的就是那种很悲观的人,对于很多的事情我都会考虑到失败后的东西?
????? 不写这些了好像是偏离主题了,我想计划一下我的生活,趁现在自己状态还吧错,还 不是特别的厌恶工作,我想在努力的充实一下自己,所以生活准备过的有条理一点,学习也想计划一下。
???? 不知道些了什么了,不过现在感觉好多,可以工作了。


