gobbq is golang game server framework.
why gobbq? because I often go to barbecue with friends, I'd rather everyone have time to barbecue than work all the time.
gobbq 是一个游戏后台开发框架。我想做游戏,更想去烧烤,总之不想加班,所以我需要一个框架,能免去我的运维烦恼,提升开发效率,这就是 gobbq。
EntityID = ProxyID + InstID + entityid
消息转发,根据ProxyID转发到对应的proxy机器,proxy机器根据对应的InstID确认直连服务器,服务器根据entityid确认entity。
proxy需要知道其他proxy的id和ip,还需要知道直连自己的服务器InstID和ip
- proxy启动时,需要做服务发现,发现其他proxy,同时向其他proxy注册自己。
- Inst启动时,需要向自己的proxy注册,同时proxy告诉自己对应的ProxyID。
- gate启动时需要向proxy注册自己为一个Inst
- client只能有一个entity,向gate注册,同时知道gate的InstID
- service需要向proxy注册,proxy广播(看看能不能优化)
gate proxy <=> sidecar game client
- 可调试性:代码修改1分钟内完成重新部署和调试,调试过程可视化
- 安全:可靠的访存管理、异常保护机制
- 编码效率:能1行搞定的代码,为什么要写10行
- 良好的泛型:DRY
- 标准库:统一的标准库、完善的依赖管理
- 编译效率:减少的每一分钟都是生命
- 会话保持和重连能力
- 服务器指定一组客户端广播
- 支持后端任意服务下推消息
- 精确流控、熔断、接口保护
- 限频和限流
- 服务注册和自动发现能力
- 支持消息指定地址单播、组合地址多播、受限广播等多种发送能力
- 负载均衡:被调方有负载自动迁移能力,发送方无需关注
- 可靠送达:在不发生网络分区或节点故障情况下,消息默认可靠、一次送达
- 消息保序:同一对互相通信的节点,多个连续包需要保证顺序达到
- Mysql
- Elastic Search
- Redis
- Etcd
- Zookeeper
- 调用链跟踪
- 日志接口
- 监控上报
- 共享内存支持(可选)
- 多线程模型(可选)
- 异步回调:代码编写复杂,开发周期长,维护困难,BUG多
- 有限状态机(FSM):本质是回调,但通过提前约定状态和流转,控制了严重BUG的出现几率
- Promise/Future
- 协程: 同步编程的诱惑实在是太大了,无法拒绝的特性。但许多细节需要考虑,如果是自己实现,有栈(独立or共享)vs无栈,对称vs非对称,更多(系统级Hook, 协程间* 交互数据,锁,定时器等)
- 服务发现和路由:考虑路由切换式的请求低损
- 数据分区方式:如何分配数据(关键词 or hash or 多级索引); 如何选主(主从,多主节点)
- 容灾方式:节点的新增、删除、数据恢复和数据迁移
- 事务一致性支持:从框架层面支持事务特性,能大大减少经济道具类的风险
- 单测支持
- 代码覆盖
- 自动化测试
- 压力测试
- 静态检查
- 代码复杂度检测
- 快速部署:1分钟快速构建开发环境和测试环境的能力
- 线上维护能力:TKE(k8s)基本都提供了解决方案
- 自动扩缩容
- 优雅启停
- 原地热更
- 滚动更新
- 更加智能的AI Ops: 如核心监控KPI曲线的异常检测、异常错误日志的自动告警
- 软件可定义网络( SDN):SDN是一个思想,其实这里讲的是业务层面,需要支持动态变化的配置(如依赖云、组件的地址配置、密钥)和版本镜像的解耦,真正实现“一次构* 建、多处可用”。
- ABTest能力:从框架层面支持用户/请求/功能系统/服务节点的AB测试/灰度能力