BAT解密:互联网技术发展之路(10)- 运维平台技术

备注:本来想自己写一篇运维体系的文章的,但毕竟不是专业运维人员出身,担心讲的太肤浅,因此转载我的好朋友王金银(江湖人称老王)同学发表在InfoQ的运维体系介绍。老王的牛逼相信很多同学已经领教过了,全球运维技术大会深圳站一个人专场讲运维能讲3个小时,而且会场还爆满,更多老王的介绍可以参考文章的最后,也可以关注老王的微信公众号:互联网运维杂谈。

原文链接:运维平台规划体系全介绍

===================================================================================================================================

运维平台规划体系全介绍

识别运维平台的边界在哪儿,才能更好地构建平台,从而协助运维的日常工作。

在之前的文章中,谈到过“运维的本质——可视化”,在可视化的篇幅中,着重介绍自动化的可视化和数据的可视化;在后续的篇章中又介绍了“互联网运维的价值体系”,里面分解了几个维度:质量、成本、效率、安全等。以上都是为了清楚地梳理运维的内容边界,基于这个边界,我们再考虑如何进行平台支撑。可以说前两篇文章都是为今天这篇文章作为铺垫,用理念先行,然后再考虑平台落地,最后再细化其中每个内容。我更习惯用如下的方式来整体表达运维的工作方法和思路。

首先,价值导向。找到一个价值方向来牵引整个团队很难,但又必须找到,因这个牵引力就决定了团队的气质及后续的工作方法;之前的文章“运维价值体系”有详述,在此不细谈。

其次要有一个分而治之的系统,最后面向业务自底向上的集成,此时便能帮忙实现更好、更快、更省的交付价值。平台的建设需遵循一些的方法(自底向上、先后顺序等),先建设各个运维专业子系统,通过API的方式对上暴露服务,最后不同的业务平台去调用这些服务接口即可。缺少平台的支持,运维的质量、成本、效率都会直接受到影响。

如果要做好服务器精细化成本控制,此时需要一个平台来处理从服务器资源上采集的资源使用状态数据,并生成可视化数据报表,共享到所有团队中,在一致理解下,去驱动成本优化,越海量的业务对这个平台的要求就越高,从采集、处理、模型算法等都有很高的要求。

不要忘了这个平台还包含面向业务技术栈构建的平台。这地方有一个非常好的例子,在2012年左右,我了解到Google有一个非常强大的资源管理平台Borg(后面叫Omega),它的设计目标是“把数据中心看成一个芯片”。Google研发人员将开发的服务交给Borg,后续的服务生命周期(扩容、缩容、调度)都由Borg统一接管,服务被Borg部署到哪个IDC、哪个服务器,研发人员不用关心。后来Twitter根据Borg的思想,也开源实现了一个平台——Mesos,不过Mesos对LongTime的服务调度(如Nginx)支持不是太好,更适合MapReduce的事务调度。这两个资源管理平台背后的思想都值得深究,建议看看。

第三,基于平台,提供透明服务,确保服务提供者和服务交互者之间的交互越少越好。有了整合性的平台,透明提供服务也成为可能。平台整合就是避免服务被碎片化,从而让使用的用户看到的不是一个一个工具或者孤立系统,而是面向业务的整合服务。此时成本便可降低、变更的质量也会变成一个稳定态。不同的人、不同的时间执行相同的事务流程都能取得一致的执行结果。

最后,数据驱动。因所有线上业务服务和线下运维服务都有状态,需数据平台提供服务状态数据的采集、处理、分析处理能力,最后还能让运维人员自定义分析报表。技术运营数据和产品数据的一个很大的区别是,前者在数据挖掘方面的能力要求很少。这个地方有个建议,把线上服务的数据驱动作为重点(80%),把运维内部服务的数据驱动为辅(20%)。因为线上服务的状态会反作用于运维内部事务的优化。比如说从数据中发现现网的服务有一个故障,需要紧急发布版本,此时就会直接检验运维的变更部署流程、平台的完备性。

在平台体系部分,我采用逐级构建的方法,不断去细化其中的内容,因此会有一级视图和二级视图,在这个地方,我不敢到三级的模块级别,基本上不可看,下图是参照的是eTOM模型构建方法。

继续往下,可以分解出二级视图。

