数据监控平台

数据监控平台 

监控平台需要实时监控业务指标数据,系统特点:高并发,大数据,低延迟。主要使用的技术:

HBase存储海量数据,ScriptEngine引擎,MySQL分表,Redis集群。

  • 高并发:系统调用量大,特别是大促期间,需要保证系统高可用
  • 大数据:监控平台需要存储海量数据,包括历史数据,用于数据分析
  • 低延迟:快速消费消息,保证监控数据无延迟。

数据实时监控-无延迟

在高并发下会有数据丢失,为提示系统吞吐量,在调用RPC失败时,接入方不会重试。

  • 接入方调用RPC服务
  • 实时存储数据

   

 数据实时监控-有延迟

  监控平台监听接入方的MQ消息,进行数据存储。数据不会丢失,但MQ消息会有延迟,监控的数据会有稍微的延迟。

 

数据流转

核心设计

Guava Cache

Guava Cache是单个应用运行时的本地缓存。它不把数据存放到文件或外部服务器。在重启服务器时缓存的数据会全部丢失。如果这不符合你的需求,请尝试Redis或Memcached这类工具。

优点:

①很好的封装了get、put操作,能够集成数据源。一般我们在业务中操作缓存,都会操作缓存和数据源两部分。如:put数据时,先插入DB,再删除原来的缓存;ge数据时,先查缓存,命中则返回,没有命中时,需要查询DB,再把查询结果放入缓存中。 guava cache封装了这么多步骤,只需要调用一次get/put方法即可。

②线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素。

③Guava Cache提供了三种基本的缓存回收方式:基于容量回收、定时回收和基于引用回收。定时回收有两种:按照写入时间,最早写入的最先回收;按照访问时间,最早访问的最早回收。

④监控缓存加载/命中情况。

缓存回收方式

a. 基于容量回收
maximumSize(long):当缓存中的元素数量超过指定值时。
b. 定时回收
expireAfterAccess(long, TimeUnit):缓存项在给定时间内没有被读/写访问,则回收。请注意这种缓存的回收顺序和基于大小回收一样。
expireAfterWrite(long, TimeUnit):缓存项在给定时间内没有被写访问(创建或覆盖),则回收。如果认为缓存数据总是在固定时候后变得陈旧不可用,这种回收方式是可取的。
如下文所讨论,定时回收周期性地在写操作中执行,偶尔在读操作中执行。
c. 基于引用回收(Reference-based Eviction)
CacheBuilder.weakKeys():使用弱引用存储键。当键没有其它(强或软)引用时,缓存项可以被垃圾回收。
CacheBuilder.weakValues():使用弱引用存储值。当值没有其它(强或软)引用时,缓存项可以被垃圾回收。
CacheBuilder.softValues():使用软引用存储值。软引用只有在响应内存需要时,才按照全局最近最少使用的顺序回收。

通过官方wiki:CachesExplained · google/guava Wiki · GitHub ,具体如下

    Caches built with CacheBuilder do not perform cleanup and evict values "automatically," 
or instantly after a value expires, or anything of the sort. Instead, it performs small amounts 
of maintenance during write operations, or during occasional read operations if writes are rare.The reason for this is as follows: if we wanted to perform Cache maintenance continuously, we would 
need to create a thread, and its operations would be competing with user operations for shared locks. 
Additionally, some environments restrict the creation of threads, which would make CacheBuilder 
unusable in that environment.Instead, we put the choice in your hands. If your cache is high-throughput, then you don't have to 
worry about performing cache maintenance to clean up expired entries and the like. If your cache 
does writes only rarely and you don't want cleanup to block cache reads, you may wish to create 
your own maintenance thread that calls Cache.cleanUp() at regular intervals.If you want to schedule regular cache maintenance for a cache which only rarely has writes, 
just schedule the maintenance using ScheduledExecutorService.

从上面这段说明中,我们知道一下几点:

使用CacheBuilder构建的Cahe不会“自动”执行清理数据,或者在数据过期后,立即执行清除操作。相反,它在写操作期间或偶尔读操作期间执行少量维护(如果写很少)。

这样做的原因如下:
如果我们想要连续地执行缓存维护,我们需要创建一个线程,它的操作将与共享锁的用户操作发生竞争。此外,一些环境限制了线程的创建,这会使CacheBuilder在该环境中不可用。

