@gaoxiaoyunwei2017
2018-05-08T14:07:35.000000Z
字数 4430
阅读 489
白凡
分享:王俊峰-唯品会
编辑:白凡
讲师介绍:我叫王俊峰,来自唯品会。不知道大家对唯品会了解多不多,我们公司的定位是全球精选。我前期在传统的金融公司做运维工作,后段时间在互联网方面,最近几年我开始关注运维生态建设和运维DevOps的方面。
今天分享的内容有四个方面:
唯品会的体量属于居中的互联网公司,希望我们的实践能给相似体量的互联网同仁一些借鉴。
唯品会的业务逻辑是比较庞大的,除了电商,还有物流、金融,在前期的快速发展阶段,技术栈是先快速上线,各种各样的技术架构都有,到后期,金融外购软件的引入也有不太规范的东西。不同人员面对不同的业务线,由于业务线的不统一,导致业务运维的盲区非常多,难以实现人力共享。我们建设了非常多平台,发布、变更等等都有,但是总觉得做事情的时候差一口气,没有办法形成非常大的力量支持测试人员,是伞兵作战的状态。因为技术栈的不统一,做平台建设的时候要考虑各种特殊场景,甚至妥协。
于是我们开始反思:
对此我们总结了四个经验:
道理大家都清楚,最关键的是怎么迈出第一步。有一个非常重要的思想,在唯品会这样的互联网公司,我们最关键的思想是技术组件思想的提出,纵向是组件,最底层硬件、操作系统、各类应用基础软件、应用框架等都可以拆分成一个个组件,有助于组件服务化和组件研究的技术深度。横向是流程,运维相关的发布流程、变更流程、故障处理流程、问题跟踪流程等,这些流程就像线来串联各项工作和组件。通过组件的方式,我们终于有了追求的目标。由于组件的提出,组件思想打破了运维绑定业务线的工作模式。
组件思想奠定了标准化基础:
这是标准化建设的大蓝图(见PPT),运维标准化是非常大的项目,我们拆分了十几个小的项目。
这是结合唯品会的业务特点,根据公司的具体业务情况进行了具体的拆分(见PPT)。左边是技术流程栈,右边是我们得出的产出。红色是跟业务特性相关的,红色以下的是跟运维相关的。
开发提一个需求,让运维改生产上的某个配置,这非常痛苦。开发有没有权限改?还是运维去做,运维又不懂,开发又觉得你是小白,懒得跟你解释,运维没有精力学习成百上千的业务系统。
解决思路是分层治理,专业的人做专业的事情。比如,某一购物车的参数改动之后影响到业务逻辑相关的,这样的事情就交给开发去做,跟组件相关的事情,专家组做这部分工作。他们去做,不可能开发人员直接到线上去改某个路径下的某个文件,于是就建设了Janitors平台,把各种配置文件有一个标准的梳理,赋予开发人员一个权限,管理自己业务系统的参数就可以了,可以及时改参数,及时生效。运维人员关注下面哪一层,基于Puppet来做运维管理。
当机器超过1万的时候,zabbix是不堪重负的,唯品会最初是有多套zabbix做监控。
理想的监控:
以上这些,zabbix都不满足。
监控标准化目标拆分:
告警发送对象统一来源是CMDB。
我们做了自己的产品是VIPFalcon,是基于openfalcon的二次开发,现在的监控节点是25000左右,有500万多的metric,通过数据流计算,重新聚合开发数据。这些数据通过hive来落地进行数据分析,把数据价值发挥出来。
通过监控标准化后,VIPFalcon和Zabbix的对比(见PPT),从一个地方能看到整个公司所有的基础监控的信息,不需要多个入口。采集扩展方面,VIPFalcon是基于Plugin方式,面向HostGroup维度,通过Git进行维护。管理方面,和运维生态、编程语言方面,VIPFalcon都超出Zabbix一大截。
通过这样工作的效果,我们对内实现了质量提升,大家的工作效率得到提升,维护成本下降,提升用户体验、控制了风险。对外价值输出,打通运维体系,为开发赋能,站在开发的角度帮他们思考资源使用的问题。精细运维、运营,业务成本核算是数据价值方面的一个产出。
变更跟所有运维人员是紧密相关的,运维背的所有锅都跟这方面有关系。关键是两个思路:
这些工作固化下来后,我们把各种各样的变更固化成一个个的APP,在变更平台上输出参数可以一键式进行变更。
什么叫生态?我们建设了这么多自动化系统,每个系统都需要人执行一些任务的话,比如做变更还需要人点击一些按钮,这是还处于自动化的初期。想建设的生态是希望系统驱动系统,所有的系统之间是通过接口调用的方式,人在这个过程中尽量少地参与。
打通运维生态,原来的方式是以流程为核心的,大多数人对流程都是非常反感的,没有人真的喜欢流程这个东西。后来,我们转变为以运维流程+CMDB为核心的方式去实现。流程是非常教条的东西,打个比方,流程告诉我今天下午三点可以做A变更,是不是真的可以做呢?他没有权衡场景、对象、时间的因素,如果下午三点对象有问题,这个流程不应该走下去,但是流程比较傻瓜式地告诉你可以走下去。
这是唯品会的具体业务,中间是流程管控和以CMDB为核心,自上而下是跟运维相关的落地。从组件到部署标准,到各种各样的自助平台。流程打通之后,监控可以发出来,希望通过监控驱动来自愈。比方,磁盘告警到了90%有一个告警,调用自动化的平台上一个磁盘清理的APP,由它去执行。清理完之后,再告诉监控系统给我发一个短信:发现了90%的告警,也执行完告警。这是比较理想的工作状态,这一点已经实现了。
关于生态打通方面,一开始的思路是比较宏大的,原来想的是设计一个完美的流程,把事情完全打通,后面发现想得太天真,很难有多么完美的方案能把运维相关的工具体系打通,我们的思路还是一个一个地去打通。比如ABCD系统之间的打通,先打通AB,然后打通CD。变更上的几个问题都是大家一直会碰到的(见PPT),建设了非常好的自动化变更的系统,也非常灵活,但是这是一把双刃剑,DevOps变更失控,变更流程不遵守。
变更打通设计思路:
这是我们的一个体系(见下图),中间是有一个标准模版库,技术专家组设计了一套标准变更,SDK跟左边之间的关联是从负载均衡管理平台、定时任务管理平台、云平台、运维平台以及其他的,打通这些平台给开发人员赋能。开发想做简单的业务线上的配置,原来的做法是开发人员要找运维说要做这个配置,运维说等一下,要提一个变更流程,流程走起来之后,发现老板又不在,要找老板审批,这个流程如果顺利的话要大半天。现在是开发在tools平台上提交一个申请,中央管控认为风险非常低就可以直接做了,开发一件事情就做完了。这个事情带来的收益就是固化标准变更、简化流程、有效控制变更风险,给开发赋能。
我们的思路是整个服务器的生态,从初始化、部署、运行、暂停到服务下线,所有事情都不需要人工干预监控的设置,所有的入口都是监控系统和CMDB之间打通的。所有信息来源只有一个,就是CMDB。当CMDB探测到某个信息有变化,它会写一个消息队列,监控系统就去消费这个消息队列,然后执行相应的监控的挂载或下线的流程。
这是具体的实现(见下图),中间还是监控系统,左边是告警和数据聚合。
通过前面的标准化和生态打通之后,收益有两点:
回到刚开始提出的三个问题,质量、效率和成本方面都有明显的收益。