自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(361)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 10场景思考:OLAP系统在监控中的作用

随着企业IT系统复杂度提升,传统监控系统在海量数据分析、多维查询等方面面临瓶颈。OLAP(在线分析处理)技术凭借其高效的多维分析能力,正成为监控体系的重要补充。本文分析了OLAP在监控领域的核心优势:1)支持时间、服务等多维度灵活分析;2)通过列式存储和分布式计算实现秒级TB级查询;3)结合实时流处理与历史数据分析;4)通过压缩和分级存储降低长期数据成本。对比了ClickHouse、Druid等主流OLAP工具特性,并给出分层架构设计实践,为构建高性能、低成本的智能监控系统提供解决方案。(149字)

2025-11-16 13:34:15 36

原创 09数据处理:使用ClickHouse高效处理监控数据

本文探讨了ClickHouse在监控数据处理中的优势与应用。ClickHouse作为高性能列式数据库,特别适合处理大规模时序数据,其列式存储和高压缩率可显著提升查询效率并降低存储成本。文章分析了ClickHouse的核心特性,包括实时分析能力、水平扩展性和灵活SQL支持,并对比了其与Prometheus的适用场景差异。同时阐述了ClickHouse在监控系统架构中的角色,涵盖数据采集、存储优化和查询分析全流程,最后总结了ClickHouse在OLAP场景的性能优势及其局限性。整体上,ClickHouse是处

2025-11-09 12:40:04 67

原创 08数据展示:Grafana数据可视化工具

Grafana作为开源数据可视化工具的核心功能介绍,包括多数据源支持(如Prometheus、MySQL等)、动态仪表板配置和实时监控告警系统。文章详细介绍了Grafana的架构组成(数据源、仪表盘、可视化面板)、配置流程及常见应用场景(系统监控、业务分析等),并对比了Kibana、Tableau等同类工具的差异。通过操作演示展示了从数据源连接到仪表板创建的完整过程,帮助用户快速掌握这一强大的数据展示与分析工具。

2025-11-01 15:29:49 63

原创 从无状态到有状态,LLM的“记忆”进化之路

应用的状态性取决于是否保存交互上下文。有状态应用(如会话系统)会持久化记录用户信息,而无状态应用(如HTTP协议)每次请求独立处理。HTTP虽无状态,但通过Cookies、Session、JWT等机制可模拟状态,实现会话跟踪。以餐厅点餐为例,无状态服务独立处理每次请求,有状态则能记忆用户偏好。 LLM的状态性:基础模型(如GPT-4)本身无状态,但上层应用(如ChatGPT)通过上下文窗口管理将历史对话作为输入传递,实现多轮对话的连贯性。这种设计平衡了资源效率与用户体验,适用于个性化推荐、复杂任务等

2025-10-30 22:44:28 363

原创 07数据分析:使用 PromQL 进行查询与分析

PromQL是Prometheus监控系统的核心查询语言,专为分析时序数据设计。它具有多维数据模型、丰富查询操作和实时分析能力,适用于系统监控、性能分析、告警配置等场景。文章介绍了PromQL的基本语法(指标、标签、运算符)和常见查询示例,包括过滤、聚合、速率计算等操作。同时强调了使用中的注意事项,如数据类型匹配、查询性能优化等。掌握PromQL能有效提升监控数据分析效率,为系统运维和性能优化提供有力支持。

2025-10-25 17:46:07 92

原创 06数据采集:Prometheus的基本介绍、架构与组件

Prometheus是一款开源的系统监控和告警工具,具有时序数据库、强大的查询语言和多维度数据模型等特点。文章详细介绍了Prometheus的核心架构、工作流程及主要组件,包括Server、Exporter、Alertmanager等,并提供了基于Prometheus+node_exporter+Grafana的服务器监控实践指南。通过配置数据源和可视化工具,用户可以实现基础设施监控、应用性能分析等功能。该工具在云原生环境中应用广泛,是现代监控体系的重要组件。

2025-10-19 19:12:28 89

原创 05搞懂流程:数据采集、存储、可视化与告警的完整链路