简单来说,GuavaCache 并不保证在过期时间到了之后立刻删除该 <Key,Value>,如果你此时去访问了这个 Key,它会检测是不是已经过期,过期就删除它,所以过期时间到了之后你去访问这个 Key 会显示这个 Key 已经被删除,但是如果你不做任何操作,那么在 过期时间到了之后也许这个<Key,Value> 还在内存中。 

POM依赖

         <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version></dependency>

 代码演示

 秒级监控  duration = 100ms

分钟级监控  duration = 700ms

import com.google.common.cache.*;import java.util.concurrent.TimeUnit;public class GuavaTest {public static void main(String[] args) throws Exception {LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()//.expireAfterWrite(100, TimeUnit.MICROSECONDS)//.expireAfterAccess(100, TimeUnit.MICROSECONDS).refreshAfterWrite(100, TimeUnit.MILLISECONDS)  //当缓存项上一次更新操作之后的多久会被刷新。.initialCapacity(500)//设置缓存最大容量为500,超过500之后就会按照LRU最近虽少使用算法来移除缓存项.maximumSize(1000)//设置要统计缓存的命中率.removalListener(new RemovalListener<Object, Object>() {@Overridepublic void onRemoval(RemovalNotification<Object, Object> removal) {System.out.println("loadingCache is removed. key:" + removal.getKey() + ",value:" + removal.getValue());}}).build(new CacheLoader<String, Integer>() {@Overridepublic Integer load(String s) throws Exception {System.out.println("load exprie=" + s);return 1;}});cache.put("monitor_order_1_20220729090001", 100);System.out.println(cache.size());Thread.sleep(1000);if (cache != null && cache.size() > 0) {for (String key : cache.asMap().keySet()) {System.out.println(key);cache.get(key);}}}
}

HBase 设计

读写性能:Hbase采用了LSM结构,写快读慢,Hbase读延时在一般在几毫秒,Redis读延时在几十微秒,性能相差比较大

数据量:Redis在热数据比内存大时,性能下降比较厉害,非常依赖内存,Hbase不存在这问题

数据持久化:Hbase采用了WAL,先记录日志再写入数据,理论上不会丢失数据,而Redis采用的是异步复制数据,failover时可能丢失数据

用Hbase+Redis实现数据仓库加缓存数据库,速度和扩展性都兼顾

  RowKey设计 

分类RowKey总数
秒级monitor_name(业务名称)_type(业务数据类型)_yyyyMMddHHMMsscount
分钟级monitor_name(业务名称)_type(业务数据类型)_yyyyMMddHHMMcount

ScriptEngineManager

ScriptEngineManager 为 ScriptEngine 类实现一个发现和实例化机制,还维护一个键/值对集合来存储所有 Manager 创建的引擎所共享的状态。此类使用服务提供者机制枚举所有的 ScriptEngineFactory 实现。

ScriptEngineManager 提供了一个方法,可以返回一个所有工厂实现和基于语言名称、文件扩展名和 mime 类型查找工厂的实用方法所组成的数组。

键/值对的 Bindings(即由管理器维护的 "Global Scope")对于 ScriptEngineManager 创建的所有 ScriptEngine 实例都是可用的。Bindings 中的值通常公开于所有脚本中。

package com.example;import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;public class ScriptEngineTest {public static void main(String[] args) throws Exception {ScriptEngineManager manager = new ScriptEngineManager();//查找并创建一个给定名称的 ScriptEngineScriptEngine engine = manager.getEngineByName("js");//执行指定的脚本engine.eval("function add (a, b) {c = a + b; return c; }");//由 ScriptEngines 实现的可选接口,该 ScriptEngines 的方法允许在以前执行过的脚本中调用程序Invocable jsInvoke = (Invocable) engine;//用于调用脚本中定义的顶层程序和函数Object result1 = jsInvoke.invokeFunction("add", new Object[]{10, 5});System.out.println("result1=" + result1);Adder adder = jsInvoke.getInterface(Adder.class);int result2 = adder.add(10, 5);System.out.println("result2=" + result2);}public interface Adder {int add(int a, int b);}
}

监控表

QPS:每秒查询率,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量衡量标准

TPS:每秒事务数,是一台数据库服务器在单位时间内处理的事务的个数

最大连接数:通常MySQL的最大连接数默认是151 最大可以达到16384。实际连接数是最大连接数的85%较为合适,所以最大连接数我们可以根据实际连接数去设置(如果你想设置最大连接数超过1024,还需要修改文件描述符的上限)

测试参数

实例规格存储空间表数量表行数数据集大小并发数执行时间(m)
1核1GB200GB42000万19GB12830
1核2GB200GB44000万38GB12830
2核4GB200GB84000万76GB12830
4核8GB200GB154000万142GB12830
4核16GB400GB254000万238GB12830
8核32GB700GB254000万238GB12830
16核64GB1TB404000万378GB25630
16核96GB1.5TB404000万378GB12830
16核128GB2TB404000万378GB12830
24核244GB3TB604000万567GB12830
48核488GB6TB604000万567GB12830
48核488GB(调优)6TB601000万140GB12830

测试结果 

实例规格存储空间数据集客户端数单客户端并发数QPSTPS
1核1GB200GB19GB1128175797
1核2GB200GB38GB11283016167
2核4GB200GB76GB11284082816
4核8GB200GB142GB112865511310
4核16GB400GB238GB1128110982219
8核32GB700GB238GB2128204843768
16核64GB1TB378GB2128363957279
16核96GB1.5TB378GB31285646411292
16核128GB2TB378GB31288175216350
24核244GB3TB567GB41289852819705
48核488GB6TB567GB612814224628449
48核488GB(调优)6TB140GB612824550946304

参考:Mysql性能指标(QPS、TPS)_武壮的博客-CSDN博客_mysql qps tps

https://www.jianshu.com/p/b51c4d5bdfc4

monitor_seconds_202207

列明类型是否主键是否为空
idBIGINT
dateVARCHAR(16)
nameVARCHAR(32)
typeINT
minutesINT
countBIGINT
create_timeDATETIME
modified_timeDATETIME

 monitor_minutes_202207

列明类型是否主键是否为空
idBIGINT
dateVARCHAR(16)
nameVARCHAR(32)
typeINT
minutesINT
countBIGINT
create_timeDATETIME
modified_timeDATETIME

Redis 

OPS : redis中的OPS 即operation per second 每秒操作次数。意味着每秒对Redis的持久化操作。

数据包 : 控制好数据包大小,高性能网络通信最忌收发大量小包,控制在1400字节附近最佳,最差也要pipeline。

Redis 采用集群部署,多个分片(如:16个分片),每个分片内存10G。每个分片的OPS 大约 5W,则16个分片可以支持 80W的OPS。

参考:深度解析单线程的 Redis 如何做到每秒数万 QPS 的超高处理能力! - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381913.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

应用监控系统

做这个系统其实当时的想法是开放给开发&#xff0c;然后开发自己做一些自己需要的监控&#xff0c;以便最早发现问题&#xff0c;但是做完发现跟nagios\zabbix重复的相当严重&#xff0c;其实应该在nagios\zabbix上继续开发一下应该会更好&#xff0c;先贴出来吧&#xff01; 一…

大众点评Cat实时应用监控平台服务端部署

关于cat服务端部署的相关文档地址如下&#xff1a; https://github.com/dianping/cat/wiki/readme_server 话不多说&#xff0c;接下来就按照官方文档流程走一遍&#xff0c;我这里是使用的Windows系统进行部署。 第一步确认环境&#xff1a; 我这边使用的是如下环境&#xff…

Skywalking 快速搭建应用监控

今天我们就着重讲一讲如何基于 Skywalking 来快速搭建一套应用性能监控平台 一、Skywaling 介绍 Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c; 2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c; 2019年4月17日SkyWalking从…

SprngBoot Admin (应用监控)

1 简介 SpringBoot应用可以通过Actuator来暴露应用运行过程中的各项指标&#xff0c;Spring Boot Admin通过这些指标来监控SpringBoot应用&#xff0c;然后通过图形化界面呈现出来。Spring Boot Admin不仅可以监控单体应用&#xff0c;还可以和Spring Cloud的注册中心相结合来…

行业分析| anyRTC智慧视频监控的应用

智慧视频监控是安全防范系统的重要组成部分&#xff0c;不仅可以达到一般视频监控系统的远程控制监控、视频回看&#xff0c;满足治安管理、城市管理、交通管理、应急指挥等需求&#xff0c;还具备防盗报警系统的预警信息作用&#xff0c;在预防、发现、控制、打击违法犯罪&…

十四、应用监控(2)

本章概要 监控信息可视化邮件报警 14.2 监控信息可视化 Spring Boot 中提供了监管信息管理段&#xff0c;用来实现监控信息的可视化&#xff0c;这样可以方便开发者快速查看系统运行情况&#xff0c;而不用一个一个地调用接口。 创建 Spring Boot Web 工程&#xff0c;添加以…

Prometheus应用监控

1.主流机器与应用Prometheus,skywalking监控体系分享介绍 应用监控介绍 目前市面上开源应用的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking。目前市面上机器监控软件有zabbix&#xff0c;Prometheus(也能监控应用&#xff0c;及其他中间件产品)。 Zipkin是Twitter开源的…

系统与应用监控的思路和方法

0、前言 在实际的性能分析中&#xff0c;一个很常见的现象是&#xff0c;明明发生了性能瓶颈&#xff0c;但当你登录到服务器中想要排查的时候&#xff0c;却发现瓶颈已经消失了。或者说&#xff0c;性能问题总是时不时地发生&#xff0c;但却很难找出发生规律&#xff0c;也很…

应用程序服务器监控

什么是应用程序服务器监视 为了确保业务应用程序的最佳性能&#xff0c;必须使用应用程序服务器监视工具&#xff0c;以深入了解应用程序的运行状况和正常运行时间。应用程序服务器监视可帮助您识别性能不足的服务器组件以及性能问题的根本原因&#xff0c;修复它们并确保应用…

应用监控

简介 Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。 Endpoints 列举一些主要的endpoints &#xff1a; 敏感信息访问限制 根据上面表格&#xff0c;鉴权为false的&#xff0c;表示不敏…

应用监控以及告警实现

前言 一个Java应用 可以不优秀&#xff0c;但是一定不能没有监控方案。否则极大影响排查线上问题的效 以及系统故障的及时告警 。试想 核心应用挂了一个 但是没有配置告警 理想情况几个小时 被自己人发现了 但是万一自己人也没看到或者没关注 那难道让服务一直挂下去么 &#…

十四、应用监控(1)

本章概要 监控端点配置&#xff08;开启端点&#xff0c;暴露端点&#xff0c;端点保护&#xff0c;端点响应缓存&#xff0c;路径映射&#xff0c;CORS支持&#xff0c;健康信息&#xff0c;应用信息&#xff09; 当一个Spring Boot 项目运行时&#xff0c;开发者需要对 Spr…

一篇文章讲透线上应用监控

“线上服务停了&#xff0c;要重启一下”&#xff1f;久经职场做研发的程序员&#xff0c;视线会逐渐转移到线上应用的运行状态。设想一下&#xff0c;如果你在半夜两点正在酣眠美梦时&#xff0c;微信群里突然炸开锅&#xff1a;“服务停了&#xff0c;先重启。。。”&#xf…

如何设置时间倒计时

开发工具与关键技术&#xff1a;Visual Studio 2015、SQL Server 2014 作者&#xff1a;黄世豪 撰写时间&#xff1a;2019年01月31号相信很多小伙伴在做项目时会遇到过要用到时间倒计时的效果&#xff0c;下面我们来实现一下如何将自己设置的时间来让其进行时间倒计。 jsp调用…

js倒计时读秒

1.需求及分析 最近,接到一个接收手机验证码的功能&#xff0c;大体就是设置一个定时器&#xff0c;在每次执行的时候将秒数&#xff0c;逐个减去1&#xff0c;小于0的时候&#xff0c;清除定时器&#xff0c;然后完善一下功能&#xff0c;例如&#xff0c;加上一下状态的变化&…

C#实现倒计时的功能

软件界面&#xff1a; 软代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…

android studio高考倒计时,高考倒计时app排行榜

编辑推荐 时间管理倒计时 v1.3.0 大小&#xff1a;13.7MB 更新时间&#xff1a;21-04-14 下载 时间管理倒计时&#xff0c;一款专为小伙伴打造的手机时间规划工具&#xff0c;为小伙伴提供更强大的规划服务&#xff0c;在这里小伙伴可以自由规划自己的时间&#xff0c;为小伙伴…

VS2015+C#实现倒计时小程序

最近疫情严重&#xff0c;在家呆着也是呆着&#xff0c;于是就想学一下上位机的编写&#xff0c;权衡利弊之后&#xff0c;选择了C#语言&#xff0c;原因是据说它写出来的上位机比较小&#xff0c;不占内存。开发环境就用VS吧&#xff0c;用的人挺多的。好了&#xff0c;进入正…

C#之一个倒计时小应用程序的实现

只能开始计时&#xff0c;不能停止计时 代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…