前言
为什么要写这本书
随着信息时代的迅速发展,尤其是互联网日益融入大众生活,作为这一切背后的IT服务支撑,运维角色的作用越来越大,传统的人工运维方式已经无法满足业务的发展需求,需要从流程化、标准化、自动化去构建运维体系,其中流程化与标准化是自动化的前提条件,自动化的最终目的是提高工作效率、释放人力资源、节约运营成本、提升业务服务质量等。我们该如何达成这个目标呢?运维自动化工具的建设是最重要的途径,具体包括监控、部署变更、安全保障、故障处理、运营数据报表等。本书介绍如何使用Python语言来实现这些功能点,以及Python在我们的自动化运维之路上发挥作用,解决了哪些运维问题等。
为什么是Python?Python是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年年底发明,具有简单易学、开发效率高、运行速度快、跨平台等特点,尤其是具有大量第三方模块的支持,其中不乏优秀的运维相关组件,例如Saltstack、Ansible、Func、Fabric等。大部分运维人员为非专业开发人士,对他们而言,选择一门上手快、技术门槛低的开发语言非常重要。由于Python具有脚本语言的特点,学习资源多,社区非常活跃,且在Linux平台默认已安装等优势。Python已经是当今运维领域最流行程的开发语言之一。
2003年毕业后,我的第一份工作是当PHP程序员,人力紧张时还要兼顾美工的工作。时常回想,其实也只有在小公司才能修炼出“十八般武艺”。在“非典”肆虐的岁月,大部分公司都闭门不招聘,一个毕业生能有这样的机会锻炼也显得尤为珍贵。工作中一次偶然的机会看到导师诗成兄在黑漆漆的界面中输入不同指令,第一感觉非常震撼,很酷,联想到《黑客帝国》电影中的画面,与之前接触到的Windows系统完全不一样,后来才晓得是Redhat 9(红帽9)。此后很长的一段时间里,整个人完全沉醉在Linux的世界里,处于一种痴迷的状态,那时我还是一个程序员。
到了2005年10月,看到隔壁公司招聘一名Linux系统工程师,抱着试一试的心态去面试,结果出乎意料,我被录用了,这样我就找到了第二个东家—天涯社区。人生的第一个转折点在此酝酿,由于赶上了公司快速发展的阶段,接触到了很多开源技术,包括LVS、Squid、Haproxy、MongoDB、MySQL、Cfengine等,并且不断在生产环境中应用所学的技术,取得了非常不错的效果,重点业务的高可用持续保持在99.99%。期间新的问题也陆续出现,包括如何更好整合各类开源组件,发挥其最大效能,以及如何高效运营。不可否认,具有开发背景的运维人员有着先天优势,可以在不同角色之间进行思考,扩大视野。期间我参与了推动大量标准化、规范化的建设,以此为前提,开发了“SDR1.0-Linux主机集中管理”、“天涯LVS管理系统”、“天涯服务器管理系统(C/S与B/S版)”、“服务器机柜模拟图平台”、“Varnish缓存推送平台V1.0”等平台,这些平台在很大程度上改变了运维人员手工作坊式的工作模式。在释放人力的同时,我看到国内其他公司的同仁也在做同样的事情,突然间有一个想法,就是开源。此时已经是2009年,这个想法也得到系统部经理小军认可,同年12月陆续在code.google.com平台托管,让业界更深入了解天涯社区的技术架构。凭着这些作品及分享的技术文章,我的博客“运维进行时”(http://blog.liuts.com/)荣获了“2010年度十大杰出IT博客”的殊荣。我还先后参与了51CTO、IT168、CU等门户网站以架构、运维为主题的专访,在运维圈得到越来越多同仁的认同。
再谈谈如何与Python结缘。接触Python是从《简明Python教程》开始,由于我有Perl与PHP的基础,学习Python没有太大压力。事实上,Python的简洁、容易上手以及大量第三方模块等特点,深深吸引了我,让我第二次沉醉于知识的海洋。我很快深入学习了Func、Django框架、SQLAlchemy、BeautifulSoup、Pys60、wxPython、Pygame、wmi等经典模块,同时将所学知识应用到运维体系中,解决在工作中碰到的问题。例如,开发的“多节点应用延时监控平台”解决了多运营商网络环境下的业务服务质量监控问题;开发的“Varnish&Squid缓存推送平台”解决了快速刷新缓存对象的问题。再例如,删除敏感帖子的时效性要求非常高,需要在后台触发删除后立即生效,与缓存推送平台对接后很好地解决了这一问题;天涯服务器管理系统(C/S、B/S、移动版)实现自助、智能、多维度接入,提高了运维效率,减少了人工误操作,释放了人力资源,同时标准化与流程化得到技术保障与实施落地。
天涯社区是我个人职业生涯的培育期,让我重新审视自我,明确了未来的规划与定位。2011年9月是我职业生涯的成长期的开始,加盟了腾讯,负责静态图片、大游戏下载业务CDN的运维工作,接触到庞大的用户群、海量的资源(设备、带宽、存储)、世界级的平台、人性化的工作氛围以及大量优秀的同事。所有的这些都深深地吸引着我,也让我的视野与工作能力得到前所未有的提升。分工细化产生运维工作模式的差异,从“单兵作战”转向“集团军作战”。我继续保持着对新技术的狂热,思考如何使用Python在运维工作中发挥作用。工作期间研究了大量高级组件,包括Paramiko、Fabric、Saltstack、Ansible、Func等,这些组件有了更高级的封装,强大且灵活,贴近各类业务场景。我个人也基于Python开发了集群自动化操作工具—yorauto,在公司各大事业群广泛使用,同时入选公司精品推荐组件。我的部分个人发明专利使用Python作为技术实现。目前我也关注大数据发展趋势,研究Python在大数据领域所扮演的角色。
回到主题“为什么要写这本书”,这一点可以从51CTO对我的专访中找到答案。当时的场景是这样的:
51CTO:您对开源是如何理解的?天涯社区在过去两年间陆续开源了包含LVS管理系统、Varnish缓存推送平台、高性能数据引擎memlink等好几个项目,业内人士对此都十分关注,您认为这给整个产业带来了哪些好处?身为天涯社区的一位运维人员,您认为在这个过程中自己的价值在哪里?
刘天斯:开源就是分享,让更多人受益的同时自己也在提高。经常看到很多朋友都在做监控平台、运维工具。事实上功能惊人相似,大家都在做重复的工作,为什么不能由一个人开源出来,大家一起来使用、完善呢。这样对整个行业来讲,这块的投入成本都会降低,对个体来讲也是资源的整合。如果形成良性循环,行业的生态环境将会有很大程度的改善。本人热衷于开源技术,同样也愿意为开源贡献自己一分微薄之力,希望更多的人能支持开源、参考开源。
这就是我的初衷,也是答案。写书的意义在于将10年的工作沉淀、经验、思路方法做个梳理与总结,同时与大家分享。最终目的是为每个渴望学习、进步、提升的运营人员提供指导。
读者对象
❑系统架构师、运维人员
❑运营开发人员
❑Python程序员
❑系统管理员或企业网管
❑大专院校的计算机专业学生
如何阅读本书
本书分为三大部分。
第一部分为基础篇(第1~4章),介绍Python在运维领域中的常用基础模块,覆盖了系统基础信息、服务监控、数据报表、系统安全等内容。
第二部分为高级篇(第5~12章),着重讲解Python在系统运维生命周期中的高级应用功能,包括相关自动化操作、系统管理、配置管理、集群管理及大数据应用等内容。
第三部分为案例篇(第13~16章),通过讲解4个不同功能运维平台案例,让读者了解平台的完整架构及开发流程。
说明:
❑书中的代码以“【路径】”方式引用,测试路径为“/home/test/模块”、“/data/www/项目”。
❑书中涉及的所有示例及源码的Github地址为https://github.com/yorkoliu/pyauto,以章节名称作为目录层次结构,模块及项目代码分别存放在对应的章节目录中。
其中第三部分以接近实战的案例来讲解,相比于前两部分更独立。如果你是一名经验丰富Linux管理员且具有Python基础,可以直接切入高级篇。但如果你是一名初学者,请一定从基础篇开始学习。本书不涉及Python基础知识,推荐新手在线学习手册:《简明Python教程》 与《深入Python: Dive Into Python中文版》。
勘误和支持
由于笔者的水平有限,且编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,特意创建一个在线支持与应急方案问答站点:http://qa.liuts.com。你可以将书中的错误发布到“错误反馈”分类中,同时如果你遇到任何问题或有任何建议,也可以在问答站点中发表,我将尽量在线上提供最满意的解答。我也会将及时更新相应的功能更新。如果你有更多的宝贵意见,欢迎发送邮件至邮箱liutiansi@gmail.com,期待能够得到你们的真挚反馈。
致谢
首先要感谢Guido大神,是他创立了Python语言,同时也要感谢提供Python优秀第三方模块的所有作者,开源的精神与力量在他们身上体现得淋漓尽致。
感谢钟总、王工、诗成兄,是他们给予我第一份工作,也为个人此后的成长提供了非常多的指导。感谢天涯社区的邢总(968)、王总(建科)、小军,是他们提供了这么优秀的平台,让我有机会可以尽情施展才能,体现个人价值。感谢腾讯的Willim(崔晓春)、Tomxiao(肖志立)、Thundersun(孙雷)、Stanleysun(孙龙君)、Trackynong(农益辉)、Chanceli(李飞宏)、Blue(许明)导师,以及接入运维组(TEG)、数据管理组(IEG)所有兄弟姐妹在工作中给予的帮助、指导与支持,让我可以在新的环境继续突破自我,实现自我价值。感谢洪春兄(抚琴煮酒)的引荐,在他的努力下才促成了这本书的合作与出版。
感谢机械工业出版社的编辑杨福川和姜影,在这一年多的时间中始终支持我的写作,他们的鼓励和帮助引导我能顺利完成全部书稿。
感谢已经过世的爷爷,是他深深影响着我的人生观与价值观,他的教导我会永远铭记在心。感谢我的爸爸、妈妈,感谢他们将我培养成人,在成长的过程中不断鼓励、激励我继续前进。感谢姐姐、弟弟,他们是我成长过程中最好的挚友与伙伴。
最后感谢我的爱人杜海英,没有你就没有我们幸福的小家和可爱的宝宝。感谢她支持我做的所有决定,没有她背后默默的支持与鼓励,也没有我今天的成就,更也不会有这本书。我想说:谢谢你!有你真好。
谨以此书献给我最亲爱的家人与我自己,以及众多热爱开源技术的朋友们!
刘天斯(Yorkoliu)