Home

etcd使用技巧

背景 etcd在单独使用过程中,可能需要配合一些技巧食用 奇技淫巧 版本选择 如果自己涉及到etcd相关代码开发,最好是选择3.5版本以上。个人目前选择3.5.4。 为什么呢?原因是此前etcd的module做过迁移(从github.com/coreos/etcd迁移到go.etcd.io/etcd),导致了一系列的go module引用混乱的问题。。可以参考一下这个博客: https://colobu.com/2020/04/09/accidents-of-etcd-and-go-module/,里面对于这个问题还有相关的github issue描述地比较详细。 本地替换 如果自己出于某些原因,想本地替换etcd的package来做部分测试,那么你可能需要同时替换多个pack...

Read more

golang服务记录版本信息

背景 在多版本部署的情景下,我们可能需要一个快捷的方式来获取部署的服务的版本信息。这个信息可以用于快速定位问题,减少debug成本等等,还是比较重要的。 实现 记录版本号等信息 实现: 在代码中声明版本号等变量: package version var ( Version string Tag string // ... ) 在编译时添加-ldflags参数,将版本号等信息通过命令行编译进去,程序运行时即可获取到对应值: go build -ldflags "-X github.com/sasakiyori/xxxrepo/version.Version=1.0.0 -X github.com/sasakiyori/xxxrepo/ve...

Read more

golang对fork仓库的使用

背景 总会有一些golang package在实际场景下不满足需求,且改动点有可能是针对自身业务场景特定的,无法通过在github提issue或者pr的方式解决问题。 这个时候可能就需要fork对应的仓库,并进行独立维护。(当然要注意对应repo的license是否允许你去这样做) 维护 fork仓库 这边按已有的sasakiyori/pgx为例,fork自jackc/pgx。 可以设置脚本定时拉取最新代码,例如github可以设置action 开发 在fork的仓库中,按分支开发。 go的模块管理依赖于git tag,因此分支开发时,要先确定自己要基于什么版本开发,可从go.mod中查看。 例如,pgx基于v4.16.1版本进行额外开发: git fetc...

Read more

k8s部署日志收集组件loki

LOKI使用测试 环境准备 本地为mac,采用kind搭建k8s集群,配置文件为: # kind-cfg.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 5601 hostPort: 5601 listenAddress: "0.0.0.0" protocol: tcp - role: worker - role: worker 启动集群: # 创建k8s集群 kind create cluster --name=localk8s --config=kind-cf...

Read more

Stress Testing Tool - Jmeter

简介 Jmeter, 由apache开源的一个非常成熟的压测工具 安装 在mac上,直接用homebrew安装即可: brew install jmeter 安装完成后,运行jmeter命令即可启动jmeter可视化操作界面。使用jmeter -t your_script.jmx可以指定脚本。 如果不想启动命令行,想直接执行脚本,并且输出结果,可以使用jmeter -n -t your_script.jmx -l result.jtl -e -o result 使用 Test Plan 一个新建的jmeter脚本文件,最外层为test plan,可以添加如下组件: Threads: 添加测试用的线程组 Config Element: 添加一些整体配置,如http请求头...

Read more

Golang Testing

单元测试覆盖率 测试覆盖率 go test -cover 结果类似于: PASS coverage: 90% of statements ok github.com/sasakiyori/test 1.025s 区分unit test和integration test的覆盖率 参考: https://mickey.dev/posts/go-build-tags-testing/ unit test文件添加build tag // +build !integration integration test文件添加build tag // +build integration 分别获取覆盖率: # unit test go test -cove...

Read more

Casbin

简介 一个支持多语言的权限管理、访问控制库。支持多种控制模型: RBAC(Role Based Access Control) ACL(Access Control List) ABAC(Attribute Based Access Control) … Tutorial: https://casbin.org/docs/en/overview 模型 casbin的模型控制抽象到一个配置文件中, 主要包含: policy: 控制策略/规则 request: 访问请求, 与e.Enforce()的参数一一对应 matcher: 匹配器, 与定义的每个policy一一匹配会生成多个匹配结果 effect: 根据匹配结果决定该请求是否获得授权 示...

Read more