【杭研大咖说】王新勇:死磕云原生的“懒人”

在生活中,作为户外运动爱好者,王新勇常常于周末爬山,享受攀越高峰之后见到的无限风光 ;在工作上,作为网易杭州研究院(网易杭研)的系统开发专家,王新勇则钟情于征服云计算领域的一座座“山峰”。业务部门邀请他去排查问题,常常惊异于他找出异常的速度和解决故障的效率,心悦诚服地称他为“大神”。

然而,在王新勇看来,自己不过是一个“懒人”。因为“懒”于投简历、笔试、面试,研究生一毕业就早早锁定声名在外、环境独特的网易杭研的工作;因为“懒”于做重复的事情,尽量把重复的需求都写成代码,尽量采用自动化(或者说DevOps)工具;因为“懒”于查阅所需要的知识,把常用的技术细节、工具用法都装到自己大脑之中……正是这些懒人举动,让他的工作事半功倍,面对难题时举重若轻。

网易杭州研究院系统开发专家 王新勇

求职“懒”:做有趣的事

2013年,王新勇研究生毕业。相比一些同学不停地跑场,不停地投简历,不停地笔试、面试,王新勇显得比较懒,在拿到网易的offer(也是第一个offer)之后,便决定放弃其他所有的面试和笔试。一来网易是成熟的大公司,工作环境、福利业界有名;二来杭州离安徽老家不远;三来实习期为多拿几份offer奔波太累。

当然,“懒”也不是无条件的,前提是这份工作足够“有趣”。在王新勇的认知里,“有趣”的莫过于底层开发。

在学校,在实习期间,他鼓捣的都是与网络、分布式通信中间件相关的东西。实习时使用了一些现在看来比较过时的技术,比如自适配通信环境ACE (ADAPTIVE Communication Environment)、CORBA等。他还主导过一个DDS(Data Distribution Service,OMG的规范)的实现,并把这个服务跑在各种硬件架构的系统上,有些系统甚至还没有POSIX接口支持,需要基于平台相关的接口进行开发。这些经历,加深了他对网络协议栈、硬件知识以及操作系统的理解。

网易杭研当时在集团内推广的云计算,对于王新勇而言是有趣的。尽管在网易杭研云计算技术部总监,信奉技术至上的陈谔的带领下,团队无论校招或社招,对求职者技术能力的要求都达到了近乎偏执的程度,王新勇还是顺利地拿到了这份offer。用他的话说,有趣的事情,更能够激发他的能力,更容易让他做好。

加入网易后,王新勇参与了开源项目Pomelo的研发,这是一个使用Node.js写的游戏服务端引擎。之后基于Pomelo引擎做了网易内部的消息推送系统,用于给移动端做消息推送,该系统是网易内部使用最广泛的平台之一,目前还在持续维护中,高峰期的同时在线并发连接数超过1000万。

再后来,他开始参与设计和开发网易云的负载均衡服务(NLB),这个服务属于云计算的核心服务之一,负责做应用的流量分发,目前大范围应用于网易互联网业务中。

2018年起,王新勇开始负责容器以及Kubernetes平台的开发、维护以及对内的咨询工作。主要工作一是针对开源的Kubernetes以及容器,进行插件以及扩展的开发和定制,包括网络插件CNI,存储插件CSI,以及一些调度扩展等,实现开源项目与网易内部基础设施及业务需求的无缝结合;二是负责维护整个容器生态的软件包发布,同时跟据业务使用中遇到的问题,对这些软件进行bugfix或者backport上游的bugfix;三是针对内部业务进行容器化的方式、方案、过程进行指导和建议,帮助各个业务方解决在实际容器化过程中遇到的各类与Docker、Kubernetes相关的问题,并形成沉淀。

容器以及Kubernetes服务,作为容器云模块被集成到网易轻舟微服务平台中,目前已经服务了包括网易严选、网易传媒、网易云音乐、考拉海购等业务。最大的集群规模是考拉海购的线上业务集群,而且已经经过了双十一、黑五大促的考验。

这些经历,这些成果,让王新勇更加确信,他在网易杭研的工作,就是“和一群有趣的人,一起做着有趣的事”。

工作“懒”:死磕云原生技术

云原生、容器在今天是主流技术,但容器的价值在四五年前并未广为人知。从Docker开始出现,网易杭研就预见到了容器的好前景。在王新勇看来,Docker可以满足“懒”的需求,它提出的镜像打包技术是基础设施的一个很大的进步。在这之前,为了实现不可变基础设施的理念,需要要通过云主机快照的方式,在云上完成类似的部署的一致性,整个过程非常重。而容器技术,这种不涉及虚拟化的打包技术,使得这种“不可变基础设施”的理念,无论是公有云上,还是在私有数据中心,都可以非常方便地使用。

今天,Kubernetes编排、微服务化、Service Mesh、Serverless等技术,都是围绕容器来设计的。最新Linux的LTS版本4.19的内核,对于容器的支持也越来越稳定,修复了不少之前版本的bug。由此,王新勇认为,在没有新的颠覆性的技术出现之前,容器技术将会一直在IT基础设施层面扮演一个非常核心的角色。在网易内部,当前的互联网业务,都已经实践了或者正在准备容器化。目前看来,容器化确实是一个值得死磕的技术方向。

当然,容器化并不容易。从网易的实践来看,容器化主要有两大挑战:

