自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

方亮的专栏

方亮的专栏

  • 博客(382)
  • 资源 (2)
  • 收藏
  • 关注

原创 谈代码注释

只要写代码,就会遇到代码注释的问题。在不同的公司,不同的项目组,不同的项目中,可能会有不同的注释标准。有些标准让我们感觉很受益,有些则让我们感觉很反感。而对于没有明确标准的项目,我们往往会遇到“百花齐放,百家争鸣”般的注释。我无法给出一个明确的标准,只是在此探讨下:什么样的注释不应该写,什么地方需要写注释。(转载请指明出于breaksoftware的csdn博客)“不”的原则...

2018-04-01 01:24:25 10334 11

原创 Language APIs & SDKs-C++-Instrumentation

然后,您将使用SDK初始化 OpenTelemetry并使用API来测量您的代码。这将从您的应用程序以及您安装的任何也附带测量装置的库发出遥测数据。如果您要测量库,请仅安装适合您的语言的OpenTelemetry API包。Metrics SDK 将隐式创建一个缺失的视图,其中包含装置和聚合之间的默认映射。当给定Span处于活动状态时,新创建的Span将继承活动Span的trace ID和其他上下文属性。活动Span的概念很重要,因为在没有显式指定父级的情况下创建的任何Span都是当前活动Span的父级。

2024-04-18 18:30:00 739

原创 Opentelemetry——分析C++项目链接时循环依赖导致的错误

它的意思是找不到opentelemetry::v1::sdk::common::internal_log::GlobalLogHandler::GetHandlerAndLevel()的定义。我们到工程中定位该文件,然后看它编译到哪个项目里去了。

2024-04-18 18:15:00 724

原创 Opentelemetry-Language APIs & SDKs-C++-Getting Started

在您的otel-cpp-starter文件夹中,创建一个子文件夹roll-dice,其中将通过引用oatpp头文件,并在编译项目时链接它们来使用Oat++库。要将OpenTelemetry添加到您的应用程序,请让CMakeLists.txt使用以下附加依赖项,并更新文件。在该roll-dice文件夹中,创建一个名为main.cpp的文件,并将以下代码添加到该文件中。此命令将在您的系统上安装构建的oatpp库和头文件,使其可以在您的项目中进行开发。成功构建项目后,您可以运行生成的可执行文件。

2024-04-17 19:00:00 650

原创 Opentelemetry——Sampling

例如,生成大量跟踪数据的一组服务可能首先使用头部采样仅对一小部分跟踪进行采样,然后在Telemetry管道中使用尾部采样做出更复杂的采样决策,然后再导出到后端。在这种情况下,采样决策是根据Trace ID和所需的采样Trace百分比做出的。尾部采样是通过考虑Trace内的全部或大部分Span来决定对Trace哪些地方的Span进行采样的方法。尾部采样允许您根据Trace的不同部分派生出的特定条件对Trace进行采样,而头部采样则无法提供此选项。不同的组织不仅有自己的采样原因,而且也有自己想要采样的对象。

2024-04-17 06:45:00 588

原创 Opentelemetry——Components

此外,许多对遥测数据进行操作的工具都支持 OTLP(例如Prometheus、Jaeger和大多数供应商),在您需要时为您提供高度的灵活性。OpenTelemetry 还提供了针对特定语言的 SDK,让您可以使用 OpenTelemetry API 使用您选择的语言生成遥测数据,并将该数据导出到首选的后端。OpenTelemetry社区当前提供预构建的Lambda层,自动测量您的应用程序,以及可以使用的独立Collector Lambda层的选项用于手动或自动测量应用程序。

2024-04-16 18:30:00 660

原创 Opentelemetry——Instrumentation-Libraries

在单个响应的情况下,网络上只有一个上下文,它成为库创建的新Span的父Span。采样输出的Span是低功耗的,您可以检查Span是否正在记录,以避免在填充属性时进行额外的分配以及高功耗的计算。特别注意Span名称;公共 API 是Trace的良好使用方法:为公共 API 调用创建的Span允许用户将遥测数据映射到应用程序代码,了解库调用的持续时间和结果。获取Tracer时,提供您的库(或跟踪插件)名称和版本——它们显示在遥测数据上,并帮助用户处理和过滤遥测数据,了解它的来源,并调试/报告任何测量装置问题。

