导语 | 930变革后,公司明确了“开源协同、自研上云”的公司技术战略,通过自研业务上云,整合资源使用、推动架构能力互补,促进自研业务与云产品协同发展,同时实现产业互联网发展战略和促进腾讯云业务做大做强。公司也专门成立了组织架构单元大力推动公司级业务上云。为了响应这个号召,分布式日志系统(鹰眼)也在积极探索将原有业务迁入云端的方案。

目录

一、鹰眼平台介绍
二、上云的背景
三、组件上云架构优化和云上组件选型
四、上云之后的变化
五、后续架构的演进,监控体系的完善。

一、鹰眼平台介绍

鹰眼是是由PCG技术运营部负责运营负责的海量级分布式实时监控和日志分析系统,支持多语言的上报。

域名是:http://log2.oa.com/

鹰眼的数据上报:

鹰眼的数据上报是通过ATTA提供的,ATTA支持多语言的上报(JAVA,Python,C++等),上报之后,鹰眼从ATTA系统拉取数据最终写入到ES,通过ES的倒排索引机制,快速查询功能,写入功能等。

使用ES的倒排索引机制,百亿数据秒级查询返回的能力,鹰眼提供了以下功能:

1.实时日志查询服务数据上报到atta之后,开发可以通过鹰眼及时查询到日志,定位问题,运维可以通过鹰眼提供的数据统计界面实时查询到业务的运行情况。

2.数据分析能力:鹰眼数据入库后,用户可以通过API直接调用,进行OLAP分析。

3.错误日志告警服务。

程序如果出现错误之后,可以按照鹰眼规范来上报错误日志,鹰眼进行分词,根据不同的错误码进行分钟级别的告警。

4. 通过grafana对上报到鹰眼的数据进行实时的分析告警。

(由于ES不支持大并发查询,所以无法对超大数据进行实时分析)

二、上云的背景

930调整,成立新的云事业群,内部成立“技术委员会”,启动“开源协同”和“业务上云”的两大战略方向。

在架构演进中,鹰眼团队上云能得到什么好处?上云的价值是什么?

1、业务价值

  • 聚焦业务,提升研发效率
    加快技术换代,保持技术优势(传统互联网 vs 云时代)
    使用更好的云开源组件服务(可用性、稳定性、文档API…)
    计算资源重用,弹性伸缩,优化成本
    标准化CI/CD流程

2、工程师价值

  • 扩宽技术视野,避免闭门造车
    掌握的技能更有价值
    输出优秀组件到云,提高影响力

3、腾讯云价值

  • 为客户输出业务上云经验
    帮助腾讯云打磨云组件

三、组件上云架构选型

为了保证业务的延续性和架构的演进,数据导入过程中的主体流程并没有太大改变,Kafka直接使用到云上的CKAFKA,ES直接使用到云上的ES。

ES和Kafka直接使用云上组件,其他组件需要进行重构。

重构LogSender:

生产者程序写入Kafka性能瓶颈特别大,高峰期丢数据特别严重。

生产者程序写数据流程如下:

读取BOSS订阅->IP解析->写入Kafka。

IP解析性能瓶颈:之前生产者程序是C++版本,经过打印日志,发现高峰期IP解析耗时特别严重。排查代码,发现IP解析加锁了。所以高峰期丢数据特别严重。

将IP解析改为二分查找算法来进行IP定位,然后取消锁,解决。

Kafka性能瓶颈问题:由于我们生产者程序,一个程序会读取很多很多个topic,然后写入到kafka,我们尝试,使用一个producer和多个producer发送,性能都提升不起来。

经过源代码排查,发现kafka发送时,会根据topic分区来锁队列,当这个队列满的时候,就会发送一批消息出去。所以解决方案为,每个BOSSID应该有独立的发送客户端。

1.数据量大的,有多个kafka客户端

2.数据量小的一批topic,可以共用一个kafka生产者。

优化之后:在数据量非常大的时候,因为程序性能原因,会导致一分钟单节点最多只能处理13万条左右的数据。改进后, 单节点能处理55w条左右的数据。  性能提升4倍。

Kafka选型:

Kafka整体来说,高版本比低版本支持的功能更多,如事务,磁盘间的数据转移等,写入性能并不会下降。此处选型选的最高版本。

当然ckafka并没有给我们选择版本的机会,客户端写入的时候还是得注意下和kafka服务端版本一致,避免不必要的问题。

