实践思路:鹰眼 | 分布式日志系统上云的架构和实践
优采云 发布时间: 2020-09-15 17:41鹰眼|分布式日志系统上云的体系结构和实践
简介|经过930的改革,公司明确了公司的“开源协作,自主开发和云化”的技术战略,通过自主开发业务到云,整合资源使用,提升互补架构能力,促进了自主开发业务与云产品协同发展,同时实现产业互联网发展战略,促进腾讯云业务的拓展与壮大。该公司还成立了组织结构部门,以将公司级业务大力推广到云中。为了响应这一呼吁,分布式日志系统(Eagle Eye)也在积极探索将原创业务迁移到云的解决方案。
内容
一、 Hawkeye平台介绍
二、在云的背景下
三、组件云架构优化和云组件选择
四、进入云端之后的变化
五、后续体系结构的演进和监控系统的改进。
一、 Hawkeye平台介绍
Eagle Eye是由PCG技术运营部运营的大型分布式实时监视和日志分析系统,支持多语言报告。
域名是:
Eagle Eye的数据报告:
Eagle Eye的数据报告是通过ATTA提供的。 ATTA支持多语言报告(JAVA,Python,C ++等)。报告后,Eagle Eye从ATTA系统中提取数据并将其写入ES。行索引机制,快速查询功能,写入功能等
Hawkeye利用ES的倒排索引机制和在几秒钟内查询数百亿数据的能力,提供了以下功能:
1.将实时日志查询服务数据报告给atta后,开发人员可以通过Eagle Eye查询登录时间以定位问题,O&M可以通过数据统计界面实时查询业务运行状态由鹰眼提供。
2.数据分析功能:将Eagle Eye数据存储在数据库中后,用户可以直接通过API对其进行调用以进行OLAP分析。
3.错误日志警告服务。
如果程序中存在错误,则可以根据Hawkeye规范报告错误日志,Hawkeye会对单词进行分段,并根据不同的错误代码发出分钟级别的警报。
4.通过grafana实时分析和警报报告给Eagle Eye的数据。
(由于ES不支持大型并发查询,因此无法对非常大的数据进行实时分析)
二、在云的背景下
930进行了调整,建立了新的云业务小组,在内部成立了“技术委员会”,并启动了“开源协作”和“业务到云”的两个主要战略方向。
在架构的演变过程中,Hawkeye团队从迁移到云中可以获得什么好处?上云的价值是什么?
1、商业价值
2、工程师价值
3、腾讯云价值
三、组件云架构选择
为了确保业务的连续性和体系结构的发展,数据导入过程的主要过程没有太大变化。 Kafka直接在云上使用CKAFKA,而ES直接在云上使用ES。
ES和Kafka直接使用云组件,而其他组件则需要重构。
重构LogSender:
写给Kafka的生产者程序的性能瓶颈特别大,高峰时期的数据丢失尤其严重。
在生产者程序中写入数据的过程如下:
读取BOSS订阅-> IP分辨率->写入Kafka。
IP解析性能瓶颈:以前的生产程序是C ++版本。打印日志后,发现高峰时段的IP解析特别耗时。我检查了代码,发现IP分辨率已锁定。因此,高峰时段的数据丢失尤为严重。
将IP分辨率更改为二进制搜索算法以找到IP,然后取消锁定并解决它。
Kafka的性能瓶颈:由于我们的生产者计划,一个程序将读取很多主题,然后将它们写入Kafka。我们尝试使用一个生产者和多个生产者进行发送,但是性能无法提高。
在对源代码进行调查之后,发现当Kafka发送时,它将根据主题分区锁定队列。当队列已满时,将发送一批消息。因此解决方案是,每个BOSSID都应有一个独立的发送客户端。
1.大量数据,有多个kafka客户端
2.一批带有少量数据的主题可以共享一个Kafka生产者。
优化后:当数据量非常大时,由于程序性能的原因,单个节点在一分钟内只能处理大约130,000条数据。改进后,单个节点可以处理大约55w的数据。性能提高了4倍。
Kafka选择:
通常,与较低版本相比,Kafka支持更*敏*感*词*,例如磁盘之间的事务和数据传输。写入性能不会降低。此处选择的最高版本。
当然,ckafka没有给我们选择版本的机会。客户端编写时,我们仍然必须注意与Kafka服务器相同的版本,以避免不必要的问题。
例如,当较低版本的客户端编写较高版本的Kafka时,如果使用了数据压缩,则服务器在接收到数据后将其解压缩,然后根据相应的格式进行压缩(如果版本为一致,就不会有这样的操作)来增加服务器的运营成本。
Kafka上云后,单台机器的性能可以达到400MB / s,而我们自建的Kafka的性能可以达到100MB / s,性能提高4倍。
重构视频群聊:
在ES写作部分,行业中有许多组件。最著名的是logstach。由于性能不足,我们重新开发了一组可读取Kafka和可编写ES的组件。
组件
单机测试(BX 1)
备注
Logstash
30000
后端日志采集这层logstash用jruby编写。众所周知,像jruby这样的动态语言实际上更适合于Web 网站的快速开发(ror),例如log 采集后端应用程序需要负责日志采集和解析,尤其是在解析日志时将消耗cpu,因此数据量很大,很容易达到顶峰
Heka
12000
与logstash相比,它的数据处理过程消耗更少的机器性能并且“重量更轻”,但是其官方测试数据直接输出到stdout,并且没有太多的适配程序,编码过程和单个heka实例处理。速度只有30000 / s
自行开发的视频群聊
200000
1.通过多个线程读取不同的Kafka分片,对客户端进行分组,充分利用CPU资源,并达到10w / s的写入速度。
2.通过批量请求路由机制,每批数据使用相同的路由值。 ES服务器接收到该数据后,会将这批数据发送到一个节点,这可以减少网络传输。压力(在ES需要在发送之前分解一批数据之前),充分利用磁盘顺序读写的能力,并将写入性能提高到20w / s
核心优化要点简介:
由于磁盘IO的大幅减少,在极端优化下性能可以继续提高2倍以上。
总体而言,ES写作将性能提高了约6倍。
ES选择:
较低版本的ES支持tcp写入和http写入,而较高版本仅支持一种http写入方法。实际测量发现以下差异: