java - 如何提高多个游戏服日志分析速度?
PHP中文网
PHP中文网 2017-04-18 10:22:14
0
2
418

业务场景

目前公司采用的游戏日志采集方式为一个服对应于一个日志库,然而游戏后台希望可以实时对这些游戏日志进行分析,当服不多时,这个还可以实时查询,但是游戏服越来越多的时候,这个就有瓶颈了,因为查询的时候后台是希望选择多个服一起进行日志分析的,尽管可以利用多线程进行查询,但等待时间还是会很长(因为服的数量会逐渐比线程数高),甚至直接就超出了网页的等待时间,报504网关等待超时。
后来,针对于查询时间过长甚至查不出结果的情况,做了如下改善:把需要进行的日志分析封装成一个个的定时任务,利用每天的凌晨某个时间跑这个任务,一个任务就会有一个和该任务关联的结果集,并且这个结果集保存在后台本地。那么当用户在后台对相应的日志模块进行分析时,直接读取后台本地的该任务管理的结果集即可。这样一来,确实解决了查询时间过长的问题。但是,随着游戏服的越来越多,在凌晨跑的那些日志分析任务所需要的时间越来越长了,更极端的一个情况就是可能会出现,从第一天的凌晨开始跑(比如一个任务是凌晨1:00开始的),也许到了第二天的凌晨的这个任务时间段(第二天的凌晨1:00,这个任务又到了执行时间了),前一天的该任务都没跑完,新一天的该任务又要开始了。这样循环下去,所需时间会更长,也有可能分析出每天的日志分析结果。
数据库用的是mysql(不管是游戏服的日志库还是后台的结果集),如何在不需要更改数据库的情况下(因为游戏服的日志库那边暂时不可以更改库,即使有想过改成mongodb),在现有的方案上进行优化呢?(假设我那些任务中都不会存在慢查询的情况,但是还是需要很长时间,因为服多)。在此,希望各位有经验的大神给小弟指点指点(⊙o⊙)。小弟感激不尽~~~
PHP中文网
PHP中文网

认证0级讲师

membalas semua(2)
左手右手慢动作

logstash
elasticsearch
Ini ialah penyelesaian analisis log yang sangat matang. Ia juga sangat mudah untuk digunakan. Hanya gunakan logback-encoder untuk menulis log ke logstash-logback-encoder


Walaupun anda tidak mengubah suai skema pangkalan data semasa, anda boleh menggunakan elasticsearch untuk mengimport data ke dalam elasticsearch.

Ty80

Perkara di atas sememangnya merupakan penyelesaian pengumpulan dan analisis log yang sangat disyorkan Ia sesuai untuk jenis log dengan format log yang jelas yang tidak memerlukan pembersihan atau penukaran tambahan. Jika data log perlu dibersihkan atau ditukar kepada format baharu, disyorkan untuk menggunakan Kafka + Spark streaming + Hive on spark solution. Sebenarnya, tidak digalakkan untuk menyimpan keputusan kembali ke Mysql, kerana menyimpan keputusan ke dalam pangkalan data hubungan seperti Mysql akan menjadi hambatan untuk keseluruhan ketepatan masa analisis. Di samping itu, kaedah penggunaan pelan ini boleh didapati dalam talian.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!