本文介绍了现代化监控体系的核心架构,涵盖数据采集、存储、可视化与告警全流程。采集环节使用Prometheus、Telegraf等工具收集系统指标;存储模块采用InfluxDB等时序数据库处理海量数据;可视化层通过Grafana等工具呈现直观图表;告警机制则利用Alertmanager实现实时异常检测。

2025-10-06 18:48:25 58

原创 04三个概念:时间序列、采样、告警

监控系统核心概念解析 监控系统通过时间序列记录数据变化趋势,采用采样技术获取实时运行状态,并利用告警机制及时响应异常。时间序列是数据基础,以时序性、高频采集和大规模性为特点;采样策略需平衡频率与性能,涉及全量/抽样采集及聚合处理;告警体系包含触发条件、分级机制和通知方式,需优化规则减少噪音。三者协同构建高效监控系统,实现数据驱动的自动化运维。

2025-10-06 18:45:12 72

原创 03三大支柱:指标(Metrics)、日志(Logs)、追踪(Tracing)

本文介绍了现代服务监控系统的三大支柱:指标(Metrics)、日志(Logs)和追踪(Tracing)。指标提供系统性能的量化数据,适合实时监控和趋势分析;日志记录详细事件信息,便于故障排查;追踪则揭示分布式系统中的请求调用链。三者各具特点:指标实时性强但缺乏上下文,日志细节丰富但数据量大,追踪能分析跨服务问题但实现复杂。实际应用中需要协同使用这三大支柱:通过指标发现问题,借助日志定位原因,利用追踪分析全局依赖关系。合理的组合应用能构建覆盖全栈的监控方案,为系统稳定性和性能优化提供支持。

2025-10-06 18:42:23 323

原创 02系统入门:监控系统的目标与核心问题

本文探讨了现代监控系统的核心目标与构建挑战。监控系统的主要目标是保障服务稳定性、优化性能、监控资源、分析故障根因并提升用户体验。然而,实际构建中面临数据采集多样性、高吞吐量、存储成本、实时性、告警噪声、系统扩展性等核心问题。解决方案包括采用轻量级代理、分层存储、分布式处理框架、分级告警策略等。高效监控系统需明确目标范围、合理选型工具、优化数据生命周期管理,并加强团队协作。最终,监控系统应成为技术保障和业务优化的双重引擎,在性能与成本间取得平衡。

2025-10-06 18:39:08 49

原创 01回顾历史:监控系统的历史与演进

软件服务监控系统经历了从硬件故障检测到智能化全栈监控的演进历程。20世纪50年代以人工硬件监控为主,70年代操作系统引入日志和命令行工具。80年代网络化催生了SNMP协议和Nagios等集中式监控工具。21世纪初互联网时代,Zabbix、Graphite等工具应对高并发需求。2010年后,微服务和云原生推动了Prometheus、ELK等新一代监控工具的发展。当前趋势是智能化全栈监控,融合指标、日志、追踪三大数据源,并向可观测性演进,实现异常检测和趋势预测。监控系统始终是技术团队保障系统稳定的关键支撑。

2025-10-01 19:58:29 138

原创 00开篇词:为什么监控系统如此重要?

在分布式系统时代,服务监控是保障业务稳定性的关键基础设施。它通过实时追踪系统状态,实现故障预警、性能优化和资源管理,为复杂系统提供"可视化仪表盘"。监控体系需覆盖指标采集、存储分析、告警响应全流程,并借助Prometheus、Grafana等工具落地。本专栏将从基础理论、工具实践到进阶案例,系统讲解如何构建有效监控体系,帮助开发者掌握这一核心能力,提升系统可靠性与运维效率。监控不仅是技术工具,更是支撑业务持续发展的重要体系。

2025-10-01 19:53:32 208

原创 GitHub工程师:我所知道的优秀系统设计

我常看到许多糟糕的系统设计建议。一种经典例子是针对行业新人写的“你可能从没听说过消息队列的帖子”,还有像“如果你在数据库里存布尔值就是糟糕工程师”的那种推特式“聪明技巧”。即便是好的系统设计建议,有时也可能是误导性的。我很喜欢《Designing Data-Intensive Applications》这本书,但我认为它对大多数工程师将遇到的系统设计问题来说并不是特别有用。**什么是系统设计?**在我看来,如果“软件设计”是关于如何组织代码行,那么“系统设计”就是关于如何组织服务。