有了整体的平台体系视图,接下来看看每一部分到底是干什么的。

  1. 工作流引擎、权限管理。这两者都是基本的功能,因为其中会涉及流程,所以需要统一的流程引擎平台。另外需要部门、角色、用户的权限管理统一管理,不同业务配置不同系统的使用策略即可,这一块可以统一实现在单点登陆系统中。
  2. 基础设施物理层。这个视角和传统模式有些不同,主要是公有云的存在。因此在基础设施物理层这块,已经把云端资源当作一个底层基础设施来看待,后续的资源获取完全不同,其他的资源对象依然没有变化,依然是机房、机柜、网络、服务器,等等。
  3. 配置及服务,把配置当作服务来看待。在ITIL中叫CMDB,Configuration Management Database, CMDB也可以理解成统一的元数据库,比如说机房信息、服务器信息、人员信息、服务信息、业务信息以及他们之间的物理和业务拓扑关系等,上层的所有系统都应该关联到CMDB,变更后的信息必须实时反馈到CMDB中,确保其他系统能同步这份变化。因此大家都把CMDB系统当作运维的核心系统来对待,便于后续各个系统之间的互通。

    在我的经验中,CMDB建设还是有非常多的坑。如果你把iTop或者oneCMDB的产品当着标杆(都是开源,没见过商业的),那你的CMDB建设就完了。之前在一家传统企业,他们把文档都放到CMDB中管理,不建议这么做,文档就是SCM的事情。CMDB建设的核心准则:CMDB管理的数据一定要为了业务管理,业务管理上不需要的东西,就果断舍弃,比如说文档,和业务没有任何关系,就可以不考虑纳入,后续会有专门的文章介绍。
  4. ITIL服务——基础、ITIL服务——高级。在早期的文章中把DevOps和ITIL做了对比,ITIL是面向流程的,这个可以在运维平台建设中不做重点,不要主动去构建流程,会影响运维的敏捷性。基础部分实现一个事件和HelpDesk即可,事件管理在告警转换成事件之后,可以完整地记录,便于我们事后的原因分析,能挖掘一些问题,比如说是否某个业务、某个人、某类机器经常性故障,那就需要重点关注下。高级服务的部分,大家需关注一下,它是可以带来价值的,比如说可用性管理、能力管理和连续性管理。可用性直接的导向就是业务的质量;能力管理直接的导向就是成本管理;连续性管理也是和质量戚戚相关,如业务的容灾、备份管理等。但这些管理都不要在流程层面上去看,需要在一个平台中进行全面的可视化管理。后续的篇章也会有相应的介绍。
  5. 基础设施及服务。把底层运维资源的管理封装成一个一个的服务,供业务自动化平台使用。我把DNS、LVS(或者F5)甚至OS上的配置管理都看着基础设施部分,适当地向上延伸了一下。简单的划分原则是,在业务架构之外的,都可当着基础架构部分了。很多运维团队的建设重点都在这块。
  6. 架构及服务。把业务架构中的共性需求都剥离出来,抽象成一个一个的服务,最终让研发只需要关注自己的业务代码即可,比如说统一文件存储、统一Nosql存储、统一RDS存储、统一队列等。这块对运维的质量、效率、能力等影响最大,在之前的文章“如何化解研发和产品之间的矛盾”中重点阐述过服务公共化是唯一的解决之道。现实中如果有研发开发了一个公共组件交给运维,而不提供完整的Webadmin或者API的话,你也就可以认为他是在耍流氓,运维必须有严格的完整性交付要求。
  7. 数据及服务。只要有线上服务在运行,服务数据流经过的一切节点产生的数据,你都要采集、存储和分析起来,供不同的运维场景使用。比如说自动化调度,可以根据业务涉及的基础节点资源使用情况,制定对应的自动化调度策略;可以在数据中直接进行故障定位;可以在数据中做安全分析。之前的文章“数据驱动运维”中介绍过我做的一个数据分层体系。
  8. 监控及服务,有数据的地方才有监控。脱离这个原则,你做的都是告警,并且告警的成本会越来越大,不成体系。个人观点:所有的监控视图都是来源于我们对数据的采集以及我们到底有多少经验来看待数据。
  9. 持续集成。这条线是把一个个的程序包交付到各个环境,在【持续部署】之上的部分可以通过和持续集成工具Jenkins或者Go作对接即可。持续反馈非常重要,一个程序部署到生产环境之后,需要实时的运行报告反馈回来,确认变更的效果。如果持续部署平台化之后,真正的执行部署工作会不断前移,甚至可能直接交付给研发。此时的状态报告,更是有必要,不需要人去登录主机tail日志看是否正常。这个地方和“数据及服务”的能力关联很大,没有前面强大的数据服务能力。
  10. 面向业务的运维平台。不同的业务会有不同的调度策略和服务使用策略,需要在更上层完成面向业务的统一调度,这个是全应用的视角,和持续集成是有一些区别的。在没有这个平台之前,一个完整的业务上线,需要做很多操作,比如说DNS变更、LVS变更、OS初始化、自动化测试、持续部署、持续反馈、监控、业务调用关系配置,等等。面向业务的调度平台,就需要有一种调度能力,指挥底层各个平台为它服务,它本身不实现任何服务接口,是一个服务的集成者。
  11. 运维统一门户。每个运维系统都有任务或者信息与自己相关,如果运维人员每天要去面对那么多的运维系统,会非常痛苦。在统一门户里面分成两个部分,一部分是任务中心,把底层所有的事务状态都同步到任务中心中,表示我要做什么;信息中心,就是让运维人平时关注的业务状态Dashboard直接推送到信息中心中,表示我要关注什么。

