作为一个运维,接触的大部分服务器是以Linux居多,WIN随后,UNIX也占据一定的份额。对于一个运维来说,稳定、安全、高效,这是对于服务器的三大要求,几乎和机器人的三大法则一样,深深地扎根在运维和系统的根里。
先看第一个版本的咆哮,为什么对Linux怒吼:
一句新的格言是,对于有着正常生活的人来说,幸好还有Windows。
实不相瞒,这其实是一篇不停地大声抱怨Linux的文章。但是现在我生气得很,沮丧得很。众所周知,Linux人员打心底里就瞧不起没有夜以继日地琢磨Linux发行版细枝末节的人,但我有句话要说:我可不像你们这样Linux人有的是大把时间来钻研技术。
我受够了Linux
我受够了。我受够了所有拼凑起来的各系统部分必须版本刚刚好,必须有刚刚好的依赖关系,必须以刚刚好的方式来编译,必须选择刚刚好的时机,还必须数量刚刚好的的人员在刚刚好的时间步调一致。
我受够了所有不同的软件包管理器。一些代码使用某一个软件包管理器来分发,另一些代码则使用别的软件包管理器来分发。受够了只要按照资料不充分的HOWTO文件,在终端窗口中机械地输入一行行代码,可以将模块下载到Ubuntu上,却根本无法下载到CentOS或Fedora上,就因为没有按刚刚好的顺序来指定代码存储库。
我受够了所有不同的外壳程序和用户界面。除非你建立起一条稳定的SSH网络连接,下载了各部分代码,重新编译了软件包管理器,否则编译代码和发行版甚至无法启动进入到用户界面中;尔后,趁网络连接凑巧很通畅的时候,还需要通过调整另一个烦人的系统配置.Ini文件,全面设置远程监控器屏幕。
我受够了这一点:这个东西(Linux服务器)无法可靠地运行。当然喽,如果你每天每时每刻都在接触Linux;如果Linux对你来说就是生活的唯一;如果在你长出第一根胡须后,为了Linux从来没有约过异性;而且如果一生中除了负责做Linux之外,从来没有负责过其他东西,那么你自然谙熟关于Linux的一切事情。你自然知道哪些论坛和哪些楼主拥有只有他一个人知道的超长、超怪的命令行。
你还知道,如果你在发行版4.3版本上输入某个命令行,它可以运行,但是在4.3a版本上却出现了问题,那是由于后一个版本需要完全不同的程序,使用完全不同的软件包管理器来打包,而且确保那个命令行的顺序完全正确:为此需要进入正好合适的聊天室,需要在晚上正好合适的时间段,与正好知道的某个Linux专业人士对上话,才能够把文档中没有说明的-lM添加到第四个参数的前面。
要是哪个不走运的家伙把大小写搞错了,那就惨了,因为把-Lm放在第四个参数的前面会带来完全不同,甚至文档中不作进一步说明的,可能会危害所有人的某种结果。
我究竟为什么受够了Linux?
我受够了Linux,因为仅仅为了可以在图形用户界面中启动该死的虚拟网络连接(VNC),或者将平时所用的备份程序装入到网络上其他机器上,就需要好几个月经受上述种种磨难;而这种感受就像是玩《忍者武士》小游戏,非得四道关全部闯过,才能到达绿山的巅峰。更要命的是,我好不容易让整个系统起来,没想到就崩溃了。
确切地说说,我当时准备部署我那台Linux服务器。我想更新服务器,更新成最新版本,因为我做事循规蹈矩,经常定期更新。于是,当Gnome声称有更新版可以打上时,我表示OK
我真是太天真了。我表示OK,实际上是给Linux打上更新版。我知道,我本该格式化另一个硬盘,使用dd命令将我那堆文件拷贝过去,下载源代码包,将所有代码重新编译一次,然后向Linux祈祷,从头开始构建我的整个操作系统,而这一切仅仅是为了安装一些安全更新版。
但我没有这么做。我以为,经过这么多年后,Linux终于足够健壮了,不至于因为我仅仅想运行服务器、确保版本最新,就给我当头一棒。我好傻!我真的好傻!
于是我执行了更新。结果系统崩溃了。显示异常。而我之前付出的努力和时间全部泡汤了。而现在,服务器无法启动。
更要命的是,服务器放在互联网服务提供商(ISP)那里,由其托管,于是我只好低声下气地请求,请求对方重新为我构建硬盘,重新安装操作系统。幸好,服务器只是仍处于试运行的机器;我没有在上面运行工作系统。不然,我是完全没辙了,而不是仅仅气得破口大骂。
抱怨开始了……
好了,尽管我确信各位看官会说,我在技术方面准是个毫无经验的新手。你要知道,我可是个UNIX产品经理,之前不但写过内核代码,还在大学里教过语言编程。而现今Linux存在的问题却是,它绝不是内核这么简单。它是由成千上万个编得很差劲的软件片段组成的混合体,所有软件片段拼凑在一起,其中大多数只能在各片段采用某种组合的情况下才能正常运行。只要要哪里出现不匹配,搭起来的整个系统就顷刻崩溃。
当然,Linux机器可以成为出色的服务器。但是它们需要有一组专门的Linux技术人员,这些人了解关于Linux的一切事情,了解所有的联络暗号,了解所有不为人知的趣闻轶事,因为他们有的是时间。
而我就是个工作忙碌的人,有其他事要做。我只是需要打开一些网页,运行我的程序,仅此而已。我没有时间来跳血泪之舞,而你要真正成为Linux文化圈子中的一员,就得会跳血泪之舞。
我可是受够了。当然,我仍会在虚拟机中的Linux上运行某些一切就绪的硬件设备,可以几乎立马对虚拟机执行备份、快照和恢复等操作;但是就支撑我那些服务器的核心引擎而言,从现在开始,我的眼里只有Windows,永远如此。
我可是再也资本将更多的时间浪费在Linux上面了。一切都是随便拼凑起来的系统怎能让人放心?绝对不会用Linux了。你总不至于出钱、让我在服务器上运行Linux吧。永远不会再用Linux服务器了。
情绪平静之后
近日我找那家ISP谈了谈。对方告诉我,他们早上过来后发现,服务器监控器上显示了数量多得惊人的错误信息;用他们的话来说,出现的错误比他们之前见过的都要严重。
不过真正让人抓狂的事还在后头。我问,他们是不是在内部其他地方使用这个发行版(CentOS版本5.6)。
对方告知:“是的。我们在许多机器上使用这个发行版。但是我们从来没有更新过。当初安装完毕后,我们就没有理睬过。”这就是使用Linux发行版的真实写照,不难发现那么多用户有多侥幸。一旦安装上去,可以正常运行,用户从来就不、根本就不更新。
实际上,如果其他ISP也是这样子管理基于Linux的机器,那就意味着,新的安全漏洞公之于众后,他们没有及时更新系统。为了防止基于Linux的机器因开始进行简单的更新而变成一堆废物,许多ISP任由机器(及其客户)暴露在各种各样的恶意攻击面前。
从我的切身经历来看,Linux是一款优秀的系统,是一款健壮的操作系统,是一款灵活的操作系统。但就是无法同时做到优秀、健壮和灵活。它不是一款优秀、健壮又灵活的操作系统。
不信的话可以试试,保准你尝到苦头。还有最后一点是,别对我说我不清楚自己在干什么,于此因此抨击Linux。我很清楚自己在干什么,也很清楚维持一台简单的LAMP机器运行显然需要具有哪些要素。
对于有着正常生活的所有人来说,幸好还有Windows。
后来就有了回复和辩论:
没有Linux世界将变成什么样
其实我们可以做一个假设,假设没有Linux的世界会是怎么样。我想至少你不会在网络上找到众多的个人博客,因为不止一个人抱怨Windows的服务器实在是太贵了;至少你不会在网络上看到这篇文章,因为几乎所有的互联网企业的开发人员无法在Windows服务器上完成各种变态的需求;至少你现在不会在Facebook上联系你的好友,因为不止一个技术人反应Windows的开放方式让他们难以施展拳脚即使是扎克伯格也会淹没在人海之中;至少你不会在科技频道看到令人感叹的科技成果,因为科研机构的业务需求Windows是根本无法满足的。无法想象如果世界上没有了Linux的话我们的生活将变成什么样。
也许就是所有拼凑起来的各系统部分必须刚刚好,必须有刚刚好的依赖关系,必须以刚刚好的方式来编译,必须选择刚刚好的时机,必须数量刚刚好的的人员在刚刚好的时间步调一致,也许只有这样才能让我们的生活变得更加丰富多彩。
做有尊严的运维
Linux运维是Linux服务器存在的必要条件之一。说到运维,无非就是保障企业可以进行正常生产,在发生故障的时候出现在该出现的地方解决问题。曾经有一位淘宝的开发工程师说过:“做程序员,就要做有尊严的程序员。”同样的道理,做运维也要做有尊严的运维。
人的尊严有很多不同的实现方式,作为一个Linux运维来讲,尊严又在哪里呢?一位资深记者曾经不止一次告诉我:“作为技术人,凡事都会自己寻找解决方法,独立完成一件事情就是最大的自我体现。”这句话就非常适用在Linux运维身上。
一个Linux运维会东拼西凑的搭建起底层服务,然后再从成千上万的服务包中找到自己需要的每一款软件,之后再辛苦的将生产环境的各个部件衔接起来,最后在从数不清的调正与测试之中寻找问题解决问题。每时每刻不再注视着问题的发生,当发生问题时绞尽脑汁去解决。也许很快就可以解决,也许解决问题的怪异代码只有论坛中的几个人知道,但是每当闯过重重难关解决问题的时候,我相信他们的脸上都会挂上自信与幸福的微笑。
我相信很多人都会非常享受那种登上顶峰的快感。其实这就是一种自尊的体现——相信自己,相信自己的技术。之前的文章遭到鄙视也就是正常的了,谁也不会让他人践踏自己最引以为豪的东西。
做运维请守好规矩
我们回到前文,这位咆哮中的作者在他的Linux服务器足够健壮的时候进行了版本更新,导致了系统崩溃。怎么说呢,你说他是罪有应得呢还是把过错归结到Linux服务器上呢?作为一个优秀的Linux运维来讲,只要是自己的服务器可以满足现有的生产环境就坚决不要去做升级或者其他恐怖的事情,即便是必须升级也要经过测试环境反复测试之后才能应用到生产环境中。不知道这位咆哮的仁兄有没有守好这条不成文的规矩。但是你又会说为什么面对巨大的漏洞威胁却不去升级系统呢?不是不做更新,是在更新前需要考虑具体的环境。除非是面临十分严峻的安全问题,服务器在那里正常的运行就请不要去打扰他。
即便是迫不得已需要更新也需要在完成测试之后再说更新的事情,我相信即使是Windows服务器也需要测试环境进行测试之后再用到生产环境中吧。
回想到前文中那位咆哮的仁兄,不难看出他已经成为一位运维部门的管理者,对于管理者也就意味着将更多的时间投入到管理上而不是拥有大把的时间坐在电脑前写命令敲代码。拥有那样的咆哮也是理所当然的事情。
世间万物皆有法则,如果你不按照他的法则行事那么出现问题之后就不要将过错怪于他人的头上,因为是你没有遵守这些法则。做运维请做遵守规矩有尊严的运维。
读了这篇文章(原文http://os.51cto.com/art/201110/298945.htm),让人感到很生气。Linux 现已走过了二十年的风风雨雨成长为一个巨人,在你我生活的每个角落,小到手机大到汽车,我们都能看到它的身影。原作者说他“受够了Linux服务器,重拾Windows”着实让人感到既可气又好笑,我们只能说是LINUX抛弃了他,他跟LINUX实在是有缘没分。
接触LINUX已有很长时间了,说起LINUX和WINDOWS,就像习武之人惯常使用的刀和剑一样,你使用的兵器不同,自然你的出招和攻防也不一样。你习惯使用哪种兵器,哪种兵器使的好,那自然要靠你自己的悟性和练习了。没有必要先用剑,用剑不行了再使刀,到头来只能是“空悲切,白了少年头”,结果还是使啥啥不精,成不了高手。
在这里,就LINUX和WINDOWS在运维中的特点做一对比,也希望和广大运维同行交流一下:
1、稳定性和健壮性。原作者提到LINUX易崩溃,安全更新的时候系统直接崩了。我觉的他的说法很不地道。酒哥提到一公司的RH8有9年多没重启,我在一家外企工作时曾亲眼看到生产线上一台服务器有3023天没重启过,这些足以证明LINUX的强大和稳定。另外升级更新也要经过测试环境反复测试之后才能正式应用到生产环境中,原作者明显忽略了这一点。一般来说,LINUX不需要像WINDOWS那样频繁升级更新的,如果你用Windows思维去运维Linux,确实会遇到很多问题的。面对日益倡狂的病毒、蠕虫和恶意代码,WINDOWS不打补丁的机器无一幸免,而LINUX不装杀毒软件照样裸奔一点事都没有。其他的就不用一一列举了,LINUX的强大绝对不是吹的。
2、开源和免费。我们都知道WINDOWS的源码不是开源的,而LINUX是开源的。开源为用户提供了直接修改系统和应用程序的源代码的机会,从而加快了开发周期,缩短了时间。相比之下,微软每月才有一次“周二补丁”:这种修补它自己代码的安全问题的间隔给用户带来了很大不便。 在微软高呼反盗版的同时,也意味着企业投入更多的成本来购买正版的系统和软件,而LINUX的自由和共享为很多中小企业的发展提供了广阔的空间,也大量节约了资金和成本。我们知道购买Windows客户端访问许可证(CAL)的费用有时经常会超过实际的服务器投入成本,而LINUX则在这方面节省了许多。而且就运维而言,在Linux下大多使用免费工具和开源软件,也为企业大大节约了运维成本。
大多数出自Linux程序员之手的开源应用程序具有比Windows平台下开发的应用程序更好的架构,消耗更少的资源,提供更好的运行结果——这正是LINUX能发展壮大并得到千千万万人喜爱的原因。
3、灵活和易用。当你改掉Windows窗口和界面使用习惯,用纯字符操作,尝试用简单高效的命令行去完成各种复杂操作时,你会发现自己也越来越喜欢Linux,它的高效和简洁让人印象深刻。它的任何一个文件都可以通过简单的数字来赋予权限,相比WINDOWS复杂的NTFS安全设计和策略组合不知道要方便多少。Win2k8中提供了PowerShell,但是跟LINUX的SHELL相比还是差远了。
4、内核区别。LINUX内核与WINDOWS内核最大的区别就是GUI是否做在内核中。LINUX的内核是不包括GUI的,而WINDOWS则把GUI做到内核中,所以WINDOWS在GUI方面消耗的资源相对要少一些,也更适合部署各种娱乐应用。LINUX定位在网络操作系统,更适合做服务器,它的内核对网络应用也支持的非常好,更加适合高并发大访问量的复杂网络环境。
5、运维工作的不同待遇。如果你是做运维工作的,相信大家都有体会。在一个企业里,既有LINUX运维和WINDOWS运维,一般LINUX运维的工资都会比WINDOWS的高一些。在现在很多公司里,LINUX的服务器也比较多,一些关键的应用和架构都涉及到负载均衡、集群、CDN和虚拟化、云计算等,这方面对于LINUX运维人员都有比较大的需求,所以LINUX运维比WINDOWS运维更有刚性的市场需求。
做一个在同时兼顾两个阵营的人,我是万分痛苦和不愿意一定要指出到底哪个更适合什么什么用,从某些程度上来讲,所有意见都无法汇总成几个固有的套路,即使是PMP,也再三强调自己仅仅是做因为一个标准工作手册和指南存在,具体的项目需要项目管理人员根据实际情况作出分析和运用适当的工具。
在我看来,微软的设计,大体是基于以下的几个特点:1.管理的工作更多于实际的架构工作,这也是MS的工程师更多的侧重于架构上,而不是搭建。2.MS通常都假设服务器是不会出现错误的,这句话的前提是基于一定的时间长度里保持稳定,所以微软更多的是在维护而不是修复,这就导致微软做了严格的策略和检验机制来保证服务器不出现错误。3.由于微软的大平台性,必须兼顾很多的其他模块接入,向前兼容,向后支持,在WINTEL的联盟长久合作之后,微软的战线拖得就比较长,相比于非营利的大部分开源项目,微软不得不砍掉很多东西,不再提供服务,所以越就显得不够灵活,但是稳定就有了明显的提高。
对于Linux阵营,我了解的不够多,LAMP的组合也多是RH之上的,这也是我觉得Linux不利之处,很多人只能在自己熟悉的系统和套件里游刃有余,但是整个Linux的阵营庞大,很多Linux的运维也不一定就可以跟得上企业的转型,linux在新特性,灵活上确实表现出色,并且,Linux确实很适合服务器,至少对于机器而言,遍历目录的方法看起来比图形化界面在当下更实用。
运维都是艰苦奋斗的IT战士,手中的利器很多,也很纠结,希望将来有一些统一的兼容机制,可以让广大的运维人员解脱出来。