自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 go clean -modcache 把$GOPATH/pkg/mod 目录文件清空了如何恢复

scm编辑代码不通过(其实是因为go镜像低于本地go版本导致),oncall 同学抛过来一条命令go clean -modcache && go mod tidy,我对go clean -modcache 是不太清楚真正含义的,以为就是清空下项目的依赖包而已(后来才知道oncall同学也没有对其正确认知),于是就很信任的复制粘贴,按下回车键,然后瞬间慌了,同时Goland打开的三个项目窗口都闪了一下然后代码都不见了,很慌,因为还有未提交的代码,啥都不说了,开始找恢复的方法吧。

2023-03-07 20:39:39 1489

原创 GO 通过映射解析字段信息

识别结构体中被设置值的字段,更改结构体中字段的值

2022-07-23 10:10:00 267 1

原创 Gorm 优雅写SQL

多条件筛选的功能还是很常见的,每种筛选条件都可选可不选,这样就有n(n-1)/2种自由组合的方式,如果每种条件是最小单元,就像搭积木一样把他们任意组合,那么代码就会变得更灵活可复用。...

2022-07-23 09:34:10 755

原创 kafka请求线程idle低问题分析

线上kafka 线程idle报警,线程idle趋势图查看topic监控平台,发现__consumer_offsets topic的每秒写入高出其他topic很多倍,大概率是因为消费者提交频繁导致的了,但是这是全局的topic,无法看到每个消费者的提交频率,所以只能根据topic的流量走势来找出和该topic相匹配的,进而只观察相关topic的消费者1、查看趋势相匹配的topic按照流量由大到小筛查每个topic,发现两个topic的流量趋势和__consumer_offset一样2、走查消费这

2022-01-20 11:34:40 1773

原创 Golang 实现定时任务

前言日常运维中难免会遇到主从切换的场景,比如机房迁移、故障机替换等待,为了平滑迁移需要先将待下线主机上的主全部切走,主从切换动作有损所以需要低峰期操作,一般都是凌晨以后,如果联动业务核心指标做好前后校验,其实是可以将该动作自动化的,如果自动化就涉及到定时执行,这里记录下在平台上通过go语言实现定时任务的简单思路通过go语言实现定时任务有两种方法,一种是采用主机自带的crontab机制,go语言有对应的包实现,另一种是采用计时器的方式,如果采用前者,前端需要将通过时间选择器获取的时间转化为定时任务的时

2022-01-14 13:40:05 5163

原创 kafka某broker网络线程idle过低问题追踪

问题描述第一次出现是在操作完A号broker的重启后,13号broker的网络线程idle走低一直到14号发起了一次重均衡(触发leader选举)之后13号(对应下图灰色实例)的broker网络线程idle恢复,转而1号broker(对应下图黄色实例)的网络线程idle开始走低分析过程各个broker间的流量没有差异,和network idle match的是broker进程cpu usage,接着看cpu上线文切换也match再看网络连接虽然有差异,但是蓝色的broker比黄色的broke

2021-12-16 10:28:34 2648

原创 GO 遇到循环调用怎么办

