Golang Common Library 基础库发布
Common Library 是 一个编程工具包,用于在 Golang 中构建微服务(或单体)。解决分布式系统和应用程序架构中的常见问题,可以让业务更加专注于交付业务价值。
此工具包兼容目前市场上绝大部分的服务框架: Kite、ServiceComb、go-kit、CloudWeGo/KiteX、gin、beego
并将Common Library 发布到golang生态:
动机
Golang 已成为服务器语言,在 Facebook、Uber、Netflix 和 国内ByteDance、DIDI 等所谓的“现代企业”公司中的使用度很高。但还有许多这些企业都是基于 JVM 的堆栈来处理他们的业务逻辑,这在很大程度上归功于直接支持他们的微服务架构的Library库和生态系统。
为了达到更高的成功水平,需要一个全面的工具包,以实现大规模的连贯分布式编程。Golang Common Library就是是一组包package和最佳实践,它为任何规模的组织构建服务提供了一种全面、健壮和可信赖支持
目标
构建相当完整、开箱即用的Package集合
- 各package相互对立,可按需使用
- 减少外部版本依赖,自形生态
- 无业务逻辑,全开放基础能力实现
- 没有特定工具或技术的强制要求
依赖管理
基于go mod支持多golang语言版本编译: 最小golang版本支持 1.12
Package集合说明
Cache 内存缓存
- 支持
lru、lfu和随机淘汰算法,同时也支持时间过期淘汰; - 支持
event回调: load加载回调、加载成功回调、对象淘汰回调; - 支持全局内存最大值设置(全局内存) 或 全局最大block(对象数)对象设置;
- 支持 metircs 统计 key 的命中率情况分析;
- 支持 Cache 内部数据 匹配查询(hash), 也支持近似值匹配查询(多阶二分查找);
- 支持 内存无GC 高性能模式;
Config 配置管理
- 支持
json、ini和 环境变量 配置 - 支持 默认值 设置与限制
- 支持 内存使用 配置
cli输出
Connect obejct Pool 连接池管理
- 支持
连接对象 Connect Obeject、全局公用对象 Global Obeject、数据对象 Data Objetc管理 - 支持 对象
保活、最小可用、最小空闲管理 - 支持
event回调: connect前、clear前、销毁前 回调; - 支持单机百万TPS管理
Discovery 注册中心 和 配置中心
- 支持etcd注册、healthcheck、configure下载、心跳保活
errno 通用错误库集合
- 支持 多个 errors 压栈传递
- 支持 errors 全局统一管理 和 标准序列号
- 支持 自定义Error 管理
logger 日志库(基于 uber zap on logrus)
- 完全兼容golang标准库日志模块,拥有六种日志级别
- 支持扩展的Hook机制
- 支持日志输出格式:JSONFormatter和TextFormatter
- 支持日志轮转:按log大小 和 按日期
- 支持日志清理:按log总大小 和 按日期
- 支持最高性能
metrics 收集
- 支持
prometheus数据接口 - 支持
opentelemetry数据接口 - 支持 atomic 内存态 统计
queue 队列
- 支持
RingQueue、PriorityQueue内存队列管理 - 支持无锁高性能队列使用
ratelimiter 限流包
- 支持 令牌桶、滑动时间窗口 限流模式
- 支持对对象限流: 可用于全局 和 部分sub对象限流 的 生成、处理 和 销毁
temporary 大文件IO交互库
- 支持超过一定大小、将临时缓冲转成临时文件
- 支持异步写源信息:io.Reader转换成io.ReadSeeker
- 支持异步读取源信息后关闭
workpool 任务池
- 支持 任务
保活、最小可用、最小空闲管理 - 支持
event回调: 执行前、执行完成后、销毁前回调; - 支持
goroutine链方式管理;整个栈内存支持全局设置 - 支持 异常处理
failover处理
Util 通用库
- 支持
Map、Strings、Time等基础数据转换 - 支持
version版本号比较 - 支持
数据diff
「如果这篇文章对你有用,请随意打赏」
FEATURED TAGS
agent
apiserver
application
bandwidth-limit
cgo
cgroupfs
ci/cd
client-go
cloudnative
cncf
cni
community
container
container-network-interface
containerd
controller
coredns
crd
cuda
custom-controller
deployment
device-plugin
docker
docker-build
docker-image
drop
ebpf
ecology
egress
etcd
gitee
github
gitlab
golang
governance
gpu
gpu-device
hpa
http2
image
ingress
iptables
jobs
kata
kata-runtime
kernel
kind
kubelet
kubenetes
kubernetes
library
linux-os
logging
loki
metrics
monitor
namespace
network
network-troubleshooting
node
nodeport
nvidai
ollama
pingmesh
pod
prestop
prometheus
proxyless
pvc
rollingupdate
schedule
scheduler
serverless
sglang
sidecar
sigtrem
systemd
tensorrt-llm
throttling
timeout
tools
traceroute
vllm