[关闭]
@gaoxiaoyunwei2017 2019-02-11T10:06:08.000000Z 字数 5298 阅读 609

混合云下的DevOps在vivo互联网的探索落地

白凡


分享:石建松
编辑:白凡

讲师介绍:之前在百度做移动运维平台和评价运维平台,目前在vivo主要做系统交付架构设计和落地。

本次的分享我主要分三个部分跟大家阐述,第一部分主要介绍vivo互联网架构整体演进和我们DevOps建设历程,第二介绍混合云架构下DevOps整体实现方式,最后一个就是未来的探索。

TIM截图20190121103904.png-52kB

1. vivo互联网架构演进和DevOps建设历程

首先看第一个部分,首先介绍一下vivo互联网的整体业务,分为两部分,第一是系统业务,包括硬件,另外就是手机APP,包括用户看不到但是能感知到的搜索的服务,整体DevOps主要针对后面两个场景做介绍。

TIM截图20190121104019.png-89.7kB

再看一下互联网这块的业务近三年来的发展非常迅速,可以看到单品日活浏览7千万,月活就近2000亿,CMDB三年增长10倍,目前来看,我们整体服务数量已经超过2000个,项目数量超过350个。

TIM截图20190121111440.png-124.9kB

整体互联网架构,我们的业务架构都是前端不管是静态下载还是动态加速都是通过CMDB做请求,转发到七层和四层的IOS,我们90%的在线服务都是Java技术,现在整体业务复杂度的增加,我们有很多的也在持续进入,这块对于我们的基础能力建设提出了比较高的要求,因为异构这种能力建设对包容性要求非常强。

TIM截图20190121111619.png-100.1kB

第一阶段在2011年左右,物理机的模式,当时的规模小于200-300台物理机,近两年虚拟机在上面管理。之前介绍互联网的这些架构的话,带来了不少挑战,分5方面,基础设施网络连通性,网络稳定性,业务规模增长迅速,要求我们迭代路度快,基础建设也需要比较强的能力业务架构也从单一技术栈向多元技术栈过度。

TIM截图20190121111649.png-71.5kB

交付效率周期长,交付不标准,互联网人员规模增长了很多,增长速度非常快,这样对于我们上层平台提出了比较高的要求,建设平台不完善的话,标准化设施的建设都会有问题,这边的解决思路就是抽象资源层,评比底层资源异构的特性。在CI方面提升CI效率。

TIM截图20190121111706.png-136.2kB

DevOps的建设从0起步,代码开发上线都是纯手工操作,正常操作就是在IDE编译代码,通过手工的方式上传,测试通过之后告诉运维。

TIM截图20190121111737.png-83.9kB

紧接着我们建立了第一条流水线,这不是完整的流水线,我们在流水线各个环节里面都有对应的开源工具串联起来,在这个阶段的话,线下和线上两个环节没有打通,包括线上完全是ChatOps,就是通过微消息、邮件方式告诉运维怎么上线,要改什么配置,是这么原始的阶段。

TIM截图20190121111817.png-135.7kB

初期通过这个配置对于新人和新的服务上线来说,整个配置复杂度比较高,不是特别友好的方式。CI和CD没有打通的话,整合服务交付时间段比较长,发布上线成为了瓶颈。整体上线是手工上线的,去年我们大部分的上线变更出现鼓掌都是由于手动发布导致的。

TIM截图20190121111918.png-109kB

2. 混合云架构下的DevOps实践之旅

DevOps所有的平台大部分都是今年半年之内构建起来的,我们是基于Spinnaker自研CD持续交付平台,还将CI到CD环节进行了打通。我们可以看到增加的这几个部分,打包环节我们通过CI,发布环节通过CD。在线上运营加入了包括调动链基础监控。
DevOps全景怎么实现的,这几张图是公司调研的结果,我们知道这个公司是全世界范围内做混合云市场份额比较领先的公司,我们可以看到在目前来说这些企业里面只有70%多的企业用了混合云的架构,1000人以上的混合云比重高达80%,整个混合云使用的比例也是越来越大,每一家企业在使用混合云的话,平均都超过了4家以上,所以说混合云是我们整体互联网IT发展主流的趋势。

TIM截图20190121112142.png-217.8kB

我们再看一下整个混合云架构的优势以及挑战,优势有三方面:

TIM截图20190121112217.png-71kB

整体DevOps平台,不管研发和运维都要达到这四个目标:标准化、自动化、自助化、多样性。

TIM截图20190121112303.png-83.4kB

下面这张图就是整体今年构建整体DevOps的功能全景图,在基础设施层,我们是多云的,我们可以看到我们引入了docker,网上是多云管控平台,再往上是中间件,然后是云服务、CI平台、CD平台、自动化运维平台。左侧就是串联整个场景的CMDB,包括服务资产、权限、流程。右侧通道包含了几个通道,配置管理、自研vivo控制中心、底层控制系统,Bees作为日志采集的,Ansible我们用的不多,包括监控平台和日志服务。

