一直播、小咖秀大数据自动化运维实践

简介: 在高速成长发展型企业,我们需要大数据做得更多的不是平台,不是让平台做得多么好,让各个部门使用,而是让平台提升用户增长、扩大营收,有些处于高速发展期和成长期的公司可能跟我们面临同样的问题,大家可以共同探讨。

前言

一下科技从成立至今一直专注于短视频领域,我们希望分发给用户更多的优质视频,让用户看到这个世界上的美好。

我们公司对于大数据的要求和阿里、搜狗不太一样。当我加入一下科技后发现,在高速成长发展型企业,我们需要大数据做得更多的不是平台,不是让平台做得多么好,让各个部门使用,而是让平台提升用户增长、扩大营收。

我带领团队尝试多次转型,最终我们想到一点,我们需要大数据基础平台,更多的不是走到平台化或智能化,而是简单够用就好。

在此之上我们有很多想法,希望可以跟大家分享,有些处于高速发展期和成长期的公司可能跟我们面临同样的问题,大家可以共同探讨。

一直播、小咖秀大数据架构

image


我们先看一下一直播和小咖秀大数据的现状。当我们去考虑一直播和小咖秀整体大数据架构时,我把公司所有需要大数据业务的需求整理好,我尽量把它压缩到只需要到ES、HDFS、Kafka、HBase、Spark等,简单聚焦几方面。

原因在于我们投入的人力有限,不想让团队处于每天解决各种各样的开源组件问题,我们尽量把所有的业务聚焦到这几个方向上,好让我们更加聚焦。

image

由这些需求,我们规划了一个整个一直播、小咖秀的大数据架构。架构分为三个层面,有点像IaaS、PaaS和SaaS。

IaaS 是我们的ALPS 大数据基础服务,分为传输系统 Flume、Kafka,计算调度平台是Yarn 和 K8S,之所以使用 Yarn 和 K8S,因为我们一下科技正在推动所有的应用和业务全面微服务化,未来的发展方向是用K8S解决资源编排、容器调度和服务发现的问题。

Yarn是大数据内部的资源调度框架,我们更多想尝试把跑在Yarn上的Spark、Flink、Storm等尽量在K8S上有更好的实践,形成公司架构的统一。

在存储系统上更多的聚焦HDFS和HBase,在HDFS方面,我们聚焦于做存储,更多的是原始日志包括HBase以后的文件。

我需要一个运维系统,来支撑传输、计算、存储和上层的数据集成服务、迎合数据应用服务。目前我们ALPS大数据基础服务只有两个人,包括运维和研发。在这之上的数据集成服务,我们只有三个人。

在最上面的数据应用服务,像商业智能平台、推荐系统和智能风控系统是我们投入了更多的人力,大概有20多人的规模负责这三个方向,专门解决直播领域和短视频领域遇到的问题,用商业智能平台做精准的数据决策,用推荐系统把优质美好的内容分发给优质用户。

在中国互联网上面临防薅羊毛,在搞活动时,黑产会频繁刷我们的接口,去拿他们不该拿的部分。我们整个团队在大数据领域,更多的聚焦点是在上层业务解决实际问题,把数据转化为价值,解决我们一直播、小咖秀在数据增长方面面临的问题。

用大数据来引导我们的增长,包括个性化推荐系统,把精准的内容分发出去,解决数据风控上的问题。在投入比来看,我们把更多精力放在上层业务,在底层服务只投入了2个人。你们投入这么少,能做成什么样。

我原来在阿里和另外几家的公司做大数据时,更多的是投入一支团队,解决每一个组件的性能,在开源基础上做更多的东西。由于公司业务形态的不同,决定你使用大数据的方式不同。

我们公司更多的是聚焦业务,转化价值,我们把大数据基础服务层面做得足够简单,简单到够用即可。在够用基础上还有一定的想象空间,那时候我们做了很多尝试和思考,把之前很多经验做了大量底层开发,用了很复杂的架构,在实时计算和ODPS方面经验的参考,发现两个人Hold不住,这是很多创业型和成长发展期公司面临的问题,如何选择运维系统,如何运维我的大数据。

ALPS介绍

我们内部做了ALPS,我们希望有一天可以轻轻松松的站在阿尔卑斯山顶上俯瞰大数据的世界。有同学说我比较喜欢阿尔卑斯奶糖,所有取名阿尔卑斯。

image