2024-04-16 18:15:00 990

原创 Opentelemetry——Instrumentation-Code-based

您在此处选择的名称应该精确表达正在检测的具体内容—— 例如,如果您正在编写一个库,那么您应该以您的库命名它(例如 com.example.myLibrary),因为该名称将为所有生成的Span或Metric Events提供命名空间。进程内导出数据要求您引入并依赖一个或多个导出器、库,这些库将 OpenTelemetry 的内存中Span和Metric对象转换为适合遥测数据分析工具(如 Jaeger 或 Prometheus)需要的格式。如果您的操作对象是独立的进程或服务,那么您将依赖API和SDK。

2024-04-15 18:45:00 549

原创 Opentelemetry——Instrumentation-Zero-code

零代码检测通常以代理或类似代理安装的方式将OpenTelemetry API 和 SDK 功能添加到您的应用程序中。OpenTelemetry可让您快速获得服务的一些可观测性,而无需使用 OpenTelemetry API 和 SDK 进行基于代码的检测。通常,零代码检测会为您正在使用的库添加检测量化装置。要检测您的代码,您需要使用基于代码的检测。首先,您只需要配置一个服务名称,以便您可以在您选择的可观测性后端中识别该服务。此外,零代码检测允许您配置需要加载的检测量化库和导出器。

2024-04-15 18:15:00 824

原创 Opentelemetry——Instrumentation

基于代码的解决方案使您可以从应用程序本身获得更深入的洞察和丰富的遥测数据。它们允许您使用 OpenTelemetry API 从应用程序生成遥测数据,这是对零代码解决方案生成的遥测数据的重要补充。它们从您使用的库和/或应用程序运行的环境中提供丰富的遥测数据。OpenTelemetry 提供的不仅仅是零代码和基于代码的遥测解决方案。为了使系统可观察,必须对其进行检测量化,也就是说,来自系统组件的代码必须发出Traces, Metrics和Logs。了解设置基于代码的Instrumentation的基本步骤。

2024-04-14 16:00:00 714

原创 Opentelemetry——Signals-Baggage

具体来说,Baggage 和Trace Context的其他部分在 HTTP 标头中发送,使其对检查您的网络流量的任何人都可见。如果您的网络内的流量受到限制,则此风险可能不适用,但请记住,下游服务可能会将Baggage传播到您的网络之外。例如,您可能希望将应用程序中的信息附加到一个Span,并在稍后检索该信息,然后在另一个Span中使用它。例如,假设您希望涉及多个服务的Trace中的每个Span都有一个CustomerId属性,而CustomerId仅在一项特定服务中可用。信号之间传递的上下文信息。

2024-04-14 10:00:00 835

原创 Opentelemetry——Signals-Logs

Log通常包含详细的调试/诊断信息,例如操作的输入、操作的结果以及表达该操作的任何元数据。相反,您只需使用您喜欢的Log库,并将其配置成可以将Log发送到 OpenTelemetry LogRecordExporter 的Log Appender / Bridge即可。对于Trace和Metrics,OpenTelemetry采用了全新的设计方法,指定了新的 API,并在多种编程语言的SDK中提供了该API的完整实现。Log Appender / Bridge的一部分,仅当您是Log库的作者时才应使用。

2024-04-13 13:05:11 773

原创 Opentelemetry——Signals-Metrics

在某些语言的 SDK 中,已经为您初始化了一个全局的Meter Provider。的概念也是需要理解的一个重要概念。聚合是一种将大量测量结果,组合成有关时间窗口期间发生的度量事件的,精确或预估统计数据的技术。与旨在捕获请求生命周期,并为请求的各个部分提供上下文的请求跟踪(Trace)不同,指标旨在提供聚合的统计信息。要了解OpenTelemetry中的指标是如何工作的,让我们看一下将在检测我们的代码中发挥作用的这些组件。,它不仅包含仅测量值本身,还包含捕获测量值的时刻,以及关联的元数据。

2024-04-13 11:00:00 1149

原创 Opentelemetry——Signals

