探索Prometheus的Go客户端指标

前言 让我们从一个简单的程序开始,注册prom处理程序并监听8080端口: 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import ( "log" "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) log.Fatal( http.ListenAndServe(":8080", nil)) } 当你点击

Go语言性能调优指南

为什么要做优化 这是一个速度决定一切的时代,我们的生活在不断地数字化,线下的流程依然在持续向线上转移,转移过程中,作为工程师,我们会碰到各种各

性能测试工具wrk介绍

性能测试 专有名词 1、吞吐量(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单

运行时同步原语源码剖析

前言 Go 的运行时能够直接接触到操作系统内核级的同步原语,note 和 mutex 分别是 Go 运行时实现的一次性通知机制和互斥锁机制, 其实现是操作系统特定的,这

Go中的系统调用

什么是操作系统 操作系统是资源的管理器,其管理的资源均进行了抽象 磁盘抽象:文件夹 内存抽象:虚拟内存 CPU 抽象:时间片 分级保护域-protectio

Go代码的编译与反编译

编译过程 词法分析(Lexical Analysis) 语法分析(Syntax Analysis) 可参考网站: https://astexplorer.net/ 语义分析(Semantic Analysis) 在抽象语法树 AST 上做类型检查 中间代码(SS

Go的IO库介绍

Go和IO Go 是一种高性能的编译性语言,天然支持高并发,语言级别封装协程,号称可以支持成千上万,十万,甚至百万的协程并发。这个量级远不是线程可

全链路灰度方案设计

流量染色 服务规模越来越大,增加速度越来越快,需求指数性增加,大家都需要一个环境。比如一个集群一千个容器,如果三个小组各开发一个项目,想并行开

全链路压测方案设计

前言 在阿里淘宝 双 11 的过程中,长期以来都是在生产环节做全链路压测的,通过实践我们发现在生产环境中做压测,实际上会和一个 IT 组织的结构、成熟度、流

Go参数传递是传值还是传引用

前言 对于了解一门语言来说,会关心我们在函数调用的时候,参数到底是传的值,还是引用? 其实对于传值和传引用,是一个比较古老的话题,做研发的都有这

HTTP协议的header的大小写问题

协议限制 文档 RFC7504 明确指出Header的定义: 1 2 3 4 5 6 7 8 9 10 11 12 8.1.2. HTTP Header Fields HTTP header fields carry information as a series of key-value pairs. For a listing of registered HTTP headers, see the "Message Header Field" registry maintained at <https://www.iana.org/assignments/ message-headers>. Just as in HTTP/1.x, header

zerolog源码剖析

什么是 zerolog zerolog 包提供了一个专门用于 JSON 输出的简单快速的 Logger。 zerolog 的 API 旨在为开发者提供出色的体验和令人惊叹的性能。其独特的链式 API 允许通过避免内

Go如何实现栈和队列

前言 虽然 golang 没有内置的 queue,但它还是提供了很多强大的数据结构,那有没有可以直接拿过来当 queue 来使的呢?有的,且至少有两个选项。强调一句,我们

Go的函数式编程

函数式编程 函数式编程是很多语言正在支持或已经支持的日渐流行的编程范式。Go 已经支持了其中一部分的特性,比如头等函数和更高阶功能的支持,使函数

Go协程池ants介绍

简介 处理大量并发是 Go 语言的一大优势。语言内置了方便的并发语法,可以非常方便的创建很多个轻量级的 goroutine 并发处理任务。相比于创建多个线程,gorou

基本数据结构map源码剖析

前言 本节会介绍 Go 语言的哈希的实现原理,哈希是除了数组之外,最常见的数据结构。几乎所有的语言都会有数组和哈希表两种集合元素,有的语言将数组实现