平台的目标就是自动化和数据化一切,并且最终可视化,从而确保质量、效率和成本几者之间的平衡。但对于这么一个庞大的复杂体系来说,不可能一蹴而就,可以借鉴一下经验。

  1. 自底向上。一定要把握这个原则,这就相当于我们造车一样,把各个零件造好了,最后就是组装。
  2. 加强跨团队之间的合作与沟通。很多事情一旦研发、测试和运维彼此合作,事半功倍。在合作的过程中,把彼此的需求都统一到平台中,这样有利于后续的推广和使用。
  3. 平台建设先后有序,优先级顺序如下:
    • l P1(最高):CMDB、基础架构及服务、数据及服务、监控及服务、持续集成;
    • l P2(次高):面向业务的运维平台;
    • l P3(低):ITIL相关、运维统一门户。

作者简介

王津银,07年进入腾讯公司接触运维,先后在YY和UC参与不同业务形态的运维,对运维有一些理解。极力倡导互联网价值运维理念,即面向用户的价值是由自动化平台交付传递,同时由数据化来提炼和衡量。微信公众号:互联网运维杂谈。

时间: 2024-09-28 20:55:47

BAT解密:互联网技术发展之路(10)- 运维平台技术的相关文章

BAT解密:互联网技术发展之路(7)- 网络层技术剖析

上一篇博文<BAT解密:互联网技术发展之路(6)- 服务层技术剖析>中,介绍了互联网业务发展特点的中的"复杂性"的应对方式,本文介绍互联网业务发展特点的另外两个方面"高性能"."高可用". 一般人提到高性能时第一想到的就是优化,提到高可用时第一反应就是双机或者备份,但是对于互联网这种超大容量和访问量的业务来说,这两个手段都是雕虫小技,无法应对互联网业务的高性能和高可用需求,互联网业务的高可用和高性能,需要从更高的角度去设计,这个高点就

BAT解密:互联网技术发展之路(4)- 存储层技术剖析

BAT解密:互联网技术发展之路(4)- 存储层技术剖析 1. SQL 即关系数据.前几年NoSQL火了一阵子,很多人都理解为NoSQL是完全抛弃关系数据,全部采用非关系型数据,但事实经过几年的试验后,大家发现关系数据不可能完全抛弃,NoSQL不是No SQL,而是Not Only SQL,即NoSQL是SQL的补充. 所以互联网行业也必须依赖关系数据,考虑到Oracle太贵,还需要专人维护,一般情况下互联网行业都是用MySQL.PostgreSQL这类开源数据库.这类数据库的特点是开源免费,拿来

BAT解密:互联网技术发展之路(8)- 用户层技术剖析

互联网业务用户层技术主要包括:用户管理.消息推送.存储云.图片云. 用户管理 互联网业务的一个典型特征就是通过互联网将众多分散的用户连接起来.因此用户管理是互联网业务不可缺少的一部分. 略微大一点的互联网业务,肯定会涉及到多个子系统,这些子系统不可能每一个都自己来管理这么庞大的用户.由此引申出用户管理的第一个目标:SSO,单点登录,又叫统一登录.单点登录的技术实现手段较多,比如cookie.token等,最有名的开源方案当属CAS. 除此之外,当业务做大成为了平台后.开放成为了促进业务进一步发展