OpenTelemetry 的目标是收集、处理和导出Signals。Signals是系统导出的,用于描述在平台上运行的操作系统和应用程序的活动状态。Signals可以是您想在特定时间点测量的东西,例如温度或内存使用情况,或在分布式系统的各个组件上流转的、用于追踪的事件。您可以将不同的Signals组合在一起,以观察同一项技术在不同情况下的内部运作情况。Events是一种特定类型的Log,profiles是基于Profiling Working Group运行的。在Signals之间传递的上下文信息。

2024-04-12 08:39:10 325

原创 Opentelemetry——Signals-Trace

了解分布式应用程序的完整路径。Traces让我们全面了解请求发送到应用程序时发生的情况。无论您的应用程序是具有单个数据库的单体架构,还是具有复杂的服务网格,Trace对于了解请求在您的应用程序中完整的传播“路径”都至关重要。让我们用三个工作单元来探讨这个问题,这些单元是Spans这是Root Span,表示整个操作的开始和结束。请注意,它有一个指向Trace的字段——trace_id,但没有parent_id。这就是你如何判断它是否是Root Span的方法。

2024-04-12 07:00:00 655

原创 Opentelemetry——Observability Primer

可观测性入门可观测性核心概念。什么是可观测性?可观测性是指我们可以从外部,在不了解其内部工作原理的情况下,可以向系统提出(诊断)问题(的特性)。(可以理解为医生没有进入我们血管,但是可以问我们“血压多少”)此外,它还使我们能够轻松排查和处理新问题,并帮助我们回答”为什么会发生这种情况?之类的问题。为了能够对系统提出这些问题,应用程序必须被正确检测量化。也就是说,应用程序代码必须发出Traces、Metrics和Logs等信号。

2024-04-11 19:45:00 1020

原创 Opentelemetry——What is OpenTelemetry

OpenTelemetry 是一个可观测性框架和工具包,旨在创建和管理telemetry数据,例如Traces、Metrics和Logs。至关重要的是,OpenTelemetry 是与(软件)供应商或工具无关的,这意味着它可以与各种可观测性后端一起使用,包括 Jaeger和 Prometheus 等开源工具,以及商业产品。OpenTelemetry受到众多(软件)供应商的支持,其中许多供应商为OpenTelemetry提供了商业支持,并直接参与了该项目。OpenTelemetry被设计为可扩展的。

2024-04-11 19:30:00 1109 2

原创 0基础学习Mybatis系列数据库操作框架——查询结果过滤器

在中,我们在Mybatis向数据库发起请求前,拦截了Delete操作。而如果有些数据不希望业务代码查询到,则可以使用本文介绍的“查询结果过滤器”。Mybatis并没有设计这样的组件,但是我们可以通过自定义对象工厂来解决这个问题。我们将基于来设计本案例。

2024-04-07 09:02:19 616

原创 0基础学习Mybatis系列数据库操作框架——自定义拦截器

Mybatis的拦截器除了可以拦截Delete操作,还可以拦截很多Mybatis框架内部其他行为。

2024-04-07 09:01:26 423

原创 0基础学习Mybatis系列数据库操作框架——自定义分布式缓存器

继承org.apache.ibatis.cache.Cache接口,主要实现putObject和getObject方法。getObject返回null时,Mybatis会查询数据库;getObject返回对象时,Mybatis直接返回该对象,而不会查询数据库。当Mybatis查询数据库后,会调用putObject方法,让我们有保存数据到缓存的机会。实现org.apache.ibatis.builder.InitializingObject接口,让缓存器在构造时有我们自定义的初始化的机会。

2024-04-06 18:54:07 968

原创 0基础学习Mybatis系列数据库操作框架——自定义类型处理器

数据库中保存的Json等格式如何使用Mybatis做自动个序列化和反序列化。

2024-04-06 00:52:45 893

原创 在一套Dockerfile中完成编译和运行环境部署

对于像C、C++这类编译型语言,编译器会直接将代码编译成二进制,然后在操作系统上执行。而像Java这类解释型语言,编译器(Java编译器是Java写的)会将代码编译成中间码,然后在虚拟机上执行,而虚拟机(Java虚拟机是C++写的,最后编译成二进制码)是在操作系统上执行的。不管是编译型语言还是解释型语言,我们都可以把上述过程拆解为两部分。