我之前做了很多尝试和产品,用两个人如何解决几百+的机器,包括物理机、跨IDC,我一直在思考并整理市面上开源的东西,我们肯定不能完全自己研发,也不能用太多的组件支持现在的大数据业务,为了运维大数据的业务而带来运维需要学习更多的组件,我们没有这么多的投入产出。

那时候我们把整个运维需求进行精简,如果有基本的运维需求,我们应该具备哪部分,包括配置管理和资产管理是我们传统说的CMDB;监控系统要可监控、可报警,我们在做批量作业时需要批量作业的工具,包括Puppet、Ansible等。

我们希望有一天可以跟AI结合,现在没有太好的尝试,毕竟就两个人,但不代表我们没有这个心。

这是我们目前在开源采用的系统,我在这些系统里选择,没有一个系统可以解决我们三个运维问题。

Puppet、Ansible解决的是批量作业的问题,Falcon、Elastic、Prometheus解决监控报警问题,CMDB目前没有更好的开源产品。如果要实现这三个基本诉求,我需要开发、维护三种产品,让我的同学学习三种产品,比较浪费人力。

有没有一个产品或者一个工具具备这三个特性的雏形,让我们以后可以频繁的迭代、持续的迭代,做出更好的精品。

image

直到有一天,我发现一个产品——Consul,这家公司做了很多产品,在运维领域,Consul解决了很多问题,它给我们很多启发。这个东西可以让我们以后做得更好。

CMDB完全基于Consul来做,监控报警是基于Consul服务发现做的,我们的作业平台也是基于 Consul 做的。大家回去可以了解Consul,在很多地方做得很好,可能没有非常完善,它的 UI 做得不是特别好,但它的核心竞争力解决运维上遇到的所有问题。

我们没有做AI+ALPS的尝试,一直播、小咖秀未来应该把更多的用户服务好,给他们分发更多的优质内容,形成良好的产品体验,而不是告诉他我的大数据平台运维得多么好,这偏离是我们的主业。

这是典型的是大数据业务部门如何选择和运维,大数据业务部门和运维分离,由基础运维独立运维你的产品,还是由基础运维运维你的大数据组件,还是由大数据业务团队自己掌控,当中有很多不同。

大数据业务团队自己运维,可能面临不太懂运维,我需要掌握运维产品和运维能力,而运维去大数据产品面临的组件那么多,他不了解大数据业务团队包括开发人员所面临的需求和挑战,往往会产生碰撞。

如果能够自己做,尽量减少沟通,在一个团队内解决问题。我们团队用一个简单的产品完成自动化运维和运维平台的建设。

image

基于Consul,我们做了自动化运维架构。我们用Consul Member解决CMDB,可以动态发现节点,动态摘除。

Consul Event解决作业分发问题。Consul Check解决服务发现和监控的问题,基础监控是公司基础运维团队和应用运维团队共同承担的,大数据里有很多基础运维团队不太了解的,他们需要一定的学习时间,我们需要更多的学习运维知识,我们需要把大数据组件的运维转换到到自己团队身上。

在业务上会遇到很多问题,一般情况下由我们自己解决,解决后会发现能否尝试我们自己监控,把它做成自动化,保证我们业务的稳定性。所以我们用Consul Check做了监控系统,这只是简单够用即可。

用Consul DNS解决内部DNS问题,我们面临很多大数据节点上下线时的解析问题。总结来说,Consul自动化运维架构有Consul Center Server集群,每一个大数据数据业务节点都会安装Consul Client,完全用Consul实现。我们在UI Service上做了改变,让运维更直观的使用产品。

Consul的架构该有的都有,像CMDB、作业分发、服务发现和内部DNS。足够简单,开源可修改,我没有使用大量的产品,我的两个大数据运维工程师完全可以Hold住,甚至将来可以做得更好。解决非专业运维团队的专业运维问题。投入产出比很高,很少的投入,很大的回报。

2017 年12月份至今大数据业务和故障率并没有因为用了Consul后有多大的提升,它就是稳定,不怎么出问题,它能解决的问题都解决了。更重要的是架构足c够简单,一个系统频繁的迭代容易打造精品。

可能我们团队将来也会一直往这个方向发展,做类似阿里Tesla的产品,解决企业化部署和企业化交付问题,短期内不会做,我希望把这个想法传递给有同样问题的公司,商业化的公司会帮我们产品私有化部署和落地,选择运维产品,我希望架构简单的思想可以传递给大家。

image

在CMDB上,Consul Member是怎么做的。它利用所有节点加入其中,自动跟Consul client做连接,定期汇报状态,这是完全它自己做,不需要我自己研发。很早之前,我在其他公司做过CMDB产品,管理过市场上7、8万台机器。

