V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Roy3
V2EX  ›  推广

云原生项目实践 DevOps(GitOps)+K8S+BPF+SRE,从 0 到 1 使用 Golang 开发生产级麻将游戏服务器—第 2 篇

  •  
  •   Roy3 · 2021-02-03 22:54:53 +08:00 · 2008 次点击
    这是一个创建于 1392 天前的主题,其中的信息可能已经有所发展或是发生改变。

    云原生项目实践 DevOps(GitOps)+K8S+BPF+SRE,从 0 到 1 使用 Golang 开发生产级麻将游戏服务器—第 2 篇

    系列文章

    1. 云原生项目实践 DevOps(GitOps)+K8S+BPF+SRE,从 0 到 1 使用 Golang 开发生产级麻将游戏服务器—第 1 篇

    介绍

    这将是一个完整的,完全践行 DevOps/GitOpsKubernetes 上云流程的 Golang 游戏服务器开发的系列教程。

    这个系列教程是对开源项目 Nanoserver 的完整拆解,旨在帮助大家快速上手 Golang (游戏)服务器后端开发。通过实践去理解 Golang 开发的精髓 —— Share memory by communication(通过通信共享内存)

    同时这个项目可能还会涉及到 Linux 性能调优( BPF 相关的工具)和系统保障( SRE )的相关的工作。

    脚手架项目

    • 脚手架是基于 nanoserver 抽出来的,旨在帮助大家快速理解这个 Mahjong Server 是如何搭出来的。
    • 我们先单体架构理解整体业务 -> 然后再 分布式 Nano Server + 微服务 改造( Step-by-Step )。
    • Demo:go-mahjong-server

    基础回顾

    Go Modules

    我的本地环境:

    go version
    # go version go1.14.14 darwin/amd64
    

    go mod help

    Go mod 提供对 modules 操作的访问。

    请注意,所有 go 命令都内置了对 modules 的支持, 不只是'go mod'。例如,日常的依赖关系添加(adding),删除(removing),升级(upgrading)和降级(downgrading)应该使用 'go get' 完成。 有关 module 功能的概述,请参见 'go help modules'

    用法:

    go mod <command> [arguments]
    
    • download 将模块下载到本地缓存
    • edit 通过工具或脚本编辑 go.mod
    • graph 打印模块依赖图
    • init 在当前目录中初始化新模块
    • tidy 添加缺少的内容并删除未使用的模块
    • vendor 制作第三方依赖包( vendored )的依赖副本
    • verify 验证依赖项具有预期的内容
    • why 解释为什么需要软件包( packages )或模块( modules )

    使用 “go help mod <命令>” 可获取有关命令的更多信息。

    脚手架基本结构

    ├── configs # 配置文件
    │   ├── config.toml
    ├── db # 数据库( xorm )相关
    │   ├── model
    │   │   ├── struct.go # database schema
    │   ├── const.go
    │   ├── logger.go
    │   ├── model.go
    ├── internal
    │   ├── game # 游戏服务器( Nano server )
    │   │   ├── crypto.go
    │   │   ├── game.go
    │   │   ├── manager.go
    │   ├── web # web 服务器(提供 API )
    │   │   ├── web.go
    ├── pkg # 项目基础包
    │   ├── algoutil # 常用工具函数
    │   │   ├── algoutil.go 
    │   ├── crypto # md5 rsa sha1 x509 base64 相关工具
    │   │   ├── crypto.go
    │   ├── errutil # 游戏服务器中错误码和错误信息统一管理
    │   │   ├── code.go
    │   │   ├── errutil.go
    │   ├── whitelist # 白名单验证工具函数
    │   │   ├── white_list.go
    ├── protocol # 协议(放所有游戏)
    │   ├── web.go
    ├── main.go # 入口
    
    1 条回复    2021-02-04 06:29:22 +08:00
    m0cha
        1
    m0cha  
       2021-02-04 06:29:22 +08:00 via iPhone
    收藏了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:43 · PVG 10:43 · LAX 18:43 · JFK 21:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.