BAT解密:互联网技术发展之路(5)- 开发层技术剖析

BAT解密:互联网技术发展之路(5)- 开发层技术剖析 1. 开发框架 在系列文章的第2篇"BAT解密:互联网技术发展之路(2)- 业务怎样驱动技术发展"中我们深入分析了互联网业务发展的一个特点:复杂性越来越高. 复杂性添加的典型现象就是系统越来越多,不同的系统由不同的小组开发. 假设每一个小组用不同的开发框架和技术,将会带来非常多问题.典型的问题有: 1)技术人员之间没有共同的技术语言,交流合作少 2)每类技术都须要投入大量的人力和资源和熟练精通 3)不同团队之间人员无法高速流动,人

互联网技术发展之路(2)- 业务如何驱动技术发展

互联网技术发展之路(2)- 业务如何驱动技术发展 在<互联网技术发展之路(1) - 技术发展的驱动力>一文中,我们详细阐述了对于服务类的业务来说,业务发展是技术发展的驱动力.那接下来我们就看看业务究竟是如何驱动技术发展的. 互联网业务千差万别,但由于他们具有"规模决定一切"的相同点,其发展路径也基本上是一致的.互联网业务发展一般分为几个时期:初创期.快速发展期.竞争期.成熟期. 不同时期的差别主要体现在两个方面:复杂性.用户规模. 复杂性 业务的发展第一个主要方向就是&qu

互联网技术发展之路(1) - 技术发展的驱动力

互联网技术发展之路(1) - 技术发展的驱动力 互联网行业是一个快速发展.快速变化的行业,新的业务.新的机会层出不穷,新的技术如雨后春笋般冒出,NoSQL.大数据.云.Node.js.Docker等,无时不刻都在轰炸程序员们的脑袋,难怪中国的程序员都流传一个说法:过了30岁不能做技术工作了,因为技术发展太快了! 快节奏带来机会,但对于技术人员来说,更多的是带来挑战,甚至有时候是困惑.例如: 1)Docker很火哦,咱们要不要用呢 ? 2)Node.js好牛逼啊,我们用上就更牛逼了...... 3

读《百度基础架构技术发展之路》有感

这篇文章主要介绍SDF的研发过程,包括问题的提出,解决方案,以及部署在实际系统过程中遇到的问题.SDF的论文发表在ASPLOS 2014会议上.首先问题来自于实际工业环境:随着数据中心将成为承载互联网用户存储和计算的主要战场,如何设计和改进体系结构以满足大规模系统对性能,成本,功耗以及可扩展性的要求成为新的挑战.可以看到的是百度的ARM云服务器方案解决了存储的成本和功耗问题,而SDF架构则幅度提升了性能的性能(当然也会降低成本和功耗). SDF的提出是为了应对固态盘的诸多缺陷:其中包括带宽利用率

BAT解密:互联网技术发展之路(3)- 牛逼公司的技术架构都是这个范

大部分人对于BAT的技术有一种莫名的崇拜感,觉得只有非常牛逼和天才才能做出现在的这些系统,但经过前面两篇博文的分析,我们可以看到其实并没有什么神秘的力量和魔力融合在技术里面,而是业务的不断发展推动技术的不断发展,一步一个脚印,持续几年甚至10几年的发展,才能达到当前技术复杂度.先进性.牛逼度. 抛开BAT各自差异很大的业务,站在技术的角度来看,其实BAT的技术架构基本是一样的,再将视角放大,你会发现整个互联网行业的技术发展,最后都是殊途同归. 如果你正处于一个创业公司,或者正在成为另一个BAT的

BAT解密:互联网技术发展之路(9)- 业务层技术剖析

互联网的业务千差万别,不同的业务分解下来有不同的系统,所以业务层没有办法提炼一些公共的系统或者组件,但抛开业务的差异,各个互联网业务发展最终面临的问题都是类似的:就是复杂度越来越高,也就是说,业务层面对的主要技术挑战是"复杂性". 幸运的是,面对业务层的技术挑战,我们有一把屠龙宝刀,神挡杀神,佛挡杀佛,不管什么业务难题,用上屠龙宝刀一试都迎刃而解.这把屠龙宝刀就是"拆". 复杂性的一个主要原因就是系统越来越庞大,业务越来越多,降低复杂性最好的方式就是"拆&