当有服务变更后,CMDB与机器之间的联系和状态的更新无法做到同步,用户在CMDB上查询某一台机器,发现在第一个IDC,其实他早早的迁移到第二个IDC,可能是流程没做好,也可能是IDC建设的人和运维平台管理的人没有沟通好,我不知道机器在哪里,不知道他们的状态,不知道他们部署了什么服务。

百度最早做服务包,现在做自动化运营、CMDB,我需要在这方面解决,梳理我们的业务和资产,方便后期做自动化运维。

我做了这么多年后发现,投入这么多人,做的东西反而不好。我感觉在运维方面需要在客户端做Agent,解决动态变更、自动发现、状态探测等问题。

一直播、小咖秀更多的关注用户和产品,不会有更多人力投入到这个方向,我需要有这么个产品解决这个问题,Consul Member的特性完全可以解决这个问题。

我们可以在一个产品之上频繁的打造,持续的迭代,和不同的公司、社区沟通,建立良好的关系,解决我们未来要做Agent,未来要做动态变更、自动发现和状态探测的问题,把以后和未来的想法全部变成现实。

image

在运维过程中,我们要批量执行一些东西,在一些节点上执行动作、脚本、Job,这个Job是指我们运维要做的比如批量清理日志、批量配置变更、批量状态服务的迁移等。

很早之前,我们团队用的是Ansible和Puppet,我不想让我的团队再引入一个新的东西,我想Consul能否解决,结果发现Consul Event 非常不错,它利用Gossip协议,完全基于UDP,他们之间在同一个集群内通过Gossip协议进行沟通。

简单的讲,一个事件通过任何一个机器、任何一个Agent、任何一个客户端或服务端都可以触发。

触发事件后,每台机器都有成员列表,会优先在alive状态下的机器,寻找三台活跃机器,这三台机器会发给另外三台机器,收敛非常快,在局域网内如果延时足够小,基本上是毫秒级的就可以把事件广播到全网,不需要我和你之间一定要通。这台机器和那台机器有策略、白名单、路由、网关等问题,只要我这个节点和你这个节点之间有一台机器能通,这个事件就能过去。

基于Consul Event做了我们自己的作业分发平台。核心是利用Gossip协议把事件下发到每个Agent,Agent端会有Consul原生的事件触发管理功能,它可以执行一个脚本。当它可以执行脚本后,我们可以在脚本上解决很多东西,包括作业分发和个性化的东西。

Consul更重要的特性是多DC管理的工具,可以解决不同DC与DC之间的配置共享、事件下发、策略下发。我们之前在做服务树时,大家会做自动化运营平台,频繁提到服务数概念、服务与服务之间的关系,服务与服务之间的依赖,那时候更多的是通过像CMDB类似CMS的传统管理方式去管理服务之间的关系。

Consul利用Tag,为某些机器打一些Tag,当你触发事件时或执行动作时,利用Tag的机制只感染一小部分的机器,就是你的目标机器。

我认为这是够用的,我们现在用起来非常舒服,只需要把日常工作抽象好,开发脚本后分发到每台机器上,在任何一台我自己的操作机上执行自定义的Consul命令,自动执行脚本,部署Hadoop或者做其他的东西。把我们批量作业的工作全部转移到Consul平台上。

之所以没有选择Puppet和Ansible的原因,希望我们运维人员不要解决它本身的问题,包括打通SSH等,考虑众多复杂的东西。我希望他们专注于一个点,如果把一个点做足够好,这个点可能会变成精品。

Puppet和Ansible某种情况来说比Consul强大,这只是一种业务场景下的选择而已。个人认为Consul带来的作业平台,优点是Consul原生支持,只需要很少的开发,很稳定、很可靠、很快速。

现在不管是高校局域网还是我们的广域网,Consul都很好,主要得益于Gossip协议。我们之前在CDN领域尝试过用Gossip协议做全网状态的探测。

同时可以解决运维高频批处理的任务。如果我们要投入更多人的话,肯定还可以做的更好,包括改Consul的源码。我们团队能做,但现在不想做,原因是够用即可。

image

Consul DNS与Hadoop的集成,在阿里、搜狗和很多公司不算问题,但在处于高速发展期的公司说,这个问题是普遍的。有一定规模的公司,他们管理Hadoop节点时,大部分用Host做解析,每次资源变动都要一定要下发ETC Host的文件,让每台机器知道你是谁,我是谁。