TIM截图20190121112337.png-92kB

DevOps全链路,我们从开发到需求管理用的是code和gerrit,完成之后我们把打包软件放到线下库,然后做测试和部署,如果测试验证通过之后坚决发版到线上,通知运维进行预发和生产环境部署。右侧会引入监控系统、日志中心以及一些我们需要自动化运维,通过作业平台进行。

TIM截图20190121112357.png-76.1kB

刚刚赵班长也有介绍我们CMDB,DevOps整个CMDB是元数据管理基础,现在我简单介绍一下我们CMDB是怎么做的,我们主要分为四大块,资产、服务、重建和流程,我们今年做的主机设备,网络设备有做一部分,剩下的还没有开始做,只是把整个图列在这里了,我们不单服务树形结构的管理,在权限统一了整体运维体系包括研发体系的权限管控。流程,我们替代了内部有一个BPM的系统,但那个系统包括自定义的流程,包括回掉的流程都做的不好,我们是完全基于我们的用户场景研发了流程管理的平台。

TIM截图20190121112415.png-193.7kB

CMDB架构图,所有的CMDB Agent,每个机房里面有CMDB的prosy,然后到北京的那边进行数据回传。通过KAFKA通过大数据计算各个机器、各个服务维度的利用率等数据。在云主机有CMDB 的模块拉去多云的主机情况,获取到我们上报的信息之后做信息补全,重新填到后端数据库里面。

TIM截图20190121112439.png-116.8kB

整体CMDB围绕服务树树型结构打造的,在横向我们做了平台串联,包括监控平台、CICD、配置中心、日志中心。在右侧,整个树型结构组织就是我们公司主枝架构,我们会从公司、部门组、项目、备机池(临时机器存放),同等级别是服务,服务往下就是服务单元,服务单元是最小不可拆分的部分,有统一的生命周期,包括统一的配置管理,就是我们的监控策略,我们的发布策略,在这个服务单元里面都是相同的。

TIM截图20190121112504.png-98.8kB

DevOps之CMP统一资源访问和管理,包括物理机、私有云、公有云,通过这些统一在底层屏蔽了API的健全等方面,网上做了集群的编排,我们对集群选取自动编排做了事情,对其他云来说,都有统一的管理,各种的一些管理,还和整体的CMDB做打通,比如我们做机器申请,对应的关系都会统一录入到CMDB里面。

TIM截图20190121112527.png-89.9kB

这是线下云服务,我们知道大家在开发测试阶段,我们要构建依赖,整体耗费的时间比较长,你都需要去知道是怎么搭建,这个事情对运维很简单,但对开发没有那么清晰,所以我们基于Contiv这个构建了docker容器云。

TIM截图20190121112545.png-125.8kB

下面来说一下我们整体的CI和CD我们是怎么做的,我们整体编排流程引擎我们是通过Spinnaker做的,这是整体的Spinnaker的架构,一个是Deck是民向用户UI界面组建。Orca是核心流程编排引擎组建,我们通过并行创行都是通过这个实现的。Igor是CI系统组建,后端有CI都是通过这个组建的。Cloud driver是适配不同云平台的组建。

TIM截图20190121112619.png-146.1kB

基于Spinnaker+Jenkins的CI流水线建设,整个模板各方面是固定的,大家要做新任务构建的话,点几个鼠标写一下证书基本上构建任务就串联完成。我们通过Spinnaker把构建组合起来,然后完成流水线的流转。

TIM截图20190121112656.png-78.5kB

构建编排方式,我们从几个维度构建,同时执行顺序、依赖关系都是通过Jenkins表述的。

TIM截图20190121112713.png-148.3kB

发布编排方式,我们部署策略也是通过Spinnaker编排方式实现的,目前支持了机房间创并行,以及自定义。

TIM截图20190121112743.png-157.1kB

Spinnaker流水线建设优化,我们原来使用这套流水线的时候我们发现很多问题,我们的构建问题会发现这是官方的使用方式,下面是我们的使用方式,官方使用方式是用K8S做部署,部署完成之后这个是做的一堆机器的反馈结果,我们是可以拆分成一个机器,这两种方式差别非常大,一开始我们没做优化的时候,直接上线我们发现原来支持100家的Stage,我们整体的内存占用超过80%,CPU间歇性的打满,我们看了原码之后,整个Spinnaker加载流水下的时候,会把上下游的东西全部加载进去,一个机器一个stage可能有20个,这样算下来整体内存占用非常大,我们根据我们的场景,我们重写了这部分的数据的加载,我们只需要知道上下游的关系,同时取消完整的扫描和序列化,对结构体进行优化,把整个结构体缩小。这几个部分取消掉之后我们整体并行和畅行能力达到了大大提升,目前来说2000+创并行没有问题。

TIM截图20190121112759.png-157.9kB

