新浪微博“@海洋之心-悟空”,HZLUG组织者、HZGDG核心成员及讲师,资深运维架构师,业余撰稿人,致力于开源软件及前沿科技的探索和研究。 70后,曾优良学生,后问题少年,闭门思过,重新做人,过黑色七月,杀过独木桥,在中国教育改革的早期完成了蜕变。 精通系统及网络管理,定制嵌入式系统,安全防御及CDN加速,互联网高性能网络及架构设计、NoSQL先行者、分布式文件系统、虚拟化及X-Stack云平台的研究等新技术,喜交流,活跃于社区,积极投身于开源活动的组织和传播,真诚待人,授人以渔,共同进步。 新浪微博: http://weibo.com/gg618 (@海洋之心-悟空) Github: https://github.com/shaohaiyang 人生信条:“无功就是过,平庸即是错”(过去式了)万事先修德,养性必制怒 人生态度:“活到老,学到老,学思结合”人生小感悟
兴趣是最好的老师,也是学习的最大动力,尽早找到自己兴趣爱好,全面发展; 永远不要做井底之蛙,多参加社交活动,结交阅历丰富的朋友,学会分享,教是最好的学; 技术是个竞技项目,勤能补拙,贵在坚持;多学多做,切勿眼高手低; 收集文档和整理WiKi,学思结合,才能举一反三;信息多→长知识→生智慧是一个沉淀的过程;每一天都追求进步,哪怕只是一点点,功不唐捐,机遇总是给有准备的人。
我更喜欢称运维为: 基础/底层 + 工程师/架构师
运维工程师的主要工作是
精通操作系统 精通网络服务和各种配置 精通各种系统软件如:数据库,LAMP组合,Memcache,Redis…… 精通自身业务软件的配置架设 精通监控,系统调化,自动化部署运维工程师的挑战(快,狠,准): 限时拆弹,随机应变,运筹帷幄
其实,每个人的工作经历都是曲折的,有人不小心做了程序员,也有人不小心做了运维师,更有人做了销售,这些都不是问题,“从业有先后,术业有专攻”,只要坚持努力下去,本质是殊途同归。
理论上,优秀的软件工程师完全可以把部分/甚至全部运维工程师的工作做掉,比如说业务软件性能的监控,如果程序员在程序中插入很多的钩子或探针,就可以统计出数据来,不需要运维费心监控;比如说程序员在设计程序的时候,考虑到了分库分表,考虑到了大并发和分布式的设计,那运维就可以水平扩展机器就行;如果。。。还有很多如果。。。但是,现实是残酷的,具备这种高水平的程序员不多,再加上精通底层及系统软件的全面发展的程序员,在中国就更少了。
举个例子,我们可以看看开源的软件,光是程序日志信息非常详尽,我们可以通过标准的syslog或者日志去监控它,但在我接触到所有的公司和程序员中,大家都忙于实现业务功能,迭代和打补丁,连个文档甚至注释都不愿意写,更别提能够考虑这么周全了,所以
运维工程师是现实中的软件工程师的互补,因为大家的能力侧重点不同,所以大家是团结一体的
打个比方
运维工程师 = 冲锋陷阵的将军
软件工程师 = 坐阵帐中的军师
所以要能够打胜仗,离开谁都是不行的,前期排兵布阵固然重要,但“将在外,皇命有所不受”,运维在现场随机应变是非常重要的,运维作为生产线上最后一道防线,在现场随机应变的能力非常重要,限时排错的要求也非常高,老实说,运维是所有现场中心理素质最过硬的工程师。
所以,无论结果如何,我希望上层都要给运维工作给予高度的评价,然后再慢慢总结吸取教训,制定计划规避风险。
人与团队
架构师是所有IT人向往的殿堂,但架构师的职能包括:
基础底层架构师(组成人群:运维工程师) 软件开发架构师(组成人群:软件工程师) 业务运营架构师(组成人群:产品经理,销售总监,市场运营,CEO)最后,我仍然要不断强调的一个观点:
架构师它可能不是一个人的角色,而是一个团队的统称,它可以
不必冲锋陷阵,就可以纵观全局,运筹帷幄,调度所有的资源(运维架构师的功能) 可以带领和团结团队,高屋筑瓴,因时制宜的实现解决方案(软件架构师的功能) 可以把握公司业务方向和深度,洽谈合作,控制成本(业务架构师的功能)随着时间的推移,每一类型的架构师都是可以从上述一个个岗位中成长起来的,比尔盖茨最初也要亲自码代码,李开复最初也要组建和带领google中国团队,所以,没有从天而降的天才,只有一步一个脚印的磨炼才有他们现在的成就(认清自己不是天才,就算是天才也要努力)。
我们现在要做的就是一方面内修本领,提升自身能力,另一方面外联志朋,寻找身边可以互补的志同道合的人,共同迎接机遇和挑战。做公司跟做人一样,也需要合作者,才能快鱼胜慢鱼,四两拨千斤。
在2005~2010年一直在威盛(VIA中国)做嵌入式的x86的车载小系统,大家可以学习LFS的这个项目,按照教程做过一二次后,基本对整体linux有个非常深入的理解。
有了对Linux庖丁解牛的能力,你就能有针对性的裁剪Linux系统,这样的好处是:
系统体积小,无需安装过程,运行速度快,直接便携式插拔设备引导启动; 定制自由,只保留特定业务所需的软件,避免了第三方软件引入的风险; 生产环境没有gcc,make,缺少依赖库,无法入侵; 嵌入式系统内置了rsync,puppet,具备了卫星系统的扩展性; 有了嵌入式系统以后,可以在几分钟里实现脱胎换骨的升级; 有了这个嵌入式系统后,服务器的部署可以移交给经销商安装并检验硬件,节省了运维的精力和减少了中间开销;又拍云存储目前在所有的外围节点基本实现了这种精简+便携式的嵌入设备,这取决于我们的硬件定制环境,全网加速(DNSPOD平滑切换),节点集群规模效应,无单点故障,才能把嵌入式灵活应用起来。
我现在在又拍云存储担任运维总监一职,作为初创的合作伙伴,也付出大量的时间和精力去呵护培养这个产品。。。很高兴看到又拍在静态存储领域专注耕耘了8年,经过坚持不懈的努力,现在我们的服务得到了互联网大量客户(>30000家客户)的认可。非常感谢大家的厚爱,我们一定会做好自己的本份工作,再接再厉。
作为团队负责者,我希望能够做到如下几点:
请进来=了解外面的经验和成果,不至于井底之蛙,夜郎自大; 站出来=这是个人价值的体现,也可以锻炼演讲口才和临场表现能力,生活总是需要一些英雄; 走出去=互相学习,交叉分享,并行进步,学习是个翻翻的过程;
又拍云整个体系内部是主张用好轮子,改造好轮子,非万不得已不会重造轮子的。这就像是站在巨人的肩膀上,做一些更有意义的事情。所以,我们在Nginx,riak,erlang,hadoop,redis。。。等很多领域都有深入的研究,包括和开源的团队或者朋友们一起沟通,如GDG,各种开源组织,淘宝阿里团队的互动。。。
监控体系早期使用nagios+cacti,现在慢慢转向使用zabbix; 日志分析策略是基于Nginx的C扩展模块,在内存保留5分钟日志,做简单的冷热链分析,然后再保存到磁盘,后端使用hadoop做流量方面的统计; 自动化用的最多的是rsync+ssh+slackware风格的包管理和部署,但现在也有在研究puppet/ansible自动化工具;
简单的说:就是 专注,专业,坚持,共赢
专业、专注: 我们只做针对移动,游戏和互联网公司的静态资源的存储和分发加速,就像挖金矿的故事一样,我们只卖牛仔裤和铲子,现在的互联网已经转向以服务卖点的,未来会更加细分,所以用我们的专长去弥补互联网的短板,让创业者更加轻松简单,我相信可以把这一领域深耕服务好。专业的事交给专业的人去做,这也是我们的宗旨,包括我们一直使用兄弟公司如DNSPOD,监控宝的VIP服务一样,感谢他们。
坚持、共赢 我们在图片领域到静态资源,坚持了8年,经历了一些风雨,而且一直坚持技术为主导,并没有很花哨的做市场公关和推广,现在主要的销售策略还是以口碑营销来服务好客户。除此之外,我们也跟Ucloud,Discuz等伙伴,及InfoQ,CSDN,开源社区保持良好的沟通,希望能为互联网创业环境越来越好贡献自己的力量。
这样的好处是,又做生意又交朋友,我们很享受这种互惠互利的过程。
因为我不是专业的白帽,红帽,黑客,红客,这个问题也许问我们的合作伙伴ucloud-季昕华(老季)更加合适吧。我对抗过CC/DDoS攻击,我只能说说这方面的经验:
技能:要有整体的架构意识,原则就是不能是单点,性能不能是单点,流量不能单点,必须要有分布式或者集群的概念。动态网站动静分离,动态元素在性能上要充分利用内存缓存,如memcache,redis;要去除无状态化(如分布式消息和任务队列,这是程序员做的事),静态网站可使用CDN加速服务,像又拍云存储的CDN是全网加速,可以避免单点故障; 业务:任何攻击都有作案动机和攻击成本,不要为了技术而技术,而是联系业务部门协助,查清楚来历,共同寻找对策; 资源:对抗攻击是个公司上下团结一心的系统工程,没有资源没有预算,是做不成事情的,但要用老板听得懂的话寻找帮助,明白什么才是公司长久发展的根本;
化“天花板为托板”:把自己放在一个培养新人的管理角色,不让自己成公司瓶颈和员工的天花板,鼓励新人们去尝新和处理故障,增加自身的技能和实战经验;信任,互助,激励,他们会持续不断创造惊喜。
制作“自动化工具”:利用自己的经验抽象业务成程序模型,制作或培训自动化脚本的编写,提高团队的工作效率,让员工节省精力和时间去学习其它新知识;
承担“高精专”项目:提前准备最新知识的研究和可行性分析,整理成文档作公开培训,再交给团队去深入研究和实施,转化成生产力,积累一线经验再反馈完善文档,良性循环;
积极提倡“知识分享”:各种案例和“坑”都会整理成wiki文档,通过文档共享,定期分享讲座,鼓励员工撰写高质量的,可读性很强的文档,开口培训,增加感染力和自信心;
鼓励“参与开源交流”:公司会有经费鼓励员工走出去参与技术交流大会,闭门造车耗时耗力,不如专业的人点拨。也会有购书经费,团建活动经费,茶歇文化;
运维工程师的修炼之路是做个懂业务、运营、开发的运维工程师(@Ucloud优刻得@benjurry 的原话),信息量很大,但很受用。
具体现在运维工程师要面临的挑战:
面临devops的挑战 面临新兴技术,如云平台的挑战 面临海量,大并发的运维能力的挑战因此我建议
至少学门可以打通前后端的编程语言如python,ruby,无论是运维还是开发,都能够灵活应用; 修炼自己的运维能力,运维工作要标准化,流程化,尽量做到脚本自动化,才能有时间研究新兴技术; 面对云的挑战,博,可以熟悉各种云的部署和云端运维;专,或者加入云服务团队,专注于某个云服务领域,如云存储,云加速; 多参与社区活动,结交朋友,扩大交际圈,也可以做做技术支持,锻炼口才,提高与客户的互动;
目标职位:架构师(其实架构师是个头衔,也可以是一个团队) 目标内容:做个懂业务、运营、运维的软件工程师(信息量大,够喝一壶了)技术领域
闲下来:精通bash,sed,awk三剑客编程;rpm/puppet自动化部署,节省时间和精力;关注新技术,了解和掌握,甚至深入研究,做好铺垫 跳出去:学着3P编程,至少精通一门编程语言,能够打通前后端的最好,如Python,Ruby;喜欢后端的可以是erlang/go,前端可以是js/php/Nodejs 常动手:技术是个竞技项目,无论是否有天分,都要勤加练习,熟而巧,巧而精,因为运维是个限时拆弹的高压工作,速度与激情的结合非技术领域
多看书:看书很重要,查漏补缺,技术书和情商的书都要看,可以文艺,但不要抱怨,懂得感恩和回馈,心明见性(十年学佛小结); 方法论:多做笔记,温故而知新,修订完善(WiKi);学思结合,学而不思则罔,思而不学则怠;信息多!=长知识!=生智慧,要学会沉淀,举一反三 心态正:正确理解牛人的内涵,要学会与人同行,任何人都有可以学习的本领,关键是你的心态 讲故事:尝试发表文章练文笔,或翻译英文的最新资料,尽多参加甚至组织开源活动,锻炼自己的口才和交际能力,经营好自己的影响力,可以交到更多的朋友上述观点都是告诉大家,如何修炼内功,其实我更强调团队协助,其实个人英雄和团队协作并不矛盾:
内修提升能力,外练结朋交友,两手准备,脚踏实地; 戒骄戒躁,贵在坚持,每天进步一点点,功不唐捐; 能力决定高度,细节决定成败,成功总是眷顾有准备的人;最后,我仍然要不断强调的一个观点:
架构师它可能不是一个人的角色,而是一个团队的统称,它可以:
不必冲锋陷阵,就可以纵观全局,运筹帷幄,调度所有的资源(运维架构师的功能) 可以带领和团结团队,高屋筑瓴,因时制宜的实现解决方案(软件架构师的功能) 可以把握公司业务方向和深度,洽谈合作,控制成本(业务架构师的功能)