如低版本的客户端写入高版本的kafka时,如果使用数据压缩,则服务端接受到数据后,会解压,然后再按照对应的格式压缩(如果版本一致,则不会有此动作),增加服务端的运行成本。

Kafka上云之后,单机性能能达到400MB/s,而我们自建的kafka,单机性能最多达到100MB/s,性能提升4倍。

重构Hangout:

ES写入部分,业界有很多组件,最出名的是logstach,由于性能不够,我们自己重新开发了一套读取kafka写入ES的组件。

组件

单机测试(BX1)

备注

Logstash

30000

后端日志采集这一层logstash 是用jruby来编写的,大家都知道像jruby这样的动态语言其实比较适合做web网站的快速开发(ror),像日志采集的后端应用,需要负责日志的采集和解析,尤其像解析日志会很耗cpu的,这样数据量一大很容易碰天花板

Heka

12000

对比logstash,其处理数据过程,对机器性能消耗较少,‘体重较轻’,但是其官方公布的测试数据,直接stdout输出,且中间无太多fiter,encode过程,单heka实例处理速度不过是30000条/s

自研hangout

200000

1. 通过多线程读取不同的Kafka分片,将客户端进行分组,充分利用CPU资源,将写入速度达到10w/s。
2. 通过Bulk request routing机制,将每一批次的数据使用同一个route值,ES服务端接收时,会把这一批次的数据统一发送到一个节点上,可以减少网络传输压力(之前ES需要把一批次数据打散之后发送),充分利用磁盘顺序读写的能力,增大写入性能到20w/s

核心优化点介绍:

由于磁盘IO的大幅减少,能在极限优化下继续提升性能2倍以上。

整体来说,ES写入提升性能6倍左右。

ES选型:

ES低版本支持tcp写入和http写入两种方式,高版本只支持一种http写入方式。实测发现有如下区别:

1. TCP写入比HTTP更快。

2. HTTP写入更稳定一点,TCP写入是直接写到节点上面的,容易出现负载不均衡,HTTP更容易通过数据节点节点进行负载均衡。

因此我们采用了云版本ES 6.8.2。

上云之后的效果:

平均写入1TB数据,云下需要 80核,256G内存 12TB磁盘 (BX1机型)

云上需要  3 * (16核 64GB 5TB硬盘 )

平均节省资源1倍左右。

四、上云之后的变化

ES/KAFKA上云之后,统计有50多个ES集群,12个Kafka集群.

1. 工作量的减少

如果不上云的话,搭建这些集群平均一个ES集群需要20台机器,从申请机器,到机器初始化,磁盘RAID,安装ES,平均一个ES需要3-4人/天,则搭建成本就已经需要200多人(62*3-4)/天了,还没有谈到集群运维成本,远远超过鹰眼团队的人力。

2. 成本的减少

上云之后,伴随着各个组件的优化,整体性能提升至少2-3倍,所需要的资源同比会减少2-3倍、每年节省成本至少2kw。

3. 工作更加聚焦

上云之后:

鹰眼聚焦于写入性能优化,大大提升了写入效率。

监控体系的建立,数据上报到ATTA之后,就进行数据对账,及时发现数据的延迟给出告警。

在新功能开发上,基于ES支持隔天查询,如果当日数据暴涨之后,通过建立备份索引的机制增大写入量。

五、后续架构的演进,监控体系的完善。

1.核心模块既要有日志,也要有监控,不同模块的监控维度对应起来,让核心的模块,日志和监控都有,当业务出现异常时,及时调出发生异常的基础数据(如CPU/Mem等),指标数据,日志数据等进行完整的监控体系的建设。

2. 架构持续升级。

目前自研hangout写入只能保证at least once,但是无法保证exactly once。尝试通过flink的checkpoint机制,保证数据链路的完整性。

作者介绍:董磊,PCG平台与内容事业群/PCG技术运营部/技术运营服务中心/运营开发组。


关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~