其他业务部门要用Hadoop平台时也要更新。这些问题在大公司是不用谈的,很多创业公司和发展公司还是需要考虑的。Consul本身可以解决很多问题,在这个点上,我们做了一个它跟Hadoop的集成,所有机器部署完Consul后,自动获取Consul node名称,该名称自动解析,不需要管理ETC Host。

Consul自己有Server,只做A记录解析,其他的没有。这是HashiCorp公司专门提供的Consul DNS服务。

所有新节点加入后Consul会自动解析,我们与自己内部DNS打通,包括新节点加入、服务都是标准化的,连节点名称都规划好,再也不用去管理看起来很头疼的ETC Host。

偏初创的企业是可以考虑的,这是我们一直想打磨Consul的原因,让它更多的功能结合我们实际运维。

image

下面分享一个Consul DNS服务发现案例。在互联网公司的互联网发展,像LVS、SLB和其他的服务发现、负载均衡的产品大量被服务发现,etcd、Zookeeper也是如此。Consul本身自己做服务发现,如何用Consul DNS做服务发现和故障的自动切换。

我可以把一个服务注册到一个Consul上,解析域名时会返回三个地址,分别是同一个服务有同一个域名,当这个服务不可用时,我们根本不需要做其他东西,这用的是Consul内部事件感知的技术,它可以动态的在解析里摘除,内部看延时是秒级的,这个特性可以应用于很多场景,你可以自己掌控很小的服务发现和自动切换,以及简单的负载均衡产品。

当我们有更多的业务加入时,我们的业务没那么大,没有大到像BAT级别时,没有一秒钟几十万并发时,我们不一定要尝试别人走过那条路,那条路的艰辛是从最简单的层面而来的。

有时候把一件事做得简单,用简单的方法解决问题时,带来的收益可能更高。当一个请求过来时,它用Consul DNS解析,拿到三个服务的解析,如果一台服务挂掉了,它会自动摘除,请求就会到其他的节点上。

image

我们在一个运维平台上需要有监控和报警,我们需要做监控系统的开发。Consul本身支持Shell Script Check、TCP Check、HTTP Check、TTL Check、Docker Check、gRPC Check,利用这些check,我们可以做采集节点和采集工具,就可以采集到我们需要的东西。

有时候我们去用小米、Prometheus、zabbix时,有的天然集成的包我们可以用,但有很多时候我们需要定制化监控某些服务,这时候运维人员只需要写一个简单的脚本,可能不需要很多的开发能力,写了一些脚本采集信息把服务监控起来,就可以用Consul Service Check去触发和管理。大家可以看看这个服务。

image

这是我们自己利用Consul Service Check做的简单的监控系统。在Consul Server基础上实现了TCP、HTTP、Script数据采集,我们自己写了一个监控服务和判断服务,把所有的数据存到MongoDB。

它并没有很强大,它只是很简单、很够用,最核心的点和整个的骨架都是Consul完成的,报警、业务是我们自己开发的,也是我们自己需要做的东西。核心是如何采集,采集时有很多监控脚本,有没有现成的。

我们参考一个产品是Bosun,里面有很多开源采集的Linux、Windows,特别多的采集。之前TSDB和其他开源监控工具都是参考它很多思想和源码。里面很多源码可以直接拿出来写成脚本,放在Consul上直接运行。

image

这是Consul Service Check自动化运维的案例,来启发大家可以利用它做很多东西。

这是Hadoop一个节点磁盘损坏的时候如何让它做自动化的东西。简单来说是事件触发,自动调Consul Event事件,它会把具备磁盘损坏的节点,自动触发下线的操作。

整个思考是在Consul的生态环境内完成的操作。我们只是在讲Consul的特性,大家可以利用Consul Event、DNS、Member等,自己来组织,就像我们去菜市场采购很多东西回家,自己做菜一样。

如果还有明年

image

如果还有明年,我希望跟大家分享我们在大数据开发套件CloudAtlas产品上的经验。我们把数据处理,内部叫TT,意思是解决传输和转换的问题,其实就是我们常说的ETL,大部分初创企业更多的在ETL领域做大数据的尝试。

我们未来想跟大家分享大数据集成服务下,包括自助式开发套件和基于HBase做的数据仓库。我们希望让产品和运营轻松掌控海量数据,就像操作Excel那样轻松。让开发真的在开发一款产品,而不是每天在写Excel、SQL,让数据更加开放,才能让更多人通过数据去转化其价值,提高数据真正的价值。

注:本文根据 GOPS 深圳站一直播于邦旭老师的分享整理而成。

