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

项目初探
项目地址:
这将是一个完整的,完全践行 DevOps/GitOps 与 Kubernetes 上云流程的 Golang 游戏服务器开发的系列教程。
这个系列教程是对开源项目 Nanoserver 的完整拆解,旨在帮助大家快速上手 Golang(游戏)服务器后端开发。通过实践去理解 Golang 开发的精髓 —— Share memory by communication(通过通信共享内存)。
同时这个项目可能还会涉及到 Linux 性能调优(BPF相关的工具)和系统保障(SRE)的相关的工作。
同志们,服务器端程序是跑在 Linux 上面的。为啥性能上不来,可能真的是对操作系统了解的太少(共勉)。
服务端
我调整过后的项目:
原项目
我的本地环境:
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 .
正常你会看到如下截图(会自动的创建表和索引):

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

客户端
在 Kirk-Wang/nanoserver 中,为少已经放了一份专注于调试服务器逻辑的 apk。
安装安卓模拟器
这里我推荐网易的 MuMu模拟器。

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


客户端登录
我们点击微信登录。


发现登录失败……
如何解决?请继续阅读。
解决客户端登录失败问题
当然这问题,也好解决:
- 按作者所说那样,反编译
apk,找到appConfig.luac,使用二进制编辑器改完服务器地址,然后重新打包。

- 直接使用代理,如
Charles进行请求地址转发。(本地调试服务器程序完全够了)
Charles 对客户端请求地址转发
使用 Map Remote 映射到你本机调试的地址就完全够了。


加入 guest 测试渠道 konglai

重新登录进入游戏


完美,搞定。
测试 & 凑一局血战到底
创建房间

加入房间

开始游戏

查看服务器日志

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


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


我是为少
微信:uuhells123
公众号:黑客下午茶
加我微信(互相学习交流),关注公众号(获取更多学习资料~)
云原生项目实践DevOps(GitOps)+K8S+BPF+SRE,从0到1使用Golang开发生产级麻将游戏服务器—第1篇的更多相关文章
- 云原生时代的DevOps平台设计之道
开发人员与运维人员是 IT 领域很重要的两大人群,他们都会参与到各种业务系统的建设过程中去.DevOps 是近年间火爆起来的一种新理念,这种理念被很多人错误的解读为"由开发人员(Dev)学习 ...
- “行业客户云原生最佳实践日” 亮相KubeCon上海
2018年11月13日至15日,由CNCF主办的KubeCon + CloudNativeCon将首次登陆中国上海,这是全球范围内规模最大的Kubernetes和云原生技术盛会. 唯一聚焦客户实践的分 ...
- 第3届云原生技术实践峰会(CNBPS 2020)重磅开启,“原”力蓄势待发!
CNBPS 2020将在11月19-21日全新启动!作为国内最有影响力的云原生盛会之一,云原生技术实践峰会(CNBPS)至今已举办三届. 在2019年的CNBPS上,灵雀云CTO陈恺喊出"云 ...
- 云原生生态周报 Vol. 15 | K8s 安全审计报告发布
业界要闻 CNCF 公布 Kubernetes 的安全审计报告 报告收集了社区对 Kubernetes.CoreDNS.Envoy.Prometheus 等项目的安全问题反馈,包含从一般弱点到关键漏洞 ...
- 阿里云 CDN 业务基于边缘容器的云原生转型实践
导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...
- 云原生生态周报 Vol. 14 | K8s CVE 修复指南
业界要闻 Mesosphere 公司正式更名为 D2IQ, 关注云原生. Mesosophere 公司日前发布官方声明正式更名为:D2iQ(Day-Two-I-Q),称关注点转向 Kubernetes ...
- 云原生生态周报 Vol. 11 | K8s 1.16 早知道
业界要闻 Pivotal 发布了完全基于 Kubernetes 的 Pivotal Application Service(PAS)预览版 这意味着 Pivotal 公司一直以来在持续运作的老牌 Pa ...
- 云原生生态周报 Vol.9| K8s v1.15 版本发布
本周作者 | 衷源.心贵 业界要闻 1.Kubernetes Release v1.15 版本发布,新版本的两个主题是持续性改进和可扩展性.(https://github.com/kubernetes ...
- 云原生生态周报 Vol. 12 | K8s 1.16 API 重大变更
本文作者:源三.临石.张磊.莫源 业界要闻 1. K8s 1.16 将废弃一系列旧的 API 版本 影响面涉及 NetworkPolicy.PodSecurityPolicy.DaemonSet, D ...
随机推荐
- java时间的一些处理
获取当前时间 System.currentTimeMillis() //第一种 Date date = new Date(); System.out.println(date.getTime()); ...
- 第三章 存储器的扩展(二)——> 重要
3.2 主存储器 四.只读存储器(ROM)---->了解(考试也可能会考) 掩膜ROM(MROM) 行列选择线交叉处有 MOS 管为"1" 行列选择线交叉处无 MOS 管为& ...
- 商品类型的下拉框绑定一个事件,通过ajax获取属性
html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width=&q ...
- Modbus 仿真测试工具 Mod_Rssim 详细图文教程
Mod_RSsim是一款轻量级的Modbus从机模拟器,它可以模拟ModBusTCP和ModBusRTU的从机,能够同时模拟254个被控站,软件使用简单方便,可以满足一般的主机调试. 官方网站:www ...
- 手把手教你搭建SSH框架(Eclipse版)
原文来自公众号[C you again],若需下载完整源码,请在公众号后台回复"ssh". 本期文章详细讲解了SSH(Spring+SpringMVC+Hibernate)框架的搭 ...
- spring boot 邮件服务
引入依赖 添加spring-boot-starter-mail包引用 <dependency> <groupId>org.springframework.boot</gr ...
- 【C++】《C++ Primer 》第十二章
第十二章 动态内存 目前为止,所使用的对象都有着严格定义的生存期. 全局对象在程序启动时分配,在程序结束时销毁.局部自动对象在进入其定义所在的程序块时被创建,在离开块时销毁.局部static对象在第一 ...
- 关于软件架构中的b/s
**B/S架构 b/s只需要一个浏览器,用户就可以通过不同的网址访问不同的服务器程序. 优点:开发,安装,部署,维护简单 缺点:对硬件要求过高,用户的体验会受到影响 首先是资源分类:**可以分为静态资 ...
- 【MySQL】使用MySQL(连接、选择数据库、显示数据库和表信息)
第3章 使用MySQL 文章目录 第3章 使用MySQL 连接 选择数据库 了解数据库和表 小结 简单记录 - MySQL必知必会 - [英]Ben Forta 将学习如何连接和登录到MySQL,如何 ...
- kubernets之机理概览
一 了解kubernets的运行机理 1.1 了解架构 众所周知,kubernets的组成由2个部分组成 kubernets 平面 node节点 (工作节点) 控制平面的组成 etcd 分布 ...