项目初探

项目地址:

这将是一个完整的,完全践行 DevOps/GitOpsKubernetes 上云流程的 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个空来血战。

客户端登录

我们点击微信登录。

发现登录失败……

如何解决?请继续阅读。

解决客户端登录失败问题

当然这问题,也好解决:

  1. 按作者所说那样,反编译 apk,找到 appConfig.luac,使用二进制编辑器改完服务器地址,然后重新打包。

  1. 直接使用代理,如 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篇的更多相关文章

  1. 云原生时代的DevOps平台设计之道

    开发人员与运维人员是 IT 领域很重要的两大人群,他们都会参与到各种业务系统的建设过程中去.DevOps 是近年间火爆起来的一种新理念,这种理念被很多人错误的解读为"由开发人员(Dev)学习 ...

  2. “行业客户云原生最佳实践日” 亮相KubeCon上海

    2018年11月13日至15日,由CNCF主办的KubeCon + CloudNativeCon将首次登陆中国上海,这是全球范围内规模最大的Kubernetes和云原生技术盛会. 唯一聚焦客户实践的分 ...

  3. ​第3届云原生技术实践峰会(CNBPS 2020)重磅开启,“原”力蓄势待发!

    CNBPS 2020将在11月19-21日全新启动!作为国内最有影响力的云原生盛会之一,云原生技术实践峰会(CNBPS)至今已举办三届. 在2019年的CNBPS上,灵雀云CTO陈恺喊出"云 ...

  4. 云原生生态周报 Vol. 15 | K8s 安全审计报告发布

    业界要闻 CNCF 公布 Kubernetes 的安全审计报告 报告收集了社区对 Kubernetes.CoreDNS.Envoy.Prometheus 等项目的安全问题反馈,包含从一般弱点到关键漏洞 ...

  5. 阿里云 CDN 业务基于边缘容器的云原生转型实践

    导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...

  6. 云原生生态周报 Vol. 14 | K8s CVE 修复指南

    业界要闻 Mesosphere 公司正式更名为 D2IQ, 关注云原生. Mesosophere 公司日前发布官方声明正式更名为:D2iQ(Day-Two-I-Q),称关注点转向 Kubernetes ...

  7. 云原生生态周报 Vol. 11 | K8s 1.16 早知道

    业界要闻 Pivotal 发布了完全基于 Kubernetes 的 Pivotal Application Service(PAS)预览版 这意味着 Pivotal 公司一直以来在持续运作的老牌 Pa ...

  8. 云原生生态周报 Vol.9| K8s v1.15 版本发布

    本周作者 | 衷源.心贵 业界要闻 1.Kubernetes Release v1.15 版本发布,新版本的两个主题是持续性改进和可扩展性.(https://github.com/kubernetes ...

  9. 云原生生态周报 Vol. 12 | K8s 1.16 API 重大变更

    本文作者:源三.临石.张磊.莫源 业界要闻 1. K8s 1.16 将废弃一系列旧的 API 版本 影响面涉及 NetworkPolicy.PodSecurityPolicy.DaemonSet, D ...

随机推荐

  1. java时间的一些处理

    获取当前时间 System.currentTimeMillis() //第一种 Date date = new Date(); System.out.println(date.getTime()); ...

  2. 第三章 存储器的扩展(二)——> 重要

    3.2 主存储器 四.只读存储器(ROM)---->了解(考试也可能会考) 掩膜ROM(MROM) 行列选择线交叉处有 MOS 管为"1" 行列选择线交叉处无 MOS 管为& ...

  3. 商品类型的下拉框绑定一个事件,通过ajax获取属性

    html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width=&q ...

  4. Modbus 仿真测试工具 Mod_Rssim 详细图文教程

    Mod_RSsim是一款轻量级的Modbus从机模拟器,它可以模拟ModBusTCP和ModBusRTU的从机,能够同时模拟254个被控站,软件使用简单方便,可以满足一般的主机调试. 官方网站:www ...

  5. 手把手教你搭建SSH框架(Eclipse版)

    原文来自公众号[C you again],若需下载完整源码,请在公众号后台回复"ssh". 本期文章详细讲解了SSH(Spring+SpringMVC+Hibernate)框架的搭 ...

  6. spring boot 邮件服务

    引入依赖 添加spring-boot-starter-mail包引用 <dependency> <groupId>org.springframework.boot</gr ...

  7. 【C++】《C++ Primer 》第十二章

    第十二章 动态内存 目前为止,所使用的对象都有着严格定义的生存期. 全局对象在程序启动时分配,在程序结束时销毁.局部自动对象在进入其定义所在的程序块时被创建,在离开块时销毁.局部static对象在第一 ...

  8. 关于软件架构中的b/s

    **B/S架构 b/s只需要一个浏览器,用户就可以通过不同的网址访问不同的服务器程序. 优点:开发,安装,部署,维护简单 缺点:对硬件要求过高,用户的体验会受到影响 首先是资源分类:**可以分为静态资 ...

  9. 【MySQL】使用MySQL(连接、选择数据库、显示数据库和表信息)

    第3章 使用MySQL 文章目录 第3章 使用MySQL 连接 选择数据库 了解数据库和表 小结 简单记录 - MySQL必知必会 - [英]Ben Forta 将学习如何连接和登录到MySQL,如何 ...

  10. kubernets之机理概览

    一  了解kubernets的运行机理 1.1  了解架构 众所周知,kubernets的组成由2个部分组成 kubernets  平面 node节点  (工作节点) 控制平面的组成 etcd  分布 ...