去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来( 五 )


 
数据写入 Distribute 引擎时,数据在本地写入完成后立即返回 。Clickhouse 会周期性的按照规则将数据分发的其他节点上 。
 
③ 查询
 
通过 Distribute 引擎查询时,无论分片规则是什么样的,Distribute 都会将 SQL 分发到所有的分片上查询,并在当前节点汇总数据,最后返回给客户端 。如果查询 Replication 引擎的表,那么只查询本地数据 。
 
2)可用性分析
 
Clickhouse 的 Replication 引擎和 Zookeeper 实现数据副本,保证了每个分片内可以允许一个副本宕机 。Distribute 引擎可以保证在 Clickhouse 所有节点上都可以写入和读取 。
 
但是通过数据同步是异步的 。如果节点写入成功并在数据尚未完成传输之前宕机,无法恢复,则尚未同步的数据块将会丢失 。
 
3)扩展性分析
 
由于 Distribute 查询的时候会将 SQL 分发到所有的分片上,无论分片的数据状态如何,故新增的节点可以直接加入到 Clickhouse 集群中,而无需担心旧数据迁移的问题 。但是需要考虑数据倾斜问题,通过提高新加入节点权重可以将新写入的数据更多的发送到新加入分片上 。
 
向 Distribute 引擎写入数据时,Distribute 引擎首先会写入本地,再依次转发给其他节点,可能会导致本地网络流量增加、服务 merge 数据块时产生额外的 cpu 以及 IO 使用的问题 。可以通过只写入本地表,而不写入 Distribute 表解决这个问题 。但是需要通过一定的策略(比如轮询)写入不同的 Clickhouse 节点,解决数据倾斜的问题 。
 
7、监控
 
1)说明
 
当前监控只是用于查看各个节点的状态情况,展示性能问题,并未提供高级别的功能 。监控告警接入公司现有的监控系统 。
 
八、效果
 
1、SnifferServer

去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来

文章插图
 
所有 SnifferServer 节点平均内存占用约为 12G 左右,最大 gc 平均约为 21ms,75 分位的 gc 平均约为 0.6ms 。
去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来

文章插图
 
两节点 SnifferServer 合计 CPU(32核)利用率峰值约 70%,网卡峰值 上行约 330Mb/s 下行 400Mb/s 。
去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来

文章插图
 
单个队列数据生成速度峰值约为 30w/s,平均堆积约 20k,消费者速度要快于生产者 。
 
aggregator 平均每秒聚合 1.2 次,数据聚合比约为 40%,writer 每秒约写入 6 次,业务信息和 appCode 命中率几乎 100% 。
 
2、页面展示
去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来

文章插图
 
展示某个业务的平均响应时间和查询次数
去哪儿网MySQL日志分析实践,80%数据丢失都给你救回来

文章插图
 
展示某个慢查询的平均响应时间和查询次数
 
九、总结
 
SnifferServer 将队列中的日志数据补全业务信息、聚合数据、将结果写入到 Clickhouse 中,SnifferAnalyze 定期分析数据,将结果写入到 Clickhouse 和 MySQL 。整个系统具备高性能、高可用性、高扩展性的优点,内存和 CPU 使用率比较稳定 。日志分析系统呈现出来的结果可以帮助开发更好的了解业务的行为,发现潜在的问题,评估业务在数据库方面的风险 。结合慢查询风险指数系统可以更精确的评估慢查询的风险 。
 
>>>>
参考资料
 
  • https://clickhouse.com/docs/zh/
  • https://clickhouse.com/docs/zh/engines/table-engines/mergetree-family/replication/
  • https://mp.weixin.qq.com/s/kFbW5K7txdijLOVkYLs40A
 
作者丨钱芳园
来源丨公众号:Qunar技术沙龙(ID:QunarTL)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
关注公众号【dbaplus社群】,获取更多原创技术文章和精选工具下载




推荐阅读