SpringBoot Metrics 监控系统(4)——使用指标

一、前言在上一章节,我们已经完成了 SpringBoot Metrics 程序的框架搭建。在本章节中,我们将在程序中进行 Metrics 埋点,并能够被 Prometheus 采集到,且最终在 Grafana 中展示出来。 二、Metrics 埋点2.1 Counter先来介绍下最简单的 Counter 类型,它是不断递增的一种数据结构,你可以将其理解为计数器。 假设我们想要统计两部视频的阅...

SpringBoot Metrics 监控系统(3)——搭建框架

一、前言本章节开始将为大家展示如何在 SpringBoot 应用中去使用 Metrics 监控。本系列使用的 SpringBoot 版本为笔者当前的最新 RELAESE 版本 2.4.0,整个 SpringBoot 2 关于这边都是大同小异,所以大家不用担心版本问题。 二、依赖包除了常规开发 SpringBoot Web 所需要的两个包外: <dependency> &l...

SpringBoot Metrics 监控系统(2)——快速起步

一、Docker首先需要安装 Docker,已经安装的朋友直接跳过该节即可。 Docker 最近新出了 Docker Desktop,可以对容器和镜像可视化管理,还是很不错的。访问官网 下载即可,这里我使用 Windows 平台进行安装。【最好采用科学上网,否则速度会很感人】 如果安装完毕后打开报下图的错,需要在更新下 WSL2,点此下载。 启动成功后如下图所示: 二、Promethe...

SpringBoot Metrics 监控系统(1)——技术介绍

一、前言本系列将为大家介绍如何对我们的 SpringBoot 应用程序进行监控和告警,使用的技术为 Prometheus + Grafana。二者均采用 Docker 进行安装部署,实际工作中自己在生产环境搭建的可能性不大,因此我们关注的重点放在如何使用就好了。 二、PrometheusPrometheus 是 Soundcloud 开发的一款开源的监控工具,其本质是一个时间序列数据库(TS...

使用 Fiddler 进行模拟器抓包

Fiddler 是一款比较常用的网络抓包工具,本文记录下使用其完成对模拟器中请求进行抓包的过程。 点击链接 官网下载 Fiddler,可能需要翻墙。下载完毕后,常规安装并登录后打开应用。 点击右上角⚙图标,进入设置页面 选择 HTTPS 选项卡,点击 Trust root certficarte ,获取 root 权限。获取完毕后,勾选下方复选框,以支持对 HTTPS 协议的请求。 展...

如何优雅的统计代码耗时

一、前言代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。 可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。特别是开发功能的时候,有个感受就是刚刚开发完代码很清爽优雅,结果加了一大堆辅助代码后,整个代码就变得臃肿了,自己看着都挺难受。因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一...

Mac 安装 brew

一、前言brew 是 Mac 和 Linux 下的包管理器,但是需要手动安装,在国内操蛋的网络环境下,想要不翻墙安装,还得花点功夫。本文记录在非翻墙情况下,如何安装 brew。 二、安装流程2.1 官方步骤/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/inst...

Java 浅拷贝性能比较

一、前言实际开发中,经常会遇到对象拷贝的需求,本文就结合日常开发过程中,使用到的浅拷贝技术,进行性能比较,看看谁更强。 重要: 下面将会花大量篇幅,列出各种类型浅拷贝的代码,你可以直接拖到文章末尾,看性能对比结果。然后再根据你中意的对象回过头来看它的代码,避免疲劳。 首先创建一个用于拷贝的 Bean,如下所示: import lombok.AllArgsConstructor; impor...
Java

Lombok 子类如何使用 @Builder

一、前言业务开发中,子类父类还算是经常用到,Lombok 的 @builder 提供的链式调用帮助我们更轻松的创建对象。但是实验后却发现子类的 @Builder 是不会包含父类的属性。 假设存在父类 A: @Data @Builder public class A { private String aName; private String aAge; }...

Java Fail-Fast 与 Fail-Safe 特性

一、前言在 Java 的集合结构中,如果我们同时进行遍历(for-each, iterator)和集合修改(add, set, remove…)操作时,就有可能发生异常。例如,线程 T1 在对集合进行遍历,而此时线程 T2 对集合进行添加元素;亦或者线程 T1 在对集合进行遍历的过程中,进行删除元素操作。 不同的集合在遇到上述这种情况时,会有不同的处理。按照处理的不同,划分为 Fail-Fa...
Java

详解 Caffeine Cache

一、前言在项目开发中,为提升系统性能,减少 IO 开销,本地缓存是必不可少的。最常见的本地缓存是 Guava 和 Caffeine,在 《详解 Guava Cache》中已经为大家介绍了 Guava,本篇文章将为大家介绍 Caffeine。 Caffeine 是基于 Google Guava Cache 设计经验改进的结果,相较于 Guava 在性能和命中率上更具有效率,你可以认为其是 Gu...
Java

SpringBoot @Value 解析集合配置

一、前言在日常开发中,经常会遇到需要在配置文件中,存储 List 或是 Map 这种类型的数据。Spring 原生是支持这种数据类型的,以配置 List 类型为例,对于 .yaml 文件配置如下: test: list: - aaa - bbb - ccc 对于 .properties 文件配置如下所示: test.list[0]=aaa test.list[1]...