鹰眼 | 分布式日志系统上云的架构和实践相关推荐

  1. 鹰眼海量级分布式日志系统上云的架构和实践

    ​导语 | 鹰眼是由腾讯PCG技术运营部负责的海量级分布式实时监控和日志分析系统,为响应公司战略要求,将原先的业务迁移上云,最终产生了可喜的变化.本文将介绍分布式日志系统(鹰眼)的整体上云方案,希望与 ...

  2. 分布式日志系统Graylog、Loki及ELK的分析和对比

    更多内容关注微信公众号:fullstack888 日志系列: 企业级日志平台新秀Graylog,比ELK轻量多了 日志系统新贵Loki,比ELK轻量多了 1. 为什么需要集中的日志系统? 在分布式系统 ...

  3. 极氪汽车 APP 系统云原生架构转型实践

    前言 新能源汽车已经成为我国汽车市场再次崛起的关键支柱,随着新能源汽车市场的快速发展,不同类型的品牌造车厂商呈现出百花齐放的态势.极氪汽车是吉利控股集团旗下高端纯电汽车新品牌,2021 年 4 月极氪 ...

  4. Scribe分布式日志系统

    为什么80%的码农都做不了架构师?>>>    Scribe分布式日志系统 一.介绍 Scribe是facebook开发的分布式日志系统,使用thrift传输log,因此无论是什么语 ...

  5. Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统

    Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 原文:Elasticsearch,Kibana,Logstash,NLog实现ASP. ...

  6. 景区门票系统上云 低成本、安全性高

    公司介绍 我们是华南麟睿科技有限公司,是一家批发零售业企业.本公司成立于2019年8月,总部位于衡阳,实缴注册资金777万元,并于2019年11月成立了子公司华南麟睿文化传媒有限公司.目前主要需求是业 ...

  7. posix自己搭建消息队列_蘑菇街消息系统上云实践

    小编又来啦-本周要推荐给大家的是一篇跟中间件上云相关的技术文章,这里面详细的记录了,蘑菇街自研消息系统上云的全过程,也是市面上开放出来为数不多的企业自研组件上云实践.有相关需求的同学可以好好学习下. ...

  8. SpringCloud 分布式链路追踪、分布式日志系统

    目录 概述 Zipkin的使用 搭建zipkin server zipkin dependencies 在服务中添加zipkin的相关配置 SkyWalking的使用 部署skywalking web ...

  9. scribe php,分布式日志系统scribe使用手记

    scribe 是facebook 开源的分布式日志系统 .其使用了thrift传输log,由于使用thrift,所以不论是什么语言的项目都可以实现日志收集,可达到远程或者是本地同步远程的分布式日志收集 ...

最新文章

  1. 推荐开发工具系列之--LinrF5(自动刷新)
  2. Alpha 冲刺报告(6/10)
  3. 安卓 按钮 menuinflater_浏览图片可致安卓手机远程被黑 工业用冰柜可被远程解冻...
  4. Burst trie(爆炸式字典树)解读
  5. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第16篇]描述DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。
  6. 树:二叉树的内存拷贝和内存释放
  7. Java-注解第一篇认识Annotation
  8. 求模板啊,求软著说明书模板啊
  9. ip切换及时刷新交换机的arp表方法
  10. C++内存分配(operator new)
  11. 抖音如何进行广告的投放
  12. web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}...
  13. 微信小程序毕业设计 基于javaweb后台网上书店图书商城小程序系统毕业设计
  14. java autoconf_「Autoconf」- 安装 @20210202
  15. 18、分类页面 - 小程序端开发 - 微擎小程序模块应用开发
  16. CSDN产品往期改进(截至第32期)
  17. 总结下自己做过的深度召回模型
  18. 【汇编小白】关于masm5.0 显示 Unable to open input file
  19. PyQt (PySide) 使用 QML 仿制一个密码框动画
  20. PyMongo 官方教程

热门文章

  1. android 正弦曲线,Android 正弦和贝塞尔曲线简单应用
  2. Vue的完整学习笔记(介绍,基础语法,组件开发与通信,模块化概念,webpack,vue-cli,vue-router,vuex,axios)
  3. linux redhat nginx,redhat 安装nginx过程完整记录
  4. 【python教程】(4)python中的模块
  5. 程序基于MATLAB yalmip 开发,做了一个简单的微网优化调度模型,模型中含有蓄电池储能、风电、光伏等发电单元,程序运行结果良好
  6. mysql的卸载与安装(超详细)
  7. Python之爬取糗事百科段子实战
  8. MySQL不同事务隔离级别对读数异常(脏读等)的拦截情况
  9. Hadoop分布式文件系统命令行接口(HDFS Shell)详细版
  10. 简单数论总结(整除)