我们整体全球发布方面,主要是通过每个机房有一个管理员,管理各个机房的AGENT,通过上层连续管理员进行推送和发布,我们海外发布经过了代理中转,然后到CACHE。

TIM截图20190121112832.png-77.3kB

下面是自动化运维平台的基础,是作业平台,基本上通过我们的快速作业、作业流、工具箱、定植作业可以覆盖日常运维90%以上的场景,其中说一下作业流,底层通过Spinnaker实现的,这些影射到运维上的话就是前后脚本的依赖判断。

TIM截图20190121112944.png-85.3kB

作业平台—统一Agent,通道统一,CMDB、监控、发布。统一Agent管控,变更和升级、进程守护、安全控制、审计。

TIM截图20190121113019.png-115.7kB

域名变更管理,在完成这个系统之前,整个vivo不管内网域名还是外网外名的实现方式,内网DNS全网管控,平台化变更,对接Dnspod、万网实现外网DNS变更。在这个基础上我们实现了流量预案,针对机房、VIP、域名三个维度,发生问题的时候,运维会有限在这个维度上制定预案,当发生监控告警,直接实行这个预案,就实现了切换。

TIM截图20190121113035.png-89.9kB

下面再看一下Nginx变更管理,初期没有这个平台之前我们通过人工手动维护配置管理,但我们发现这个集群规模、集群数量增加之后,人工成本非常高,所以我们在线上设置了这个平台做Nginx配置管理,包括配置椒盐、管理、编排、发布编排等等。当测试集群测试通过之后才会往线上集群做下发。

TIM截图20190121113532.png-74.8kB

再看一个就是我们知道之前看到我们的业务架构里面我们所有的服务都是通过Nginx转化,怎么样要无损发布呢?实现基础肯定要实现基础层的加载,目前微博开源的方案,通过Consul,做分布式配置同步的系统,通过upsync做动态陆游的更新。

TIM截图20190121113555.png-66.7kB

配置中心这块就是我们目前做代码和环境的分离,在用的一块系统,整体和市面的配置中心实现方式是一样,SDK嵌入我们的代码里面。

TIM截图20190121113614.png-115.2kB

最后一部分讲监控是怎么构建的,自下而上分为基础监控、组建监控到业务监控,首先开源我们通过zabbix实现,在网上走的话,我们自研了javaagent,再往上实现监控。

TIM截图20190121113636.png-105kB

基于Zabbix搭建主机监控集群,通过Zabbix插件实现组建的部分监控,LVS、Mysql、redis、MongoDB,目前这套基础监控我们正在维护,我们每年会通过自研方式对这块做整体替换和我们的CMDB做打通。

TIM截图20190121113652.png-140.4kB

拨测探测机通过云主机、体专店等手机上部署探针,整体架构其中难点主要体现在任务调度系统和实时流汇聚和计算系统,难点主要存在我在某个区保证稳定量的分布,对拨测来说体专店手机的稳定性比起我们的机房肯定有问题,所以我们要进行实时调度。整个数据回传、计算要在一分钟以内完成这个数据,在数据存储量和计算都有一些难度,我们这边采用OpenTSDB+Redis实现指示存储。

TIM截图20190121113714.png-164.8kB

再说一下调用链,整体实现方式其实跟谷歌、腾讯、阿里的一样,整体调用链的作用可以帮助我们做一些服务的分析,故障定位、整体容量的规划。

TIM截图20190121113732.png-130.4kB

这张图我们可以看到通过调用链梳理服务上下游、通过这个都可以实现。包括服务的QBS、响应时间,通过这些趋势图可以看到,当发生问题,比如说我定了同域名监控,都可以通过告警中心,通知到对应的开发和运维。

TIM截图20190121113749.png-174.5kB

最后再讲一下我们整体的日志监控,数据采集分三块实现,一个是flume,现在自研了agent。会随着CMDB机器增加把采集应用到新增的机器上。上层的数据汇聚通过JAVA进行数据清晰。再往上走短期日志存在ES里面。

TIM截图20190121113812.png-200.4kB

最后看一下我们未来vivo在DevOps的发展方向,我们现在也在做K8S资源调度层面的探索,未来我们会基于容器云向上提供服务,当在很长时间内我们继续提供服务。最上层我们是统一的计算表示层和分布式应用层,对服务方和应用方提供统一介入和服务。

3. vivo未来DevOps之路的探索

这块是基于容器云的CI/CD,我们目前用这个架构和方案做实施,当然我们可能优先会在开发册上跑这套方案,Jenkins在编译方面。

TIM截图20190121113851.png-105.9kB

TIM截图20190121113906.png-103.4kB

最后我们肯定也是从DevOps到AIOps发展方向,首先在几个方面可以做几个事情,包括Spinnaker组建做自动灰度分析和上线,基于机器分析做容量管理、智能监控相关的事情。

TIM截图20190121113922.png-111.2kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注