2025-09-07 21:33:30 691

原创 《Go小技巧&易错点100例》第三十八篇

内存分配 vs 初始化new仅分配内存并置零,不初始化复杂结构。make分配内存并完成类型特定的初始化(如切片底层数组、map 的哈希桶)。返回值类型new返回指针,需通过解引用。make返回类型本身,可直接使用。适用场景new用于简单值类型或需要指针的场景。make专门用于slicemapchannel的初始化。底层共享string和[]byte均基于字节,但string是只读的,[]byte是可变的。转换代价:两者转换会复制数据,需避免高频操作。编码处理string默认 UTF-8,

2025-09-07 21:32:43 873

原创 如何准备一场技术演讲

故事的转折点,就在我的大学时期,在大二之后的两三年时间里,因为我本身就是计算机专业,所以当时开始有方向的大量学习专业知识,在学校里也通过很多场合来有意识的锻炼自己的表达能力,直到现在我也会经常参加一些公司内外的交流分享活动。首先要说的是,我这里指的技术演讲也可以叫技术分享,往小了说,可以是公司会议室,这里大家围在一桌,主讲人针对某一内容进行分享;,但想了想以我目前的资历,可能还达不到教大家做好一个技术演讲的程度,因此就降低一下规格,从我切身的角度出发,跟大家分享一下,我平时是如何准备一场技术演讲的。

2025-08-13 23:03:08 2432

原创 《Go小技巧&易错点100例》第三十七篇

Go语言特性解析: 结构体字段序列化规则:只有大写字母开头的可导出字段才会被JSON处理,小写字段会被忽略,这是Go的刻意设计 字符串不可变性:字符串是只读的字节切片,修改需先转为[]byte,体现了Go对安全性的考量 代码块作用域:{}会创建新作用域,:=会声明新变量,而=会修改外层变量,需注意两者的区别 (98字)

2025-08-10 21:29:40 565

原创 又开发了一个优雅的小工具!

issue2file是一个Go语言开发的命令行工具,可将GitHub仓库Issues导出为本地Markdown文件。主要功能包括:完整保留Issue内容、评论下载、AI智能分析和数据可视化。项目采用模块化设计,包含配置管理、GitHub API交互、Markdown转换、AI集成和图表生成等核心组件。通过Viper处理配置,go-github获取数据,并支持将Issue转换为结构化Markdown。额外功能包括利用AI分析Issue内容,以及生成创建时间趋势、状态分析等可视化图表,帮助开发者更好地管理和分析

2025-08-02 20:27:36 511

原创 Ping命令这种事情用Go也能优雅实现

并发编程:goroutine和channel提供了简洁而强大的并发模型网络编程:标准库提供了丰富的网络编程支持错误处理:Go的错误处理机制简单而有效系统交互:Go可以方便地与操作系统交互这个实现展示了如何将这些特性结合起来,构建一个既实用又优雅的工具。无论是学习Go语言还是网络编程,这都是一个很好的参考案例。完整代码:​。

2025-07-15 19:39:21 483

原创 《Go小技巧&易错点100例》第三十六篇

