1: v1 go-kit 微服务 基础使用 (HTTP)
2: v2 go-kit 微服务 添加日志(user/zap ,并为每个请求添加UUID)
3: v3 go-kit 微服务 身份认证 (JWT)
4: v4 go-kit 微服务 限流 (uber/ratelimit 和 golang/rate 实现)
5: v5 go-kit 微服务 使用GRPC(并为每个请求添加UUID)
6: v6 go-kit 微服务 服务注册与发现(etcd实现)
7: v7 go-kit 微服务 服务监控(prometheus 实现)
8: v8 go-kit 微服务 服务熔断(hystrix-go 实现)
9: v9 go-kit 微服务 服务链路追踪(jaeger 实现)(1)
10: v9 go-kit 微服务 服务链路追踪(jaeger 实现)(2)
11: v11 go-kit 微服务 添加一个简单网关
gRPC负载均衡(自定义负载均衡策略--etcd 实现)
实现基于版本(version)的grpc负载均衡器,了解过程后可自己实现更多的负载均衡功能
- 注册中心
- Etcd Lease 是一种检测客户端存活状况的机制。 群集授予具有生存时间的租约。 如果etcd 群集在给定的TTL 时间内未收到keepAlive,则租约到期。 为了将租约绑定到键值存储中,每个key 最多可以附加一个租约
- 服务注册 (注册服务)
- 定时把本地服务(APP)地址,版本等信息注册到服务器
- 服务发现 (客户端发起服务解析请求(APP))
- 查询注册中心(APP)下有那些服务
- 并向所有的服务建立HTTP2长链接
- 通过Etcd watch 监听服务(APP),通过变化更新链接
- 负载均衡 (客户端发起请求(APP))
- 负载均衡选择合适的服务(APP HTTP2长链接)
- 发起调用
├── discovery
│ ├── customize_balancer.go
│ ├── discovery.go
│ └── options.go
├── example
│ ├── api
│ │ └── api.pb.go
│ ├── api.proto
│ ├── client_test.go
│ └── server.go
└── register
├── options.go
├── register.go
└── register_test.go
Golang DDD 的项目分层结构(六边形架构)
├── cmd 存放 main.go 等
├── adapter
│ ├── grpc
│ └── http
│ └── facade 引用其他微服务(接口防腐层)
├── application
│ ├── assembler 负责将内部领域模型转化为可对外的DTO
│ └── cqe Command、Query和Event -- 入参
│ └── dto Application层的所有接口返回值为DTO -- 出参
│ └── service 负责业务流程的编排,但本身不负责任何业务逻辑
├── domain
│ ├── aggregate 聚合
│ ├── entity 实体
│ ├── event 事件
│ │ ├── publish
│ │ └── subsctibe
│ ├── repo 接口
│ │ └── specification 统一封装查询
│ ├── service 领域服务
│ └── vo 值对象
└── infrastructure
├── config 配置文件
├── pkg 常用工具类封装(DB,log,tool等)
└── repository
├── converter domain内对象转化 do {互转}
└── do 数据库映射对象
```base
├── gateway // 长连接网关服务器
│ ├── push_job.go // 分发任务
│ ├── room.go // 房间,可作为某一类型的推送管理中心
│ ├── room_manage.go // 房间管理
│ ├── ws_conn.go // 简单封装的websocket方法
│ ├── ws_handle.go // 处理websocket协议方法
│ └── ws_server.go // websocket服务
├── logic //逻辑服务器
│ ├── http_handle.go // 推送,房间相关
│ └── http_server.go // http服务
└── main.go
```
- 可使用远程与本地模式
- 本地有的配置远程没有会自动把本地配置传到远程(基于key)
- 远程有的配置本地没有也会写一份到本地(退出程序会把远程配置写一份到本地)
- 远程模式配置可以动态加载
- 如远程连接不上会使用本地配置启动作为兜底
var conf = Conf{}
r, err := NewHConf(
SetWatchRootName([]string{"/gs/conf"}),
)
if err != nil {
t.Error(err)
return
}
t.Log(r.ConfByKey("/gs/conf/net", &conf.Net))
t.Log(r.ConfByKey("/gs/conf/net2222", &conf.Net2))
t.Log(r.ConfByKey("/gs/conf/net3333", &conf.Net3))
if err := r.Run(); err != nil {
t.Error(err)
return
}
t.Log(conf)
t.Log(r.Close())
1: base 基础方法
2: conf 配置文件
3:handler 对外处理方法
4:model 数据格式
5:proto protobuf 文件
```base
详细介绍查看文件夹内README.me内容
├─api
├─build
├─cmd
├─configs
├─internal
│ ├─app
│ │ ├─common
│ │ ├─controller
│ │ ├─entity
│ │ ├─repository
│ │ ├─router
│ │ │ └─middleware
│ │ └─service
│ └─pkg
└─tool
```
1: base 里面封装mysql,redis,mgo,minio文件储存库S3协议,雪花算法,退出程序方法,redis全局锁,日志库等(插件形式可单独引用)
2: logtool uber_zap日志库封装,可自动切分日志文件,压缩文件
3: perf ppoof小插件
4: push 集成苹果推送,google推送,华为推送
5: quit 优雅的退出程序
6: registrySelector 基于etcd实现的服务注册,发现,负载均衡
nsq (为你的服务插上docker_compose翅膀)
1: docker 为你的服务插上docker_compose翅膀
1: bidirectional_streaming_rpc 双向流grpc
2: server_side_streaming_rpc 服务端流grpc,也可以写成客户端流grpc
3: simple_rpc 简单grpc
1: server Prometheus监控报警系统
1: fisher_yates_test 添加fisher-yates算法 负载均衡节点
1: hystrix 学习并使用熔断(Hystrix)
1: main 使用带缓存的channel实现限流
2: uber_ratelimit 使用uber_ratelimit实现限流
1: main 配置文件ini的读取,以及自动匹配到结构体里面
1: bloom_filter redis 实现BloomFilter过滤器
2: lock redis实现全局锁
3: pipeline redis事务
4: subscription redis发布订阅
1: mgo.v2 mgo.v2库的基础使用学习
2: mongo-go-driver 官方库的demo,以及事务提交(不能是单节点)
1: mvc 模式,swagger文档 可作为基础学习gin
1: aes ase-(cfb,cbc,ecb)-(128,192,256)加解密方法
2: curve25519 椭圆曲线算法
3: 3curve25519 双棘轮算法,KDF链
1: 实现网络库,封包,解包 len+tag+data 模式
1: 10to36 10进制转36进制
2: 10to62 10进制转62进制
3: 10to76 10进制转76进制
4: binary 用一个int64来描述开关(用户设置很多建议使用)
1: worker job_worker模式,可提高系统吞吐量
1: active_object Go并发设计模式之Active Object
1: main golang 1.13 error 相关
1: main interface包学习
2: middleware Golang 基于interface 实现中间件