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...
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...
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...
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...
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请求头...
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...
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: 根据匹配结果决定该请求是否获得授权
示...
30 post articles, 5 pages.