通过合理使用 gops,开发者可以在不修改代码的前提下,有效提升 Go 服务的可观测性和运维效率。[https://github.com/google/gops] 工具为开发者提供了一套轻量级的诊断解决方案,无需侵入代码即可快速获取运行时的关键指标。包(Go 1.16+)将二进制文件或资源直接嵌入到编译产物中,使这些文件成为可执行文件的一部分。在 Go 语言开发中,进程诊断和性能分析是保障服务稳定性的关键环节。在Go语言中,交换两个变量的值可以通过简洁的。在Go语言中,可以通过标准库的。

2025-06-22 12:08:22 1109

原创 用通俗的话解释下MCP是个啥?

MCP的核心设计理念是创建一个开放、统一的协议标准,使不同厂商的大型语言模型(如GPT系列、Claude、Llama等)能够以一致的方式连接到多样化的数据源和工具生态系统。从技术架构看,MCP采用了客户端-服务器模型MCP主机:需要访问数据的应用程序(如Claude桌面版、IDE或AI工具)MCP客户端:管理与服务器的1:1连接,处理通信细节MCP服务器:轻量级程序,通过标准化协议暴露特定功能,连接本地数据源或远程服务。

2025-06-08 20:59:00 1177

原创 《Go小技巧&易错点100例》第三十五篇

在Go语言开发中,我们经常会遇到结构体之间需要相互引用的情况。Go语言中的循环依赖问题看似简单,但可能导致严重的运行时错误。独立的执行栈:每个goroutine都有自己的调用栈,panic和recover机制是基于当前goroutine的调用栈的。设计哲学:Go的设计是让每个goroutine自己处理自己的错误,而不是由父goroutine来管理。但是在Go语言中直接进行结构体的相互引用会默认不符合语法,因此我们就使用接口进行引用。:NewA调用NewB,NewB又调用NewA,从而形成无限循环调用链。

2025-06-08 20:57:13 545

原创 《Go小技巧&易错点100例》第三十四篇

存储在堆中,如果goroutine的执行在for循环结束,那么i的值就是5,此时输出则会是。:将当前循环变量i的值拷贝到新goroutine的栈帧。,当然如果goroutine执行快,那输出就可能是。:创建新的G结构体(包含栈指针、PC等):可能触发当前M让出P,执行其他G。:将G加入全局运行队列或本地队列。我们来分析下代码,每个。而这段代码的临时变量。

2025-05-28 12:31:05 301

原创 CodeBuddy优雅入场!没有最强只有更强!

TerminalAI是一款专为开发者打造的轻量级终端AI对话工具,支持在Linux/macOS终端环境中通过自然语言进行高效交互。它基于Go语言开发,深度融合命令行场景,提供流式响应输出(逐字打印效果)、多轮对话上下文记忆代码片段自动高亮以及系统命令智能推荐。用户可直接输入t "如何监控服务器日志"快速获取解决方案,并支持切换OpenAI云端模型或本地Llama3等开源模型。

2025-05-14 22:59:16 2124

原创 《Go小技巧&易错点100例》第三十三篇

本文介绍了Go语言中的几个关键编程技巧和注意事项。首先,通过validator库扩展自定义校验规则,示例展示了如何验证用户年龄是否成年。其次,使用sync.Pool优化对象复用,特别是在频繁创建和销毁对象的场景中,如JSON编码。接着,讨论了sync.WaitGroup的正确使用方法,强调了在goroutine外部调用Add()以避免竞态条件。最后,探讨了nil的语义陷阱,指出不同类型的nil在比较时的差异,并提供了安全实践建议,如使用类型断言和反射进行深度检查。这些技巧有助于提升代码的健壮性和性能。

2025-05-11 22:35:27 501

原创 《Go小技巧&易错点100例》第三十二篇

本期分享主要介绍了sync.Map的原理与使用方式,以及如何在Go语言中实现有序的Map。 1. sync.Map的原理与使用方式 sync.Map通过读写分离和无锁读设计实现高并发安全,适用于读多写少、动态键空间的场景。其底层采用双存储结构(read和dirty),读优先访问无锁的read,未命中时访问加锁的dirty,并通过动态升级和延迟删除机制优化性能。测试表明,sync.Map在读多写少场景下性能显著优于传统的map+sync.RWMutex。 2. 实现有序的Map 在Go语言中,标准库的map是

2025-05-11 22:34:54 775

原创 《Go小技巧&易错点100例》第三十一篇

本期分享主要探讨了Go语言中的两个内存优化技巧:struct内存对齐和使用空结构体节省内存。首先,内存对齐通过调整结构体字段的顺序,减少填充字节,提升内存访问效率。通过实例展示了未对齐与对齐后的结构体内存占用差异,并总结了内存对齐的规则。其次,空结构体struct{}作为零内存类型,在实现集合、通道信号传递、方法接收器、占位通道、接口实现标记和JSON空对象等场景中,能够有效节省内存。文章还指出空结构体作为字段时可能产生对齐填充,并解释了不同空结构体实例的地址相同现象。这些技巧有助于编写更高效的Go代码。

2025-05-11 22:33:59 601

原创 Go小技巧&易错点100例(三十)

获取Go语言的注释主要用于自动化生成文档(如通过godoc生成API文档)、存储代码元数据(如Swagger规范的路由信息)、指导代码生成工具(如go generate指令)、辅助静态分析(如lint规则例外标记)以及标识测试示例,从而提升代码可读性、维护性及开发效率,实现文档与代码的同步更新。切片共享底层数组的特性,修改一个切片的元素可能会影响其他切片或原数组,具体取决于修改的位置是否在共享范围内。上面我们说明了一个结论就是,Go语言中的切片是底层数组的视图,修改切片时,直接修改了底层数组,导致。

2025-05-05 11:54:42 665

原创 Go小技巧&易错点100例(二十九)

随着 Go 语言的不断迭代,新版本带来了许多实用的标准库函数,使得代码更加简洁、可读性更强。本篇文章主要介绍 Go 1.21+ 版本中的一些新特性,涵盖等常见场景,展示如何利用新特性优化代码。

2025-05-05 11:53:33 667

原创 搞懂Go泛型,看这一篇就够了

泛型是一种编程语言特性,**允许在编写代码时不指定具体的数据类型,而是在使用时再确定具体类型。**原理层面,**Go语言的泛型主要基于类型参数化和类型推断,在编译时为不同类型参数组合生成具体实现,以实现通用且类型安全的代码。**通过泛型,可以编写更加通用和可重用的代码,避免重复代码的出现,提高代码的可维护性和灵活性。在Go 1.18版本中,泛型被正式引入,极大地增强了Go语言的表达能力。// 函数体这里的[T any]表示函数有一个类型参数T,并且T可以是任意类型。any是一个预定义的接口类型,等价于。

2025-05-03 16:36:16 1091

原创 Go小技巧&易错点100例(二十八)

for循环select{}

2025-05-03 16:35:36 967

原创 Go小技巧&易错点100例(二十七)

Scan。

2025-05-03 16:34:48 1241

原创 Go市场份额达3%!4月编程语言排行出炉~

2025年,Go的模块化依赖管理(Go Modules)和泛型特性的进一步优化,进一步吸引了Java、Python开发者迁移。TIOBE的排名基于搜索引擎的编程语言热度计算,虽然不能完全等同于实际使用量,但它反映了开发者对Go语言的关注度与技术选型倾向。Python在AI领域的统治地位难以撼动,但Go可通过高性能计算库(如Gonum)和与AI框架(如TensorFlow Serving)的深度集成,开拓新场景。此次TIOBE排名的突破,不仅是Go语言的里程碑,更是对“务实工程文化”的肯定。

2025-04-22 23:23:34 1852

原创 快来看!你的Go代码还能更优雅

它提供了一系列具体建议,涵盖命名规范(如变量名简洁性)、错误处理方式(直接返回而非包装日志)、接口设计原则(避免过度抽象)、并发模式(如 channel 使用陷阱)、性能优化点(减少内存分配)等场景,旨在帮助开发者遵循 Go 社区约定俗成的代码风格和设计哲学,确保代码符合 Go 语言"简单、明确、高效"的核心思想,提升项目的可维护性和一致性。良好的风格让代码自带说明书——清晰的错误处理让人一眼看出潜在风险,简洁的接口设计让扩展功能更轻松,规范的并发控制能避免隐蔽的运行时陷阱。一般len方法用于切片上。

2025-04-22 23:21:39 258

原创 Go小技巧&易错点100例(二十六)

在Go中,将字符串转换为字节数组会触发内存拷贝,这会影响性能和内存使用。在大多数情况下,这种开销是可以接受的,但在性能敏感的应用中,需要仔细考虑这种转换的代价。

2025-04-12 20:06:35 725

原创 Go小技巧&易错点100例(二十五)

通过自定义中间件,可以实现日志记录、认证、限流等功能,提高代码的模块化和可维护性。空切片在追加元素时,如果容量足够,可以直接在现有底层数组上进行操作,否则会分配一个新的底层数组。切片和空切片是两个不同的概念,但它们有一些共同点和不同点。空切片有一个底层数组,但其长度和容量都为0,指针部分指向一个有效的零长度数组。:有底层数组(但长度为0),指针指向一个有效的零长度数组,长度和容量都为0。切片和空切片的长度都是0。切片没有底层数组,其指针部分(即数组的指针)为。:没有底层数组,指针为。,长度和容量都为0。

2025-04-12 20:05:50 649 2

原创 这是一份简单优雅的Prompt Engineering教程

通过系统化的提示工程,可使大语言模型输出质量提升40%以上(OpenAI研究数据)。关键在于将模糊需求转化为机器可解析的结构化指令,这本质上是在训练用户的「第二语言能力」。

2025-04-06 21:44:17 1600

原创 一文带你搞懂AI大模型技术版图

别被“人工智能”四个字吓到,其实它就像学做菜:掌握几样核心原料(数据),了解常用厨具(算法),再练几道招牌菜(应用场景),你也能用AI做出让人惊叹的“数字料理”。基础层的内容可能大多数人都不太需要关注到,可以仅作为了解,比如理解GPU/TPU的并行计算原理(如CUDA核心、张量加速),了解cuDNN、OneDNN等加速库的使用场景和DeepSpeed、Megatron的分布式策略(数据并行、模型并行)等等。编译器是静态代码到机器码的“翻译器”,而AI框架是动态模型到硬件指令的“映射器”。

2025-04-06 21:43:35 1020

原创 Go小技巧&易错点100例(二十四)

和类型断言/类型开关可以提供一定的灵活性,但也会牺牲一些类型安全性。因此,在可能的情况下,最好使用具体的类型来避免不必要的类型检查和转换。:频繁的类型断言和类型开关可能会对性能产生影响,特别是在大型代码库中。因此,在设计接口和类型时,应该考虑如何减少不必要的类型检查。类型的值时,通常需要进行类型断言(type assertion)或类型开关(type switch)来校验其实际类型。:如果以上步骤都不能解决问题,可能是模块本身的问题,可以联系模块的维护者。类型的值是否满足特定的类型,并获取该类型的值。

2025-03-06 22:49:12 824

原创 Go程序最多可以多少个协程?

Go语言的协程模型为高并发应用提供了强大的支持,使得开发者能够轻松地管理数十万甚至数百万个并发任务。然而,协程数量并非越多越好,合理的协程管理和优化策略是确保系统高效运行的关键。通过理解影响协程数量的因素,应用最佳实践和优化方法,开发者可以构建出既高效又稳定的Go程序,满足现代企业对高并发和高可用性的需求。关于协程的数量与CPU核数,这两者间确实存在一定的关系,但这种关系并不是绝对的。在实际应用中,需要根据应用类型、系统资源限制以及性能监控数据等多个因素来动态调整协程数量与CPU核数的比例。

2025-03-06 22:48:22 1030

原创 ETL和ELT还傻傻的分不清?

ETL代表提取(Extract)、转换(Transform)和加载(Load)。这是传统的数据集成方法,广泛应用于数据仓库建设和业务智能(BI)应用中。ELT代表提取(Extract)、加载(Load)、转换(Transform)。随着大数据技术的发展,ELT 逐渐成为现代数据集成的另一种重要方法。ETL 和 ELT 作为两种主要的数据集成方法,各有优劣。我们在选择时,应综合考虑数据规模、处理复杂度、现有基础设施以及业务需求。随着技术的发展,ELT 越来越受到青睐,尤其是在大数据和云计算时代。

2025-03-06 22:46:54 978

springboot-dubbo-master.zip

springboot-dubbo-master.zip

2021-08-27

sp_mybatis.zip

sp_mybatis.zip

2021-08-27

sp_vue.zip前端项目

sp_vue.zip前端项目

2021-08-27

MavenSSM.zip

IDEA使用Maven整合SSM框架,spring5和mysq5.5l数据库,其中包括配置文件和web.xml的编写

2020-07-16

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

TA关注的人

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