ChinaUnix社区作者访谈
采访嘉宾:刘鑫(Gray1982)
2004年毕业,主要从事IT培训、技术支持、高性能网站架构等相关技术的研究工作。目前就职于某知名互联网公司主管运维工作,负责网站架构的相关技术,以及对Hadoop的研究。
本次访谈我们也邀请到抚琴煮酒版主参与主持,感谢!
欢迎大家跟帖提问,我们对于跟帖提问的网友给予30积分的奖励。更多访谈请关注ChinaUnix访谈录:http://star.chinaunix.net/。
抚琴煮酒:
刘总,您目前也算是Linux运维的元老了,你当时是怎么进入这一行的,在你的职业发展过程中,有没有走过弯路?有什么经验和教训跟大家分享一下。
Gray1982:
2003年考取MCSE,之后我就一直喜欢对系统及应用软件进行研究,做视频、做音频、做动画、做网页、做图片的经验都有过。2004年正式开始学习Linux,然后就喜欢上了这个系统。因为有了学习MCSE的经验,所以对Linux也是从基础学起,很系统地学。之后做讲师、做技术,因为身体原因,不方便经常出差,所以选择了运维行业。
初入这行,不懂的比较多,所以没事的时候常去招聘网站看看这类职位所需的技能,也算是了解下“行情”,确定学习方向,这样比盲目学习效率更高一些。
行万里路不如名师指路,如果真没人指导,建议大家没事去来咱们CU论坛走走,加入一些技术群。有可能你会看到许多不会的问题。不懂没关系,知道别人怎么解决的,就是你的收获。
抚琴煮酒:
运维在日常工作中具体从事哪些工作,工作的重点、难点你认为在哪里?
Gray1982:
运维一般分为操作和应用运维,比如有的负责初始化系统脚本(增加通用的配置、监测网卡速度、连通率等),根据不同的业务对系统用户进行管理等。对服务器进行常规监控,报警处理。业务的更新部署,还需要配合开发诊断程序的错误。其实这些工作没有太多的技术性可言,只要细心一点就可以。
相对来说,应用运维需要了解的内容就比较多了,如各种负载(LVS、HAProxy),页面级缓存(Squid、Varnish),KV、分布式缓存(Redis、Memcache)、分布式文件系统(MFS, Hadoop),等等。除了要了解这些应用适用于什么样的业务情况,还需要对其进行适当的优化,这样还可以节省一批机器,减少公司的运营成本,也算为公司做出了一些贡献。因为现在很多公司片面追求快速发展,不讲究细节,功能只要能用就行,所以带来很多的弊端。不仅浪费资源,整个架构也不够完美。所以作为运维人员,为了公司的发展,整个架构的健壮性、可扩展性至关重要,但也往往是很多公司所忽略的。
如果想“偷懒”,最重要的就是自己写脚本。几台机器的情况你也许不在意,如果几十台甚至几百台呢?开源的软件也许能解决一些问题,但这些软件并不是专门为公司的业务开发的,所以总有些方面不合适。所以还是建议要么对这些开源软件进行二次开发,要么专门为这些业务写一些工具以满足公司的需求。这也是运维在工作中很重要的能力。
抚琴煮酒:
自动化运维和Linux集群方面有什么经验跟大家分享吗?
Gray1982:
就像我上面说的,一个出色的运维,不仅仅需要了解与掌握架构所需要的技术知识,还需要在实际生产环境中写出适合业务的工具来提高效率,减轻自己的压力。自动化运维除了要具备自行编写脚本的能力以外,还要能对服务器进行标准化部署,比如设置每台服务器软件放置的位置、脚本的运行等。如果没有标准化,服务就是一盘散沙,自动化运维很难实施。
Linux集群方面涉及的内容比较多,具体分为高可用性集群(运行于两个或多个节点上,目的是在系统出现某些故障的情况下,仍能继续对外提供相应的服务)、负载均衡集群(提供和节点个数成正比的负载能力,这种集群很适合提供大访问量的Web服务,往往具有一定的高可用性特点)、超级计算集群(海量数据的计算)三大类。其中包含的内容很多,有兴趣的朋友可以查看我写的网站架构技术方面的书。
常用的技术如负载均衡器LVS、HAProxy、Oracle集群数据库RAC、MySQL+DRBD集群等。了解并掌握软件之间的结合使用,就可以在架构设计时得心应手。
抚琴煮酒:
你现在最关注哪方面的技术?你自己是如何学习并掌握新技术的?
Gray1982:
在脚本方面主要研究Python。各种编程语言是否顺手是个人的习惯,没有哪种语言是绝对不好的。看书的时候结合几本书一起看,可以综合学习该语言的知识,以免知识不全或错误。另外多写、多练,写得多了就明白得多了,就可以很简洁地写出整个程序。实现同一个功能,用60行代码实现和用200行代码实现,程序员的功力悬殊可见。
除了对Python的学习,我对云计算Hadoop也很感兴趣。除了基本配置,其原理、优化是我研究的方向。开始如果没有环境的话,可以自己用VMware搭建,只要能连网,安装根本不是问题。而且,由于VMware配置的虚拟Linux性能不如真实的服务器,所以在调整的时候会有更多的收获。
学自己感兴趣的内容,有计划地学,长久地学,效率会高一些。学习脚本就要多写写,多看看,多问问,就可以更好的掌握。
抚琴煮酒:
当前网站大概的架构,以及用到的技术有哪些?
Gray1982:
目前应用涉及的技术比较多,我只说一个项目吧。根据业务来做的网站页面级缓存架构可以是lvs-haproxy-nginx(varnish)-app的形式。LVS不多说了,大家都知道。中间之所以多了个HAProxy,一来因为整个架构更好管理(机器比较多,一个网段的IP已经不能满足其扩展需求),二来可以更好地按规则分发请求。至于是用专业级的缓存还是用轻量级的缓存要看公司的实际情况。有的可能需要对开源软件进行二次开发才可以得到公司需要的东西,有的可能考虑以后的扩展以及运营成本等。了解得更多才会掌控得更多。
抚琴煮酒:
对目前热门的CDN技术有什么心得和经验与大家分享?
Gray1982:
在CDN方面暂时没什么研究,相对来说对其架构方面了解的也不多,就不在这里献丑了。
技术方面只是对Squid、Varnish缓存有部分了解,但仅限于电商级的。企业中会遇到的问题多为CDN取源时的速度问题,CDN取源时有可能占有90%以上的企业带宽。这点需要CDN厂商注意,最好添加限制速度方面的设置。如果企业文件无需经常更新,可以让CDN厂商把取源时间调整为半年或者更久,如果有更新但为数不多的情况下建议手动刷新。
抚琴煮酒:
听说您Python玩得不错,您在平时的工作中具体使用Python来实现哪些工作,能有些具体的实用脚本跟大家分享吗?
Gray1982:
考虑到效率以及方便性,自己曾用Python写过一个多线程的批量部署程序。一般公司做批量部署管理都会用Puppet,不过这些都需要安装服务器端和客户端,并且是单线程的。管理少量服务器也许看不出什么,管理到百台以上的机器,效率会明显下降。我自己写的这个多线程的程序(有兴趣的朋友可以到我的博客下载)暂时还没测试百台以上的运行情况,不需要安装客户端,完全以推送的形式,所以比较方便、快捷。可以是批量管理的必备工具。因为没有测试到多台服务器的情况,所以有问题也希望大家提出来,一起研究,共同起步。
另外一个是根据业务来监控网站的实用性工具,可以监控网络是否连通、访问的网页是否出现400以上的错误以及网页的内容是否正常,如果不正常,可以通过邮件报警。有兴趣的朋友也可以一起讨论。