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

Posted 黑客下午茶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇相关的知识,希望对你有一定的参考价值。

项目初探

  • 原项目:https://github.com/lonng/nanoserver

  • 调过的:https://github.com/Kirk-Wang/nanoserver

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

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

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

同志们,服务器端程序是跑在 Linux 上面的。为啥性能上不来,可能真的是对操作系统了解的太少(共勉)。

之前为少写过的相关文章:




服务端

我调整过后的项目:

  • https://github.com/Kirk-Wang/nanoserver

原项目

  • https://github.com/lonng/nanoserver

我的本地环境:

go version
# go version go1.14.14 darwin/amd64

使用容器运行 mysql & Adminer

docker-compose.mysql.yaml

version: '3.1'
services:
db:
image: mysql
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
restart: always
networks:
- db_network
ports:
- "3306:3306"
volumes:
- 'db_data:/bitnami/mysql/data'
environment:
MYSQL_DATABASE: scmj
MYSQL_ROOT_PASSWORD: 123456
healthcheck:
test: ['CMD', '/opt/bitnami/scripts/mysql/healthcheck.sh']
interval: 15s
timeout: 5s
retries: 6
adminer:
image: adminer
restart: always
networks:
- db_network
ports:
- 8080:8080
volumes:
db_data:
driver: local
networks:
db_network:
driver: "bridge"

启动

docker-compose -f docker-compose.mysql.yaml up
# docker-compose -f docker-compose.mysql.yaml up -d 后台运行
# docker-compose -f docker-compose.mysql.yaml down 卸载
# docker-compose -f docker-compose.mysql.yaml ps

# 清理数据文件
# docker volume ls
# docker volume rm nanoserver_db_data

容器启动后,会自动帮我们创建数据库 - scmj

启动服务端程序

已启动好 MySql 后,我运行如下命令:

go run .

正常你会看到如下截图(会自动的创建表和索引):

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

我们可以进入 http://localhost:8080/ 查看一下:

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

客户端

在 Kirk-Wang/nanoserver 中,为少已经放了一份专注于调试服务器逻辑的 apk。

安装安卓模拟器

这里我推荐网易的 MuMu模拟器。

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

安装 APK

mahjong.apk,已经放到笔者修改过的项目中。这里我们使用多开助手,开4个空来血战。

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

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

客户端登录

我们点击微信登录。

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

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

发现登录失败……

如何解决?请继续阅读。

解决客户端登录失败问题

当然这问题,也好解决:

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

Charles 对客户端请求地址转发

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

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

加入 guest 测试渠道 konglai

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

重新登录进入游戏

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

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

完美,搞定。

测试 & 凑一局血战到底

创建房间

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

加入房间

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

开始游戏

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

查看服务器日志

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

DevOps(Drone CI/CD) & DevOps

.drone.yml

kind: pipeline
type: kubernetes
name: NanoServer

steps:

- name: 更新 Chart.yaml appVersion
image: busybox
commands:
- echo $DRONE_COMMIT
- '[ -n "$DRONE_COMMIT" ] && (
sed -i "s/APP_VERSION/${DRONE_COMMIT}/g" k8s/nanoserver/nanoserver/Chart.yaml;
)'

- cat k8s/nanoserver/nanoserver/Chart.yaml

- name: 构建 Docker Image
image: plugins/docker
settings:
debug: true
dockerfile: Dockerfile.prod
repo: hub.your-domain.com/library/nanoserver
tags: ${DRONE_COMMIT}
registry: hub.your-domain.com
username:
from_secret: docker_user
password:
from_secret: docker_pass

- name: 上云(HelmV3) -> K8S Cluster
image: pelotech/drone-helm3
settings:
helm_command: upgrade
chart: ./k8s/nanoserver/nanoserver
release: nanoserver
vaules_yaml: ./k8s/nanoserver/values.yaml
namespace: nano
api_server:
from_secret: api_server
kubernetes_token:
from_secret: k8s_token
skip_tls_verify: true

trigger:
branch:
- master

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

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

GitOps & ArgoCD 声明式云原生渐进式部署

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

作者:为少
微信:uuhells123
公众号:黑客下午茶
加我微信(互相学习交流),关注公众号(获取更多学习资料~)


以上是关于云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇的主要内容,如果未能解决你的问题,请参考以下文章

云原生时代,你还不懂 GitOps?

云原生时代,你还不懂 GitOps?

6张图,带你深入理解GitOps,真硬核!

云原生架构下,企业一站式DevOps平台建设实践丨Gdevops峰会

云原生Java架构实战 K8s+Docker+KubeSphere+DevOps(下)

一文看懂 K8s 日志系统设计和实践