首先是业务方对容器化的不适应,之前使用物理机以及虚拟机的很多玩法,在容器化的场景下,发生了变化。比如容器化以后,容器的IP将不再固定,之前的很多基于IP做白名单、基于IP提供服务的做法,就不再适用了;包括一些监控metric信息,使用容器后的获取方式、展示形式也与之前有差别;具体运维操作上,之前的运维都是命令式的,转向Kubernetes之后,变成了声明式的,但是大家的运维思路上,还是原来的命令式的玩法,也会有不适感。

其次,大规模的容器化面临很多技术上的挑战,比如Docker会有bug;操作系统包括一直到4.9内核,在cgroups的支持上,都还有不少bug;不同的业务类型,需要进行针对性的调优;随着集群规模的增大,硬件故障的概率会大幅增加哎,需要缓解机器硬件问题导致宕机的影响。

针对这两类问题,王新勇和他的团队都给出了他们的答案。

针对业务的不适应,团队会提供大量的咨询和支持服务,会去了解业务的第一手需求,(需求一经转述,需求可能就变形了),然后根据业务的第一手需求,给出较好的实践建议,帮助业务更好地去使用Kubernetes。另一方面,比如针对大家的IP白名单需求,团队也做了自己的全局IP管理服务,支持了容器的池化分配以及一些特殊容器的IP固定,通过这些方式去降低业务在容器化改造中的不适。另外,在网络方面,云网络也和容器团队一起,做了大量方便业务方迁移的解决方案。

针对技术上的挑战,团队做了大量的优化工作。从操作系统、Docker等系统软件的bugfix以及参数优化,到部署架构根据用户的需求做持续的调整优化;同时也梳理常见问题的应急处置方式,形成经验积累。对于所有用户遇到的bug,都不放过,会持续跟进寻找root cause。目前,用户一旦报障,或者通过监控系统监控到故障后,团队基本上都能很快地在积累下来的故障情况中找到故障类型,并能够迅速按照缓解恢复方案,快速完成恢复。

容器只是云原生的开始,当前比较火的技术,微服务化、Service Mesh、AIOps、Serverless、混沌测试等,接下来都会逐步落地。当然,也有一些问题需要解决,比如:

微服务化以后,系统拆得很散,如何做系统的跟踪、监控;
Service Mesh由于引入了proxy,对业务的调用延迟有影响,怎样优化;
获取到大量的监控数据的情况下,如何能够更好地帮助业务做出诊断;
针对一些事件触发型的业务,可以引入FaaS(函数即服务),在引入FaaS之后,如何解决冷启动的延迟,如何做更好的资源调度,也引入了不少挑战;
当前混沌测试的话题随着云计算的普及也变得热了起来,毕竟云计算并不保证100%的SLA。如何做更好的故障模拟,帮助业务方发现问题于暴露之前,也是一个挑战。
总的来说,当前大家已经逐步从使用云原生和容器技术,转向了怎样用好云原生和容器技术。王新勇表示,作为基础设施服务提供者,团队也会在这些方面持续投入,以轻舟平台为载体,帮助业务能够把容器技术用好,达到提效降本。

学习“懒”:技术细节与工具烂熟于心

应对云原生挑战也是一个浩大的工程,然则如何才能保持懒人本色,不至于陷入“996”的泥淖之中?王新勇的回答是,要更“懒”,多思考自己的工作,重复的事情,最多做两遍,如果要做第三遍,就要写代码了。

他相信磨刀不误砍柴工,“不管再忙,都要尽量去深入了解工作相关的技术细节”,他说,虽然当时可能用不到,但是一旦用到了,比如排障时,胸中有细节,就可以节省很多时间。设计一些新系统时,对细节理解到位,也可以缩短调研时间,达到事半功倍的效果,同时也能提升自己在职场的竞争力。

对于王新勇来说,云原生是有趣的技术方向,他能够保持好奇心,更深入地去了解相关技术的实现细节。“一旦你决定去深入了解某一个技术的细节的时候,你就会发现你不得不去了解更多的周边知识,结果就是从线到面,不断拓宽自己的知识面。”

王新勇分享说,多年前接触过的一位大牛告诉他,“你所有要学的知识其实都不用搜索,都在自己电脑的本地”。从那以后,他就养成了阅读Linux man的习惯,每当好奇某一个东西如何实现时,他就习惯性地先阅读man,然后再去阅读代码,就比较容易理解代码了。他表示,这个习惯对他的帮助很大。

同时,对于常用工具的使用,也要做到烂熟于心。有很多人并不习惯深入地了解一些常用工具的用法,每次用到时都要去网上临时搜索,或者整理了自己一些常用的用法记到小本本上。王新勇认为,这样带来的问题就是如果每次都去查一下,不管是网上搜索还是查自己的小本本,都会浪费很多时间,还要回忆上下文。

知彼知己,百战不殆,这其实与容器化技术挑战的处理如出一辙。对于容器化相关的问题,王新勇同样烂熟于心。目前团队基本上没有遇到过,出现bug或者用户报障后,故障情形不在已知故障列表中的情形。“现在,业务方给我们报障后,我们都可以很快地给出解决方案,因为好多问题,对于我们来说都是已知的。”他自信地说。

posted @ 2019-12-10 14:48  网易数帆  阅读(272)  评论(0编辑  收藏  举报