作者:楼永红 王轩宇|浙商银行 
 
浙商银行股份有限公司(简称“浙商银行")是 12 家全国性股份制商业银行之一,总部设在浙江杭州,全国第13家"A+H"上市银行,致力于打造平台化服务银行,为客户提供开放、高效、灵活、共享、极致的综合金融服务。在英国《银行家》(The Banker) 杂志“2020 年全球银行 1000 强"榜单中,位列第 97 位。
 
浙商银行很早就开始全面推进数字化转型,2010 年浙商银行上线电子银行服务、手机银行业务,2017 年上线首个区块链服务平台,同年发布了直销银行品牌。2018 年浙商银行国标 A 级数据中心启用,并在 2020 年成立易企银金融科技子公司。
 

业务背景

浙商银行微服务可视化治理平台是基于Java体系自研的微服务治理监控平台,为行内基于统一的微服务框架开发的应用提供全面、实时的微服务治理监控功能,能够有效提升云环境下的微服务可视化程度和服务管理控制的便捷度,减少服务故障发现时间,提升故障定位效率,辅助应用程序优化。在这样的业务场景中,数据量大、监控指标繁杂成了我们的主要挑战。
 
通过分析监控数据,我们发现它有以下特点:
• 数据高写入、低查询、不修改
对于按时间顺序插入的监控数据,会涉及到少量的查询,没有修改数据的业务场景。
• 无需事务支持
如果数据模型设计妥当,无需使用事务处理。
• 各监控指标之间相互独立,无需联合查询
• 数据时效性较强,超过一定时间的数据参考价值很小
 

核心诉求

针对这样的场景,我们需要一款能高效处理时序数据的工具。在各种因素的影响下,我们有如下几点需求:
• 开源可控,且最好是国产软件,且能支持国产化芯片
• 功能稳定
• 社区活跃:开发者社区人员多,问答、讨论频繁且有稳定的开发团队支持
• 部署成本低:尽可能少的服务节点,运维成本低,占用 CPU、内存资源较少
• 性能强大:支持万条数据秒级插入
 

时序数据库选型

在明确了核心诉求之后,我们调研了几款典型的时序数据库产品,包括 Apache DruidInfluxDBTDengine
具体对比如下:
 
Apache Druid:Druid 是 Apache 基金会旗下的一款高性能的实时分析数据库,支持时间序列数据。功能强大、可自愈、自平衡、易操作、可进行有效的预聚合和预计算。不过对于时间跨度较大的查询不够灵活,而且架构较为复杂,需要的计算资源多。
 
InfluxDB:InfluxDB 是由 InfluxData 公司开发的一款开源的时序数据库,在业界非常流行。功能强大,部署简单,使用方便。不过集群功能没有开源。
 
TDengine:能满足我们的核心诉求,相关测试表明其性能优于 InfluxDB,而且开源了核心的集群功能。简单快捷、性能强大;支持 JDBC 接口,可以使我们应用快速接入使用。还有一点非常重要,因为 TDengine 的核心研发团队在国内,很方便直接交流。
 
整体对比之后,我们决定尝试 TDengine。
 

技术架构

 
可视化服务治理平台的一个核心功能就是实时的监控功能,监控数据通过微服务框架自带的埋点发送到数据接收模块,经过数据处理和格式转换之后发送到 Apache Kafka。数据处理模块会接收 Kafka 中的各类监控数据,根据不同的数据类型进行加工计算,存储到 Elasticsearch 和 TDengine 中。用户通过前端与后端的服务层对监控数据进行查询分析。
目前为止,存储于 TDengine 中的数据主要为时序类数据,如CPU、内存使用率等系统运行数据,微服务调用、分布式锁、数据库操作处理时间,业务线程池、连接池等各类指标数据。
 

数据模型

目前收集的监控数据类型如下:
• JVMGC 相关指标
• JVMThread 相关指标
• JVMMemory 相关指标
• 系统负载相关指标
• 数据库连接池监控数据
• Transaction 调用监控数据
• Dubbo 线程池监控数据
 
我们针对每一个监控类型都采用了超级表建表,以 JVMGC 为例,建表语句为:
 create stable JVMGC (happentime timestamp, jvmUsedMemory bigint, jvmUsedMemoryyPercentage double, nonHeapMemoryUsed double, oldGenUsed bigint, oldGenUsedPercentage double , directBufferUsed bigint) tags (application NCHAR(300), host NCHAR(500), ip NCHAR(50)) 
 
与此同时,对每一个监控节点都建立一张子表,这样处理的好处在于:
• 相同指标在进行多表查询时,可以利用超级表在一个 SQL 语句中完成查询
• 超级表可以实现表与表之间的数据聚合
• 对于单节点的监控数据,查询只需要访问单一子表即可
 

使用体验

目前微服务可视化服务治理平台对并发要求较高,但是 TDengine 可以很好地满足需求,插入/查询平均耗时均在 10ms 以内。
TDengine 的开源版本小而精致,开发测试人员可以自己搭建私有的 TDengine 集群进行测试,无须担心影响他人,非常方便。
TDengine 的社区非常活跃,遇到问题在 GitHub 上提 issue,或直接在官方的微信交流群里讨论,都可以快速得到响应。
 

总结

TDengine 很好地满足了我们的需求,性能和稳定性都非常出色,同时极大降低了部署和运维成本。
TDengine 的支持团队也非常积极热心,能够快速解决我们遇到的大部分问题,为我们免除了后顾之忧。
作为一款为物联网场景设计的时序数据库,TDengine 以存储效率高、性能强大、功能稳定等特点在传统互联网应用架构中同样有着相当出色的发挥,超级表的设计省去了不少联表查询逻辑,大大简化了业务层的开发工作。接下来,我们也期待在行内挖掘出更多 TDengine 的应用场景。

TDengine在浙商银行微服务监控中的实践的更多相关文章

  1. 微服务架构中APIGateway原理

    背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...

  2. 微服务监控zipkin+asp.net core

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...

  3. 微服务监控之一:Metrics让微服务运行更透明

    摘要 让微服务运行状态清晰可见. 嘉宾演讲视频回顾及PPT:http://t.cn/R8b6i85 Metrics是什么 直译是“度量”,不同的领域定义有所区别,在微服务领域中的定义: “对微服务的某 ...

  4. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案

    Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...

  5. 基于log4net的日志组件扩展封装,实现自动记录交互日志 XYH.Log4Net.Extend(微服务监控)

    背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或 ...

  6. 在微服务架构中service mesh是什么?

    在微服务架构中service mesh是什么 什么是 service mesh ? 微服务架构将软件功能隔离为多个独立的服务,这些服务可独立部署,高度可维护和可测试,并围绕特定业务功能进行组织. 这些 ...

  7. 第七模块 :微服务监控告警Prometheus架构和实践

    119.监控模式分类~1.mp4 logging:日志监控,Logging 的特点是,它描述一些离散的(不连续的)事件. 例如:应用通过一个滚动的文件输出 Debug 或 Error 信息,并通过日志 ...

  8. 微服务架构中的BFF到底是啥?

    在<技术中台与业务中台都是啥玩意>一文中留下一个问题:BFF是啥?为啥在API网关和业务中台之间加入了一层BFF?考虑到在实际工作中,我的大部分同事都问过这个问题,这里我也总结一下进行答复 ...

  9. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

随机推荐

  1. PHP没有定时器?

    确实,PHP没有类似于JS中的setInterval或者setTimeout这样的原生定时器相关的函数.但是我们可以通过其他方式来实现,比如使用declare. 先来看看是如何实现的,然后我们再好好学 ...

  2. linux错误: locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

    命令 locate my.cnf 产生以上错误 此时执行 # updatedb 更新下数据库即可

  3. windows 中cmd一些特殊命令

    chcp 65001  就是换成UTF-8代码页 chcp 936 可以换回默认的GBK chcp 437 是美国英语 shutdown -s -t 60   60秒后关机 shutdown /a  ...

  4. Linux系列(37) - 源码包与RPM包区别(1)

    源码包是不能使用[service]命令来启动服务,因为源码包的安装位置由用户指定 源码包一般安装在: /usr/local/软件名/ ,源码包安装的服务,只能用绝对路径进行服务的管理 rpm包安装后, ...

  5. 真机连接电脑后,adb devices显示为空-解决方案

    真机:小米6x,adb版本 真机连接电脑后,在cmd中输入adb devices,显示为空. 原因是真机没开启开发者选项和USB调试. 解决方案: 手机的[设置]-[我的设备]-[全部参数],多次点击 ...

  6. [转载]Windows 2008多用户同时远程登陆配置方法

    有些朋友需要在在使用Windows 2008远程登录功能时,进行多用户登录,那么就可以采用以下配置方法: 首先要启用远程桌面这一功能:右击"我的电脑"→ 属性 → 远程配置 → 远 ...

  7. 使用python3中的2to3.py执行数据迁移

    1.在python默认安装的位置找到Tools\scripts 2.找到2to3.py 3.在所在文件夹shift+右键打开终端 4.执行命令python 2to3.py -w 需要做数据迁移的数据路 ...

  8. 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高 | 百篇博客分析OpenHarmony源码 | v31.02

    百篇博客系列篇.本篇为: v31.xx 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高 | 51.c.h .o 本篇说清楚定时器的实现 读本篇之前建议先读鸿蒙内核源码分析(总目录)其余篇. 运 ...

  9. 宝塔配置vnc+wine实现Q群机器人

    图形界面必备X Window System yum -y groupinstall "X Window System" 安装epel源 yum -y install epel-re ...

  10. VulnHub 实战靶场Breach-1.0

    相比于CTF题目,Vulnhub的靶场更贴近于实际一些,而且更加综合考察了知识.在这里记录以下打这个靶场的过程和心得. 测试环境 Kali linux IP:192.168.110.128 Breac ...