2024-04-04 23:44:40 1096 1

原创 在Linux系统上搭建Android、Linux和Chrome性能监控和Trace分析的系统

perfetto是知名的Android系统性能分析平台。我们还可以用它去分析Linux系统和Chrome(需要装扩展)。本文我们只介绍如何安装的验证。

2024-04-04 15:47:24 469

原创 0基础学习Mybatis系列数据库操作框架——字段映射

在的更新操作中,我们定义的SQL Mapper是

2024-04-03 19:10:46 487

原创 0基础学习Mybatis系列数据库操作框架——配置中字段顺序问题

我们在中,给配置文件新增了properties字段,让这些属性值可以被同文件中其他地方引用,简化了文件。

2024-04-02 23:59:49 1022

原创 0基础学习Mybatis系列数据库操作框架——增删改操作

在一文中,我们已经搭建了查询操作的框架。在这个基础上,我们将通过本文的学习掌握增、删、改的操作。为了让数据维度更加丰富,我们给数据库单行数据映射的对象类增加两个变量——info_tint和info_sint,它们分别对应数据库表中对应的项。

2024-04-02 23:26:40 700

原创 0基础学习Mybatis系列数据库操作框架——多环境配置

在实际开发中,我们往往会将开发环境分成:开发、测试、线上等环境。这些环境的数据源不一样,比如开发环境就不能访问线上环境,否则极容易出现线上数据污染等问题。Mybatis通过多环境配置分开定义来解决这个问题,即我们可以在Mybatis的配置文件中定义多个环境的信息。

2024-04-02 21:30:39 720

原创 0基础学习Mybatis系列数据库操作框架——目录结构

否则我们在后续的Java代码中不能创建SQL映射器对象。

2024-04-01 18:55:52 874

原创 0基础学习Mybatis系列数据库操作框架——最小Demo

在学习Java的过程中,一般都会学习到使用JDBC连接和操作数据库的知识。Mybatis则是JDBC的一个上层封装,它简化了驱动加载、创建连接等操作。我们只要按照规范配置几个文件、写几个Java类和按一定规则将这些配置文件通过代码的形式加以利用,即可完成数据库的相关操作。这个系列我们将学习Mybatis以及基于它开发出的工具MybatisPlus。在这个探索的过程中,我们将依赖包的管理交给Maven去做,注意力主要集中在Mybatis相关技术的应用上。

2024-03-31 23:11:53 1126

原创 在Windows的Docker上部署Mysql服务

在我们做一些和数据库相关的测试时,往往需要快速部署一个数据库作为数据源。如果开发环境是Windows,且开发的代码不依赖于系统,即不用在linux上做开发,则可以将全套环境都部署在Windows上。本地安装数据库会污染操作系统环境,且后期维护成本都比较高。而使用Windows Docker Desktop去做部署是一个很好的选择。本文就以Mysql部署为例,讲解操作和验证方法。

2024-03-30 12:03:59 515

原创 解决WSL更新速度慢的方案

WSL的全称是Windows Subsystem for Linux 2。它是微软的产品,于是我就在微软旗下的bing.com上搜索,第一条搜索结果就给出了准确答案。在Windows上安装Docker Desktop时,如果选择使用WSL,则可能会出现在运行程序前要求升级WSL的步骤。但是升级速度特别慢,于是在网络不稳定的情况下经常会出现下载失败的情况。中,有提供WSL 2.1.5的离线包地址(安装完之后docker就可以运行了。百度里一直没搜到好的方案。),然后通过迅雷下载它。

2024-03-29 23:51:26 394

原创 在ubuntu上搭建系统监控系统

在一个监控系统中,一定会有“数据生产方”和“数据消费方”存在。“数据生产方”用于产出需要监控的相关指标数据;“数据消费方”使用这些数据产生额外的信息和功能,比如数据图表化表达、异常数据预警等。当“数据生产方”变多时,系统往往会演化出“数据收集方”用于统一收集数据。这个时候“数据消费方”可以通过“数据收集方”获得全部数据。当“数据消费方”变多时,不同的“数据消费方”会有不同诉求。比如有的只要A“数据生产方”的数据;有的既要A的、也要B的数据。