原文发布时间为:2018-07-31
本文作者:于邦旭
本文来自云栖社区合作伙伴“高效运维”,了解相关信息可以关注“高效运维

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
24天前
|
运维 监控 持续交付
构建高效自动化运维体系:策略与实践
在数字化时代,企业IT基础设施的管理和维护变得日益复杂。为了提高效率、降低错误率并快速响应市场变化,构建一个高效的自动化运维体系至关重要。本文将探讨自动化运维的核心策略,并通过实际案例分析展示如何将这些策略应用于日常管理中,以实现IT运维的优化。
15 0
|
3天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
3天前
|
测试技术 持续交付 Docker
Django中的自动化部署与持续集成实践
【4月更文挑战第15天】本文介绍了Django项目中自动化部署与持续集成的实践方法。自动化部署通过选择Ansible、Fabric或Docker等工具,编写部署脚本,配置持续集成工具(如Jenkins、GitLab CI),确保服务器环境一致,实现快速应用上线。持续集成则涉及配置版本控制系统,设置自动化构建和测试,编写全面的测试用例,集成代码质量检查工具,并配置通知机制,以提升代码质量和开发效率。这两者结合能有效提升项目的迭代速度和可靠性。
|
10天前
|
运维 监控 Kubernetes
构建高效自动化运维体系的实践与思考
【4月更文挑战第8天】在数字化时代,IT基础设施的复杂性日益增加,传统的手工运维模式已经难以满足快速响应和高效率的需求。本文将探讨如何通过自动化工具和策略构建一个高效的自动化运维体系,旨在提高系统的稳定性、减少人为错误以及优化资源分配。文章首先分析了自动化运维的必要性,接着介绍了实现自动化的关键技术和工具,并通过案例分析展示自动化运维体系的实际效果。最后,对自动化运维的未来发展趋势进行了展望。
|
22天前
|
运维 监控 数据可视化
现代化运维管理系统的关键特性及实践应用
随着信息技术的迅猛发展,现代企业对于运维管理系统的需求日益增长。本文将探讨现代化运维管理系统的关键特性,以及在实际应用中的重要性和优势所在,帮助企业更好地理解和应用现代化运维管理系统。
13 2
|
26天前
|
敏捷开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计理念与实践
随着敏捷开发和持续集成的理念深入人心,自动化测试在软件开发周期中扮演着越来越重要的角色。Selenium作为一个广泛使用的自动化测试工具,其设计理念和实践对于提高测试效率和质量具有指导意义。本文将深入探讨Selenium的核心设计原则、架构以及最佳实践,旨在帮助读者构建更稳定、高效的自动化测试系统。
|
26天前
|
jenkins 测试技术 持续交付
深入理解自动化测试框架设计原则与实践
本文旨在探讨自动化测试框架的设计原则及其在实际项目中的应用。通过对自动化测试框架的系统剖析,我们揭示了有效构建和维持测试框架的核心要素,并提供了一套实用的指导方案来帮助读者实现高效、可靠的自动化测试流程。文章不仅聚焦于框架的技术细节,也强调了灵活性、可维护性和可扩展性在设计时的重要性,同时结合实际案例分析,展示了如何在不同测试环境中定制化和优化测试框架。
|
26天前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
28天前
|
机器学习/深度学习 人工智能 运维
构建高效自动化运维体系的探索与实践
【2月更文挑战第30天】 在信息技术迅猛发展的今天,企业对于IT系统的依赖日益加深。随之而来的是运维工作的复杂性和难度不断上升,传统的手动运维模式已经难以满足快速响应和高效率的需求。本文旨在探讨如何构建一个高效的自动化运维体系,以提升系统稳定性、降低人为错误并优化资源配置。文中将详细介绍自动化运维的核心组件,包括配置管理、持续集成与持续部署(CI/CD)、监控告警以及故障自愈等,并通过实际案例分析自动化运维实施过程中的关键考量因素和挑战。
|
28天前
|
运维 监控 持续交付
构建高效自动化运维体系的实践之路
【2月更文挑战第30天】随着信息技术的飞速发展,企业对于运维服务的要求越来越高。本文将深入探讨如何构建一套高效的自动化运维体系,包括监控、部署、日志管理以及故障响应等方面。文章首先分析了当前自动化运维的必要性和挑战,随后提出了基于容器化技术、微服务架构和DevOps理念的解决方案框架,并通过实际案例展示了实施该体系的详细步骤与成效评估。本研究的目标是为运维团队提供一套可行的方法论,以提升系统稳定性和运维效率。

热门文章

最新文章