累积平时常用的golang开发组件库
-
poller: 网络event poll库,支持tcp协议
-
asyncbuffer: 累积数据至buffer中,异步批量处理
-
concurrent_map: 分片并发map
-
queue: 优先队列,延迟队列
-
sort_map:支持对无序map中的kv 升降排序(转换成slice来处理)
-
timingwheel: 层级时间轮
-
buffer pool: 临时对象池, 复用对象,减少gc, 优化逻辑,
-
worker pool: 并发处理的工作任务池,支持超时任务,自动扩缩worker goroutine, 批量不同任务异步处理
-
asynctask : 异步执行单一相同任务,回调错误处理
-
runtimer: 对goroutine运行异常的封装,以及获取goroutine运行时调用的堆栈信息
-
chain: 任务链式执行管理
-
balance: 负载均衡算法,一致性hash, rr, wrr 等
-
cache: 本地缓存patrickmn/go-cache, coocood/freecache,hashicorp/golang-lru ,allegro/bigcache,go local cache algorithms benchmark
-
net: 网络工具库
-
client: 调用基础组件服务的封装,mq( rocketMQ 高可用分区,生产分布式事务消息rocketmq-client-go, pulsar 支持流式/共享消费,计算存储分离,高可用分片存放rocksdb, 负载更均衡,易扩展,方便上云管理, pulsar-client-go topic/生产/消费), cache(redis(go-redis pipeline支持更好)操作, ledisdb(goleveldb,leveldb,rocksdb,lmdb,boltdb),pika(rocksdb),
tidis(go+rust+c++)), db(mysql/tidb go-sql-driver/mysql go-gorm/gorm可以通过gen一次生成RESTful CURD接口, mongo mongo-go-driver, es shard分片存放,节点路由,易扩展 go-elasticsearch), 连接池等 -
client-mq-kafka: kafka 高可用分区存放, 后续会去掉zk管理元数据依赖(通过kraft Metadata clusters mode管理元数据), 三方库 Shopify/sarama (sarama issue#901支持事务操作的讨论, v1.19.0优化了group consumer pr#1099, 在一些场景支持的不够好, 不推荐场景) confluent-kafka-go (支持事务操作)
-
client-etcd: 使用etcd提供分布式锁,服务发现,服务元数据配置等
-
client-redis:使用redis协议支持的命令提供分布式锁,缓存,限流等功能
-
zerocopy: 利用底层系统的零拷贝技术,mmap: edsrzf/mmap-go sendfile, splice,三方库封装使用
-
limiter: 服务提供方限流算法,防止服务过载策略,单机 固定/滑动时间窗口限流算法,漏桶(uber-go/ratelimit )/( juju/ratelimit )令牌桶算法,分布式限流算法(redis 计数/添加token,通常在流量入口网关层处理,nginx+lua, golang) 对三方开源服务在业务的基础上进行封装;
-
breaker: 服务消费方调用服务熔断机制,开源实现:afex/hystrix-go sony/gobreaker 对三方开源服务在业务的基础上进行封装;
-
log: 日志库, 基于uber zap 库,日志按时间切割lestrrat-go/file-rotatelogs;满足基础日志,访问日志,请求三方日志,panic日志,启动日志,
-
metric: 监控统计方法,比如计算MAU,DAU,精度要求不高可以使用redis HyperLogLog (只需要12K内存,在标准误差0.81%的前提下,能够统计2^64个数据!HyperLogLog是一种基数估计算法), Coda Hale metrics go lib rcrowley/go-metrics (Gauges, Counters, Meters, Histograms, Timers 等等); agent opentelemetry-go -> prometheus
-
trace: 服务链路跟踪,agent opentelemetry-go -> jaeger 主要用来学习借鉴开源的服务框架思路
-
consensus: 分布式一致性协议算法,raft 开源方案 hashicorp/raft 主要用来学习借鉴开源的服务框架思路
-
xdb: 单数据存储实例,B+tree etcd-io/bbolt LMS-tree syndtr/goleveldb 主要用来学习借鉴开源的服务框架思路
-
rpc:三方rpc协议框架封装, grpc-go, thrift, rpcx, dubbo-go 主要用来深入学习框架思路