bigpipe 简化HTTP异步调用
低延迟接口 高延迟接口 同步调用 低延迟接口 高延迟接口 异步调用 bigpipe登场!
小红说:替我把鸭子运给小明 给你鸭子,小明 Client Call Producer Kafka Consumer Server
bigpipe core common kafka server producer consumer client slow fast log stats proto util config
call curl localhost:10086/rpc/call -d ‘ { "acl": { "name": "system-1", "secret": "i am good" }, "url": "http://localhost:10086/rpc/server/mock", "data": "hello123123123", "partition_key": "暂时用不到" } ' "data": "", "errno": 0, "msg": "发送成功"
stats
模块划分
config 包:json、ioutil 功能:读取配置文件,解析Json
server 相关配置: 包:net/http 功能:http协议、并发服务端 go go go go http.Server handler go main listener go go handler go handler
client 相关配置: 包:net/http 功能:http协议、并发客户端,限流,限并发,重试 go go request go http.Client 系统A go 限并发 限流 consumer 系统B request go go channel 令牌桶 系统C
producer 相关配置: 包:confluent-kafka-go 功能:发送消息给kafka 消息 call 取走 投递 结果 事件 server hash分区 produce channel 取走 投递 confluent kafka call 结果 事件 handler event channel
consumer 相关配置: 包:confluent-kafka-go 功能:从kafka读取消息 消费 go 拉取 consumer events channel 消费 consumer group - 1 main events channel confluent kafka 拉取 consumer group - 2 consumer group - 3 events channel
proto 包:json 功能:序列/反序列化kafka消息
stats 包:atomic 功能:原子变量,统计程序指标
log 相关配置: 包:io,fmt 功能:基于channel的异步日志 线程1 log 输出日志 消费 线程2 线程3 goroutine bigpipe.20170717_16.log bigpipe.20170717_17.log goroutine 线程1 bigpipe.20170717_18.log log 输出日志 goroutine 线程2 sink channel 消费 goroutine 线程3
go get不支持版本,不支持自动分析依赖,不支持自动下载依赖 包管理glide go get不支持版本,不支持自动分析依赖,不支持自动下载依赖 glide.yaml 安装依赖 添加依赖
https://github.com/owenliang/bigpipe 参与项目: https://github.com/owenliang/bigpipe 1,fork自己的项目 2,在fork中创建dev分支,在上面开发代码 3,在github提交pull request给bigpipe 4,等待bigpipe合并/打回代码 5,定期在fork上合并bigpipe的master分支,保持与最新代码一致 6,定期在fork上将master合并到dev,保持与最新代码一致