当项目越来越大,难免会遇到两个包相互调用的问题,先不提通过重构文件目录组织结构来避免这种情况,如果项目架构上大方向没有问题,尤其是项目排期紧张时,这时候我们就可以采用一种优雅的方式来绕过循环调用比如pkgA包中定义了方法fa1,其中pkgA中的fa1中调用pkgB包中的fb2,import object/pkgBfunc fa1(){ pkgB.fb2() //调用pkgB包中的fb2方法}pkgB包中定义方法fb1,fb2,而pkgB包中的fb1调用pkgA包中的fa1import ob

2021-11-27 15:20:22 609

原创 指针&引用踩坑记录

案例1 如下代码在循环体外定义了变量instance,循环一列表中的元素,每次遍历构造instance结构体实例,然后追加到列表proxyInstances中,所以猜测一下最终proxyInstances列表中的元素会符合我们的预期吗?是的,最后你会发现proxyInstances的元素都是遍历结束后的最后构造的一个元素,原因是因为在外面定义instance时初始化了一片内存用来存储数据,进入遍历后每次构造instance数据时只是更改内存中的数据,内存地址还是那个地址,所以当你将instance的指针

2021-11-12 15:45:02 197

原创 go regex 使用case

问题背景对redis执行命令“info memroy”后返回的结果进行了处理转化成了字符串,然后通过regex匹配目标项,就出现了诡异的现象,暂时没有对regex的内部做深入研究,欢迎理解原因的大佬不吝赐教对redis执行info memroy并处理后的结果集存入变量replySlice中,为string类型func TestSendRedisExecMsgToServer(t *testing.T) { var syncMsg *pb.ManagerTaskMsg syncMsg = &am

2021-11-11 20:19:09 1178

原创 Golang操作MySQL

操作mysql常用的库有github.com/astaxie/beego/orm和database/sqlorm库支持映射数据结构到表结构,标准化增删改查操作,多用于单表的操作;同时支持原生sql,多用于复杂的多表查询操作,sql库也多用于此场景,有点是灵活,但缺少标准化;记录一下项目开发中用到原生sql的案例1、查询操作返回多行,并处理返回数据,构建结果集列表orm 包操作方式QueryHostInfo() (HostListInfoMap, error) {sql := fmt.Sprint

2021-11-03 19:06:54 193

原创 Vscode 调试 GOLANG

配置文件launch.json 举例注: 本地和远程调试均适用{ "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "go", "request": "launch", "mode": "debug", "program":"${workspaceFolder}/cmd

2021-07-01 20:39:39 228

原创 堆栈和队列

标题堆栈栈:是只允许在表的一端操作的线性表采用顺序存储结构的堆栈称为顺序堆栈,可以利用一个有M个元素的数组STACK[0,…M-1]来表示;定义一个整型变量top作为堆栈的栈顶指针,他指出某一时刻堆栈栈顶元素的位置,当堆栈不为空是,top为数组某一元素的下标值,当堆栈为空时,top=-1;顺序堆栈的基本算法一、入栈在容量为M的堆栈中插入一个新的元素item,top指向栈顶;首先判断栈是否已满,若不满将top向前移动一位二、退栈从堆栈中退出当前栈顶元素,并保存在变量item中,同时修改栈顶指

2021-06-11 19:06:24 162

原创 Vscode 远程开发Go语言项目

本地环境:MacOS1、Vscode 安装 Remote Development 插件2、本地主机和远端的主机配置免密登录将本地.ssh/id_rsa.pub文件中的内容追加到远端主机的.ssh/authorized_keys文件中(假如远端的账户为test,本地账户无限制)3、配置远端主机的连接配置内容如Host * ForwardAgent yes ServerAliveInterval 3 ServerAliveCountMax 20 TCPKeepAl

2021-05-07 11:04:51 520

原创 macOs 下部署编译kafka exporter项目遇到的问题总结

背景线上kafka集群的topic监控采用的是开源的kafka exporter项目来完成的,近期某个kafka集群由于某个topic写入和消费量很大导致集群中的某两个集群io负载打满,kafka exporter 采集信息也因此超时失败,如果指定某个topic采集则不会出现问题,所以猜测是因为一次批量获取所有的topic元数据信息时,遇到这种极端现象就会比较慢,打算查看下采集的实现逻辑来看下是否有优化的空间kafka exporter项目地址部署时发现依赖go 1.16及以上版本,而本地的环境是

2021-04-23 19:51:17 694

原创 redis单线程!为什么还这么快?

先来简单看一下一个应用启动后在操作系统中是如何运行的:程序启动后其一系列的指令和数据被加载到内存中,程序可以实现为单线程也可以是多线程或者多进程,只不过进程间的内存空间是独享的,而线程间是共享的,除了一些栈和指令独享外(这里以线程为例);内核调度器负责将线程分配给cpu,如果是多线程且数量大于cpu核数,则多个线程可能会被同时被分配到一同一个cpu核上,cpu通过总线访问内存中线程的指令和数据,将内存中的数据页拷贝到自己的缓存中,待执行的指令放到寄存器中,算数逻辑单元负责计算逻辑,指令中存放当前线程正

2021-04-18 17:07:58 157

原创 python setattr

使用setattr的背景外部需要引用的方法functionA 传入的参数对象是argparse.parse_args()解析后的参数对象,该对象类型是其自定义的Namspace对象,是class 对象类型,所以如果想单独调用functionA就需要通过setattr构造参数对象argparse中Namespace的对象的定义class Namespace(): """Simple object for storing attributes. Implements equality

2021-04-07 16:59:02 326 1

原创 引用grafana中的图标

准备将grafna的图片嵌套到html静态页中,然后当成定时任务推送,参考已有的方法成功参考文档

2021-04-01 20:29:37 288

原创 Python 时间操作

时间运算1、获取当前和3分钟前的格林威治时间import timenow=time.gmtime()timestamp = time.mktime(now)old=time.localtime(timestamp-180)start_time=time.strftime('%Y-%m-%dT%H:%M:%SZ',old)end_time=time.strftime('%Y-%m-%dT%H:%M:%SZ',now)print(start_time,end_time)# 输出结果'202

2021-02-24 19:08:18 676

原创 python并发执行远程命令线程不退出问题

通过multiprocessing 模块的Pool.map实现并发,创建多个工作线程,工作线程调用登录远端执行命令的函数(通过subprocess.Popen实现),但是当代码逻辑执行完成后,线程不释放,主进程就一直等待不退出代码demo# 远端执行命令的函数def remote_shell_opt(ip, cmd): # Ports are handled in ~/.ssh/config since we use OpenSSH ssh = subprocess.Popen([.

2021-02-19 10:52:51 474 1

原创 python3 sub-command function of parser-args

实现命令行的子命令集,且命令子集绑定动作,费了一些时间,所以记录下来希望能帮助到有需要的人参考官方文档实现实现demodef parse_bigkey_parallel(args): ana = Analyze(args) with Pool(parallels) as p: # p.map(self.test, self.slaves) p.map(ana.do_parse_bigkey, ana.slaves)def filter_keys.

2021-02-08 10:34:56 179

原创 MySQL load data from file

需求背景:将redis rdb解析的结果集文件快速录入的mysql表结构CREATE TABLE `redis_analyze` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `db_index` int(11) DEFAULT NULL COMMENT 'redis db 下标', `key_name` varchar(255) DEFAULT NULL COMMENT 'key name', `data_typ.

2021-01-23 20:58:40 389 1

原创 Go loop

嵌套loop,子loop达到某个条件后退出所有的looppackage mainimport "fmt"func main() {OuterLoop: for i := 0; i < 10; i++ { for j := 0; j < 5; j++ { fmt.Println(i + j) if i+j == 5 { break OuterLoop } } }}如果子循环中的i+j=5条件满足则退出外部循环,输出0123412

2021-01-22 15:36:59 1240

原创 go 函数参数不限定个数和类型的使用

当遇到不限参数个数和类型的函数时,比如redis的Do方法,为了方便调用我们一般会封装一个同一的入口,参数均为命令串,然后再将命令串参数解析成Do函数的参数类型进行调用,这里简单记录一下这类参数的处理过程调用的函数定义如下,从第二个参数起可以传任意多个不限类型的参数,params类型为[]interface{}Do(commandName string, params ...interface{}) (reply interface{}, err error)封装成统一的命令执行入口,这里有关参.

2020-12-21 16:57:11 1341

原创 go interface

开发项目时为了易于扩展和复用代码使用到了接口,对接口的几点思考做一下简单总结接口和方法接口中可以定义一些方法,当某个对象具备其中的某个或某些方法时,则就说这个对象实现了此接口,如http_server.gopackage mainimport ( "fmt" "net/http")type Counter struct { n int}func (ctr *Counter) ServeHTTP(w http.ResponseWriter, req *http.Request.

2020-12-20 15:18:06 70 1

原创 go text/template

我这里主要记录项目开发中有关text/template中不容易在官方文档中找的使用方法,官方文档中的examples中可以直接找到的不再赘述将渲染后的文本输出到变量template的execute方法第一个参数类型时io.Writer,只要是实现此方法的类型都可以,比如os.Stdout、*os.File、*bytes.bufferpackage mainimport ( "bytes" "fmt" "text/template")type User struct { Name .

2020-12-14 22:52:51 569

原创 Redis 查看value大小

线上会经常遇到大key问题,这时候就需要通过–bigkeys来找出最大的key,但是往往和最大的key前缀相同的一类key都会比较大,所以打算一次性获取此类key中比较大的key,官方文档中查看获取value大小的时间成本较高,于是查看有关bigkeys分析这块的redis源码来获取查询命令代码文件:redis-cli.c入库函数:findBigKeys 中的主要逻辑定义了不同数据类型对应的value大小单位char *typename[] = {"string","list","set",.

2020-12-08 10:56:41 2089

原创 kafka集群某个broker网络连接常态较高原因分析

线上遇到某个kafka集群中的某个broker的network线程的Idle远远低于其他的broker,以下是分析思路和过程网络连接监控视图查看tcp连接统计$ netstat -t -n |grep -oP '\w+\s*$'|sort |uniq -c 2620 ESTABLISHED 1 State 219 TIME_WAIT $ ss -sTotal: 5066 (kernel 0)TCP: 4773 (estab 2781, closed 1.

2020-12-07 18:30:02 562

原创 go实现Grpc 传输泛类型的消息体

背景最近在做的项目准备通过grpc进行通信,server端返回的数据类型是不固定的(通过go语言访问redis 中执行redis命令返回的数据类型是interface{}),所以我的诉求是client层可以通过grpc接收到这种泛类型。不将解析结果集的逻辑放在server层主要是考虑了两个方面执行redis命令返回的数据类型包括多种,其中包括嵌套数组,相应的protoc文件中消息结构体定义会变得比较复杂server层作为agent,如果将过多的逻辑放到这一层,后期的迭代更新成本会较大有两种

2020-11-15 16:20:12 3481

原创 Grpc实践

实践参考文档官方grpc小例子分析目录结构helloword.protoclient、server交互的接口定义文件,protoc命令会解析此文件生成对应的接口文件syntax = "proto3";option go_package = "google.golang.org/grpc/examples/helloworld/helloworld";option java_multiple_files = true;option java_package = "io.grpc.examp

2020-11-13 15:50:54 877

原创 通过go 语言访问redis

主要记录的功能点配置解析连接redis单侧配置模块定义配置结构体package configtype Configuration struct { // +++++++++++++++日志相关+++++++++++++++++ // 日志级别,这里使用了 beego 的 log 包 Log *LogConfigure `yaml:"log"` // 服务端消息chan长度 ServerMsgChanBufferLength int `yaml:"server-msgcha

2020-11-12 14:40:00 307

原创 beego 结构体构造及json转化

已有的beego项目实现一个查询接口,顺便记录一下常用的技术点package controllersApiimport ( "encoding/json" "fmt" "myproject/common" "myproject/models" "reflect" "github.com/astaxie/beego")// 获...

2020-10-20 20:47:00 781

原创 gdb 分析core文件 小记

测试环境twemproxy进程突然出core退出,记录一下gdb分析过程解析 coredump文件bt -- 打印crash时的堆栈# gdb /root/proxy/bin/twemproxy /tmp/cordump.file(gdb) bt#0 0x00007f9f3b0d4337 in ssignal () from /lib64/libc.so.6#1 0x...

2020-09-10 17:23:00 257

原创 centos 7 通过supervisor托管服务

1、安装supervisoryum install -y supervisor2、安装完之后默认加载其他配置文件的目录为# tail /etc/supervisord.conf;priority=999 ; the relative start priority (default 999); The [include] section ...

2020-08-26 19:40:00 62

原创 Vscode 配置远程编辑

官方文档1、安装插件2、目标主机配置ssh主机一般都存在sshd服务(通过openssh安装包安装)配置/etc/ssh/sshd_config 的Port然后启动服务3、vscode配置连接两种方式:第一种、点击+号按提示输入命令后会自动生成配置第二种点击+旁边的设置按钮在配置文件中追加然后就可以看到名称了,点击连接即可4、配置vscode我...

2020-08-19 20:48:00 181

原创 go http get 请求实现

主要记录的功能点设置Header解析返回的消息体,获取需要的那部分服务侧的返回消息体{ "success": true, "message": "OK", "data": { "name": "xxx", "hostName": "xxxxx",     "status": 0, "statusTi...

2020-08-06 17:13:00 495

原创 beego 实现接口认证

我这里实现的是一个简单的认证方式:使用的固定token本次主要想记录的技术点是获取用户的请求参数和请求头并在路由转发前先做权限校验通过结构体构建嵌套json服务端首先在路由的初始化函数中定义权限认证函数对接口url路由转发前进行权限认证从请求头中获取用户名并注册到ctx中,后端可以通过ctx获取已注册的变量router.gopackage routers...

2020-07-30 21:31:00 825

原创 main flag redefined: graceful

beego项目新增一个api的校验功能结果运行导致panic/var/folders/3p/jc3w8_dn5dd0r5_5ccp3nrqm0000gn/T/go-build935260114/b001/exe/main flag redefined: gracefulpanic: /var/folders/3p/jc3w8_dn5dd0r5_5ccp3nrqm0000gn/T/g...

2020-07-29 19:06:00 1280

原创 js中表单验证中的任务执行顺序初探

在写线上运维平台中的表单处理逻辑时,遇到困扰的地方//验证表单 checkForm(){ return new Promise((resolve, reject) => { var checkResult=true this.$refs['businessInfo'].val...

2020-07-28 19:50:00 170

原创 kafka topic监控采集

使用开源的项目直接通过编译好的二进制文件部署kafka_exporter二进制文件下载地址下载kafka_exporter-1.2.0.linux-amd64.tar.gz1、启动kafka_exporterbrokers=$1export_port=$2 #从8308开始for broker in `echo "${brokers}"|sed 's/,/\n/g'`;...

2020-07-23 11:00:00 501

原创 通过引用组件实现左菜单栏

前端样式使用了iview的布局组件控制左菜单栏的前端主父组件代码<template> <div id="Home"> <Layout :style="{minHeight: '100vh'}" > <Sider collapsible :collapsed-width="78" v-mod...

2020-07-15 10:20:00 73

空空如也

空空如也

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

TA关注的人

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