2024-03-29 08:42:52 1297

原创 在ubuntu上编译prometheus

prometheus的编译并不难,核心是要将编译环境配置到符合要求的地步,否则就会出现各种错误,而且难以排查。我们主要需要。以下步骤亲测有效。

2024-03-27 18:22:12 902

原创 IT项目研发过程中的利器——用Top分析CPU利用率

1、5、15分钟值基本相等,说明系统稳定运行;哪个值和其他值对比出现偏离,说明产生了变化。1分钟偏离,说明系统在变忙碌(值大),或者变空闲(值小)。5分钟偏离,说明中期系统出现抖动。15分钟偏离,说明系统在变空闲(值大),或者变忙碌(值小)。一般只要出现非平稳状态,就要定位原因,否则就是隐患。

2024-02-05 17:51:45 1014

原创 IT项目研发过程中的利器——C/C++项目调用图篇

当我们拿到一个比较大的项目源码时,往往需要总览代码的结构,理清脉络,发现核心点。如果没有前人给出的经验,我们该如何找到关键的函数和模块呢?这个时候我们就可以借助一些工具来生成“调用图”(Call Graph)。图中函数和模块的连线比较多,说明其被使用的很多,需要重点关注;图中函数和模块位于很多调用栈中,说明该函数是有关“脉络”的信息,也要重点关注。比如event_add被连接很多,说明被使用的地方很多,需要重点关注;

2024-02-01 20:46:50 666

原创 动态分析C语言代码生成函数调用关系的利器——perf

perf是一套linux操作系统上分析工具集,分析函数调用关系只是其一个子集功能。它并不像中介绍的需要在被分析程序的编译指令中插入新的选项(-pg),而是直接对原始编译结果进行分析。

2024-01-31 11:24:48 1053

原创 动态分析C语言代码生成函数调用关系的利器——gprof

gprof是一个C语言程序性能分析工具。在编译期间,我们给编译指令增加-pg选项,就可以将检测代码插入到源码中。然后使用gprof启动编译程序,它会收集程序运行的流程以及其他相关数据。最后我们使用gprof2dot将这些数据转换成dot文件,使用graphviz进行图形化展示。以中的libevent为例。

2024-01-30 19:17:12 1090

原创 一个通过下标查找数值的面试题解法

最近看到一道面试题,面试官说是算法题。我粗略看了下,努力在其中寻找数学公式,但是最后发现它算是一个数据结构相关的题目,没有算法层面的知识。这题大体意思是有序数组是由数组中的数字K,以及3K+1、2K+1构成,即这是一个迭代生成的问题。然后通过下标找到数组中的值。我们先看数组中相邻的两个数组(X, Y),假设Y = X+n。则通过X生成的数字是。

2024-01-30 19:16:42 323

原创 静态分析Golang语言生成函数调用关系的利器——go-callvis

不同于之前分析C语言项目的工具,go-callvis还是很方便使用。只要把两项工作做好就能顺利的使用。我的测试环境是Ubuntu 22 TLS版,默认的Golang是1.18。这会导致go-callvis安装失败。如果版本匹配,可以忽略下面Golang升级的步骤。安装新版本直接上1.21版本。配置环境变量在文件末尾另起新行填入以下内容载入环境修改当前环境修改之后进入的环境在文件末尾另起一行新增分析我们以gorush的源码为例。它是一套基于Gin实现的消息推送框架。安装go-cal

2024-01-28 16:37:39 1340 1

原创 使用软件工程理论给代码打分的利器——Analizo

Analizo是一款可以给C、C++、Java以及C#代码进行评分的开源软件。我们可以使用它来分析代码,并得到如下指标的评分这些评分是我们评价代码质量和可维护性的一种依据。比如Average Cyclomatic Complexity per Method (ACCM) metric,即平均圈复杂度。这是1976年由Thomas J. McCabe, Sr. 提出来的一种代码复杂度的衡量标准。它的算法也很简单,即其中e是边数量,n是节点数量。

2024-01-26 02:57:04 1244

LuaCmdTest

我用于测试的一个lua脚本,没啥用,不用下载。

2012-11-27

同步双工管道

http://blog.csdn.net/breaksoftware/article/details/7001672文中的工程

2011-11-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除