大Boss,小Boss
大概除了马云、马化腾这样的顶级领导外,每个人都有个领导,按外企的说法,也叫 Boss。
实习生、新员工上面有一个小 Boss,管好自己的一亩三分地,为新人的成长负责;小 Boss 上面还有个大 Boss,管理好整个部门或者一个团队,向公司和 CEO 这个最大的 Boss 负责。
大 Boss 的特点是什么,睿智、高瞻远瞩、慧眼识珠、坐危不乱......我们能想到的用于形容杰出人物的褒义词,都可以拿来安到大 Boss 的头上。
当然,光鲜背后也不缺少黑暗,每个大 Boss 可能都会被下属“咒骂”:不切实际、好高骛远、健忘、满嘴跑火车。咦?我是不是说太多实话了?
老板说出去的错话,要公关黑着脸去圆化;老板吹出去的牛,要产品和研发哭着来实现。
对此感触最深的,大概莫过于刚踏入职场的实习生小吴了。
小吴在他们宿舍排行老八(我也不知道他们是不是住了个假的宿舍,能装下这么多人),因此被宿舍人称为八哥。
不知道此人具体水平如何,但是我想光凭他的名字,我们也不能对大 Boss 招他进来有任何不满,毕竟贵司的代码风格都是这样的。
相比 Copyright,我们更重质量。在这么魔性的公司里,感性毕竟也很重要,谁都希望自己写的代码没有 bug。
带小吴的 Mentor 姓卜,名党继,在公司内被尊称为“不宕机”,因此每逢重大上线节点上,卜师兄都要被邀请到现场坐镇。也许真是有灵性,只要卜师兄在的上线,之后就没发生过因为上线而产生的故障,这在公司内部已经成为奇谈。
事情起源于上周末的周会。小吴毕竟年轻,社交活动比较多。经常和同学、朋友因为聚会不知道去哪里合适而烦恼。
既不想太远,交通还要方便。因此,他萌生了一个想法。能不能根据参加人员的地理位置信息,用软件来帮人们选择合适聚会的候选地点呢?
小吴花了三天时间,按照这个思路,写出了一个 LBS(location-based service)服务的 Demo。
在周会上,小吴和同事们分享了这个小服务,并做了 Demo 演示。本来只是写着玩的,结果在坐的领导们都觉得这个不错啊!值得一试。
于是大 Boss 当场拍板立项,任命卜师兄为架构师兼手机端 App,小吴为后端服务端的开发。
老板看了下界面说,整个系统不复杂,既不需要设计师和前端,也不用产品经理,全都由卜师兄来担当。开发难度也不大,那就两周后上线吧。
老板毕竟是老板,一切都以目标导向和数据说话。与此同时,还为他们设定了一个小目标——那就是上线后第一个月先发展 10 万个新用户吧。
小吴一脸黑线,对师兄说:“这不可能吧!”
卜师兄则很淡定,生死看淡,说干就干。
卜师兄:“小吴,你先估算一下这个项目大概需要多少工作量吧。”
小吴 :“师兄,放心!我大学专业课都在 90 分以上,尤其是软件工程和数据结构,都是我强项。咱先定个计划,然后概要设计、详细设计、再编码、测试,最后上线。由此得出,30 个工作日差不多可以完成任务。”
卜师兄:“小吴啊,其实现实中我们互联网公司也很讲究“糙快猛”的。就是,开发快、上线快,一把梭。”
小吴瞪大眼睛:“还有这种操作?现实吗?”
卜师兄:“有一个东西叫 DevOps,你加班了解一下。我呢,得先回家了,毕竟我是海淀家长!”
上线前两周
隔天。
小吴:“师兄,网上了解了一下,大概找到个这样的图。这不还是先做计划,再编码、测试和上线么?”
卜师兄:“仔细看,图里的各个流程处于一个闭环中。”
小吴:“哦,这就叫迭代吧。我知道了,我在学校也读了很多敏捷开发和微服务的书,好些有些类似。”
卜师兄:“算你还有点悟性。再仔细看看,睁大眼睛盯着,别眨眼。”
小吴(看了一会):“哎呀!我有点晕,这个圈好像转起来了。”
卜师兄:“对,就是这个意思。不仅各个阶段要连续起来,还需要快速迭代,“转”起来。”
小吴:“那采用微服务、快速迭代就算是 DevOps 了么?”
卜师兄:“算......也不算。”
小吴:“不理解,到底是算还是不算。难道是薛定谔的 DevOps?到底怎么才算 DevOps 呢?”
卜师兄:“自己悟!你先安心写代码吧,不要妄想一口吃成个胖子。”
上线前一周
小吴:“师兄,代码写完了,本地也简单测试了一下,下一步该干什么了。”
卜师兄:“搭一套测试用的 Staging 环境,再做一下测试吧。”
小吴:“那是不是还得买几台服务器?现在去网上订购服务器好像两周都运不到吧,要不我去鼎好看看?可是鼎好好像已经没有攒机的了。”
卜师兄:“不用那么麻烦,现在都云计算时代了,申请即用,按量收费。只要你有信用卡,想把“服务器”装在世界上哪个角落都可以。你这个服务很简单,先申请个虚拟机吧。”
隔天小吴向师兄感叹:“云计算真方便啊,几分钟就启动了一台虚拟机出来,昨天轻轻松松的就搞定了虚拟机的安装。”
卜师兄笑着说:“小心上瘾。”
小吴:“不就是虚拟机嘛,有啥好上瘾的。我还得先安装 Tomcat、Nginx、MySQL 和 Redis,还好我以前学过 Ansible,等我写个部署文件吧。”
卜师兄:“嗯。Infrastructure as Code 是个不错的方法,用代码来描述基础设施,能大大提高系统部署的速度。”
一天后。
小吴:“昨天晚上搞到十点多,终于配置好了这台虚拟机。但是不过好像这台机器中自带的 Java 是 JDK8,我本地的 Java 是 Java 10,有些不太兼容。我还是先把服务器中的 JDK 升级一下吧。”
三个小时过去了......
小吴:“为什么服务还是启动失败呢?本地好好的啊,真是太奇怪了。”
卜师兄:“别猜了,先看日志。”
也没什么其他办法了,小吴只好通过 ssh 连接到服务器,找到了 Tomcat 和 Nginx 的日志,在多个日志文件中使用 tail 和 grep 命令来搜寻可能的线索。
终于,又发现了一个 Java 依赖库的版本不匹配问题。有的时候发现问题很难,解决问题很简单,当然也有的时候发现问题很简单,但解决起来就难了。
库依赖的问题就属于后者,你依赖我,我依赖它,环环相扣,甚至出现不兼容以及死锁,哪个语言的包管理器能做到堪称完美???
没办法,小吴最后通过手工拷贝其他版本的库的方式解决服务不能启动的问题。不过此时一天又过去了。
上线前倒数第二天
小吴开始着急了。Staging 还没开始测试呢,看来延期是板上钉钉了。小吴的神情也开始紧张起来。
昨天回家太晚,今天早上来得有点晚,到公司的时候,师兄已经开始在 Stagging 环境上测试了。
卜师兄:“你看这有一个小 bug,就是当获取不到自己的位置信息,比如信号不好或者飞行模式的时候,这时候请求服务端会返回 500 错误,这个应该在服务端做一下异常处理。还有这个地点列表的返回结果,最好做下分页,不要一下子返回几百条数据。”
还好,这两个问题都很好修正,不过修正后的代码构建,以及将构建成果拷贝到服务器端再部署这一系列过程也很麻烦,在做过几次这样的操作之后,小吴编写了一个简单的脚本,批处理的进行上述操作。这样,又能将效率提高不少。
就这样测测改改,一天就过去了,晚上小吴竟然感觉到了有点累。
回家路上,小吴问师兄:“这样部署起来太累,有没有图形化的部署界面么?或者其他工具。”
卜师兄:“其实我们公司采用了 Docker 做应用程序的打包和分发,Jenkins 做自动化构建和测试,以及部署。所有代码都使用 Git 管理,review 也在 GitLab 上。代码合并之后,Jenkins 就会自动进行构建和测试,并使用最新的程序部署到 Staging 环境。在需要上线的时候,只需要触发一个 Jenkins 的 Job 就可以了,不需要登录机器,也不需要执行任何命令。由于你刚来没几天,还没有给你介绍这么多。”
小吴眼睛一亮,好像很有收获,一边听师兄介绍,一边自己思考着。
第二天,小吴早早来到公司,打算也将自己的程序采用 Docker 的方式来部署。
当然,这一天小吴完成了当天的目标,但是离两周后上线的目标却是还有很大的一段距离。
你老板还是你老板
眼见下周周会就要来了,小吴本以为会惹 Boss 大怒,已经做好了挨批的准备。但是卜师兄的表情却很轻松,这让小吴疑惑不已。
不过了解到进度的大 Boss 说了一些话,打消了小吴的疑虑,也让他如释重负。
大 Boss 说:“其实两周后上线不是唯一目的,让你掌握现代软件开发流程才是最重要的,即使是很短暂的实习期,相信这段时间的工作经历,对你将来的工作一定会大有裨益。我们雇佣员工,不仅是为了公司创造价值,培养员工的能力也是公司的责任。”
小吴心想,却不敢说出来:“明知道两周上线不可能,还这么吓我,这几天头发都白了好几根。”
大 Boss 接着说:“能力就像海绵里的水,不压一下,你都不知道自己有多厉害!”
小吴已经无言以对了,但是这次上线还是让他对大 Boss 倍加感激的。
番外篇
在接下来的三周中,小吴手中多了一本书。同时在师兄的指导下,也学会了公司的这套开发和上线流程。进步很快。
不仅学会了 Vagrant、Docker 和 Jenkins,还掌握了 ElasticSearch 等软件的安装和使用方法。再也不用 ssh 到服务器上查看日志了,可以将更多的精力集中在编写自己的业务代码上了。
对一些流行的概念,比如蓝绿部署、不可变基础设施、持续集成和持续部署,小吴讲起来也是头头是道。
当然,最重要的是小吴凭个人兴趣写的 Demo 也以 Alpha 版的形式上线了。
上线之后,小吴问师兄:“这会儿您觉得我能不能算的上是已经掌握 DevOps 了?”
卜师兄:“嗯,可以这么说。”
小吴:“不过我只学了一个多月,了解了这么点内容,是不是只算是了解到了一点皮毛?还有什么需要更深入学习的么?”
卜师兄:“嗯,你如果说这是皮毛,那我只能说这是非常重要的皮毛,真是这些皮毛,才能让 DevOps 真正的落地,首先我们必须学会这些方法和工具。DevOps 的核心是“道”。当你能够自己发现问题,解决问题,才能算是悟道,到时候也就可以说是真正的掌握了 DevOps 的核心了。”
小吴:“我知道了了,就跟张无忌说的那样,要忘了招式,就算是真正悟道了吧。”
师兄:“不是,忘了招式,等于程序员不会使用编程工具。你能口念大法用意念编码么?不能,所以说术很重要。道要用心去悟,这是核心,但是术需要去践行,是要拿来落地。拿我们软件来说,就是要选择最高效的编程工具、灵活的基础设施管理软件、可扩展的编程模式等等。”
其实你看的那本书是大 Boss 推荐给我的,只要我们理解了 DevOps 的精神,便能知其所以然,就不会满足于模仿别人,或者热衷于使用最新式的工具了。
突然,小吴觉得老板的身影更加伟岸了,敬佩之心油然而生。大家都很好奇大老板的那本书叫什么?小吴二话没说,便将这本秘笈安利给了其他同事。如果你也好奇他是怎么做到的,那不妨一起来读下这本秘笈吧!
☟
专为初学者和初学者团队量身打造的
DevOps的实践指南
《DevOps入门与实践》
作者:DevOps引入指南研究会
译者:刘斌
本书通过具体的示例,详细介绍了在实际的团队开发中引入DevOps的流程。第1章介绍DevOps的概念;第2章介绍如何在个人环境中引入DevOps;第3章介绍如何在团队中引入DevOps;第4章介绍DevOps的具体实践和应用;第5章介绍基础设施即代码的实践;第6章介绍团队成员在团队中普及DevOps的方法。
标签:上线,两周,开玩笑,代码,DevOps,Boss,老板,师兄 From: https://blog.51cto.com/u_15767091/6854440