当前位置: 首页 > news >正文

游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等

本文首发在这里
请先看完

  • 实现负责消息转发、推送的网关服务
  • 负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间

Docker容器化

Build and Push
docker build -t panshiqu/game_server:latest -t panshiqu/game_server:1 -t panshiqu/game_server:1.0 --build-arg SERVER=game_server .
docker build -t panshiqu/gate_server:latest -t panshiqu/gate_server:1 -t panshiqu/gate_server:1.0 --build-arg SERVER=gate_server .docker push panshiqu/game_server:latest
docker push panshiqu/game_server:1
docker push panshiqu/game_server:1.0
docker push panshiqu/gate_server:latest
docker push panshiqu/gate_server:1
docker push panshiqu/gate_server:1.0# 记得调整Import,这样才能编出两个不同的版本
docker build -t panshiqu/game_server:client --target client-final .
docker build -t panshiqu/gate_server:client --target client-final .
docker push panshiqu/game_server:client
docker push panshiqu/gate_server:client
验证
# 创建网络使用别名发现服务
docker network create serverdocker run --network server --network-alias dice --name game_server -p 60001:60001 --rm panshiqu/game_server:1.0
docker run --network server --name gate_server -p 60006:60006 -e JWT_KEY=ZGVmYXVsdF9rZXk= --rm panshiqu/gate_server:1.0cd ~/go/src/github.com/panshiqu/server/game_server/game/dice/client
go run main.godocker run --network server --rm -it panshiqu/game_server:client ./dice_client -ip dice

Kubernetes容器编排

部署
kubectl apply -f https://raw.githubusercontent.com/panshiqu/server/main/k8s/dice.yamlkubectl create secret generic jwt --from-literal=key=ZGVmYXVsdF9rZXk=kubectl apply -f https://raw.githubusercontent.com/panshiqu/server/main/k8s/gate.yamlminikube service gate --url # Mac DockerDesktop minikube print the port
cd ~/go/src/github.com/panshiqu/server/game_server/game/dice/client
go run main.go -port 60006kubectl run dice -it --rm --restart Never --image panshiqu/gate_server:client
./dice_client -ip $GATE_SERVICE_HOST
EFK (Elasticsearch + Fluentd + Kibana)

方案取自以下官方文档

  • 日志架构
  • Fluentd
  • 快速开始系列:其中Elasticsearch和Kibana
kubectl create -f https://download.elastic.co/downloads/eck/2.14.0/crds.yamlkubectl apply -f https://download.elastic.co/downloads/eck/2.14.0/operator.yamlcat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:name: quickstart
spec:version: 8.15.0nodeSets:- name: defaultcount: 1config:node.store.allow_mmap: false
EOF
{% raw %}
kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'
{% endraw %}
cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:name: quickstart
spec:version: 8.15.0count: 1elasticsearchRef:name: quickstart
EOFkubectl port-forward service/quickstart-kb-http 5601# 复制修改自:https://github.com/fluent/fluentd-kubernetes-daemonset/blob/master/fluentd-daemonset-elasticsearch-rbac.yaml
curl -s -O https://raw.githubusercontent.com/panshiqu/server/main/k8s/fluentd-daemonset-elasticsearch-rbac.yaml
kubectl apply -f fluentd-daemonset-elasticsearch-rbac.yaml # 请修改密码 FLUENT_ELASTICSEARCH_PASSWORD# Open https://localhost:5601
更新

游戏优雅停服细节说明

  • 请先查看资源配置中对preStop的注释
  • 首次收到SIGTERM信号,先标记停服后等待所有房间主动解散,没有房间则无需等待
  • 此时服务发现不再分配本服务但允许定向连接,可以进入旧房间但不允许创建新房间
  • 可对本服所有客户端定时持续广播房间将由系统解散,请主动解散后创建新房间(待实现)
  • 再次收到SIGTERM信号,触发解散现有房间
# 可选借助此命令将本地打包的镜像载入minikube
# minikube image load panshiqu/game_server:1.3# 可选在修改镜像前后通过调整partition来执行金丝雀发布,用以先更新并验证单个服务,值=replicas-1
# kubectl patch statefulsets dice -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":1}}}}'kubectl set image statefulsets dice game=panshiqu/game_server:1.3kubectl rollout status statefulsets dice# 验证测试不通过可以回滚
# kubectl rollout undo statefulsets dice# kubectl patch statefulsets dice -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":0}}}}'

网关得益于设计成重启几乎没有代价,客户端只会感到可能因为网络不好而触发了重连

kubectl set image deployments gate gate=panshiqu/gate_server:1.3

部署AB服,客户端老转新服将没有明确的时间限制

# 默认启用A服
kubectl apply -f https://raw.githubusercontent.com/panshiqu/server/main/k8s/dice-ab.yamlkubectl set image statefulsets dice-b game=panshiqu/game_server:1.3# 扩容开B服
kubectl scale statefulsets dice-b --replicas=2# 启用B服
kubectl patch service dice -p '{"spec":{"selector":{"group":"b"}}}'# 缩容停A服
kubectl scale statefulsets dice-a --replicas=0

相关文章:

游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等

本文首发在这里 请先看完 实现负责消息转发、推送的网关服务负责网络、定时、坐下、站起、重连等&#xff0c;支持多类游戏的无锁房间 Docker容器化 Build and Push docker build -t panshiqu/game_server:latest -t panshiqu/game_server:1 -t panshiqu/game_server:1.0 -…...

Vue面试题4

1.解释Vue中 route 和 router 的区别&#xff1f; route 是当前激活的路由的信息对象&#xff0c;包含了当前路由的详细信息&#xff0c;如路径、参数、查询字符串等。在 Vue 组件中&#xff0c;可以通过 this.$route 访问到这个对象。例如&#xff0c;this.$route.path 可以获…...

Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读

Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读 Abstract1. Introduction2. Related work3. Method3.1. Building blocks for PCME3.1.1 Joint visual-textual embeddings3.1.2 Probabilistic embeddings for a single modality 3.2. Probabilistic cross-modal…...

CSS基本布局理解(测试)——WEB开发系列38

对CSS学习已经接近尾声&#xff0c;下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。 题 1&#xff1a;基于栅格布局的现代博客首页设计 题目要求&#xff1a; 创建一个博客首页布局&#xff0c;包含一个顶部导航栏、一个主要的内容区域&#xff08;左侧为博客文…...

计算机视觉(一)—— 特刊推荐

特刊征稿 01 期刊名称&#xff1a; Computer Vision for Smart Cities 截止时间&#xff1a; 提交截止日期&#xff1a;2024 年 12 月 31 日 目标及范围&#xff1a; 以下是一些潜在的主题&#xff1a; 城市交通和交通管理&#xff1a; • 车辆检测和跟踪以实现高效的交通流…...

OpenCV class1-C#+winfrom显示控件并内存管理

OpenCV是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法。它采用C语言编写,并提供了C、Python、Java等多种语言接口,可广泛应用于各种计算机视觉相关领域。OpenCV具有强大的图像处理能力,包括图像滤波、几何变换、特征提取等,同时也支持视频分析、目标检测与跟踪…...

构建蛋白质复合体结构中所有链序列的同源性矩阵

为了生成蛋白质复合体结构中所有链之间的同源性矩阵&#xff0c;我们可以使用基于结构比对的工具&#xff08;如 TM-align&#xff09;&#xff0c;逐对地比对所有链&#xff0c;并根据比对结果&#xff08;通常是 TM-score&#xff09;构建同源性矩阵。 具体步骤包括&#xf…...

[苍穹外卖]-10WebSocket入门与实战

WebSocket WebSocket是基于TCP的一种新的网络协议, 实现了浏览器与服务器的全双工通信, 即一次握手,建立持久连接,双向数据传输 区别 HTTP是短连接, WebSocket是长连接HTTP单向通信, 基于请求响应模型WebSocket支持双向通信 相同 HTTP和WebSocket底层都是TCP连接 应用场景…...

【JAVA】一篇聊透百万级数据导入导出场景问题、大数据处理策略及优化方案、EasyExcel 和 EasyPOI的玩法详解

文章目录 名词介绍场景问题分析解决导入问题解决方案内存溢出&#xff08;分批导入&#xff09;DB插入&#xff08;分批插入&#xff09; 导出问题解决方案 导入导出的策略定时导入导出实时导入导出 EasyPOI 更多相关内容可查看 玩之前先了解几个关键名词&#xff08;大佬可省略…...

2024年华为9月4日秋招笔试真题题解

2024年华为0904秋招笔试真题 二叉树消消乐好友推荐系统维修工力扣上类似的题--K站中转内最便宜的航班 二叉树消消乐 题目描述 给定原始二叉树和参照二叉树(输入的二叉树均为满二叉树&#xff0c;二叉树节点的值范围为[1,1000]&#xff0c;二叉树的深度不超过1000)&#xff0c…...

Next.js 14 App Router 预渲染 代码实践 静态页面渲染 SSG 服务端渲染代码 SSR

最近学习了Next.js 14框架&#xff0c;总结一下预渲染技术和具体代码用法&#xff0c;如果有理解不对的地方还请大佬指正。 注意以下内容只讨论App Router的新方案&#xff08;getStaticProps已经弃用&#xff09;。 1.简介 预渲染主要分为2种技术&#xff0c;静态页面渲染(…...

阿里云人工智能ACP错题整理.txt

1、TextRank是一种关键词抽取和文档摘要的排序算法&#xff0c;由谷歌的网页重要性排序算法PageRank算法改进而来&#xff0c;利用文本内部的词语间的语义便可以抽取关键词&#xff0c;它能够从一个给定的文本中抽取出该文本的关键词、关键词组&#xff0c;并使用抽取式的自动文…...

为 WebSocket 配置 Nginx 反向代理来支持 Uvicorn 的最佳实践

前景 要为WebSocket(以 ws:// 或 wss:// 协议)配置 Nginx 反向代理来代理 Uvicorn 服务器(或其他支持 WebSocket 的应用),需要确保 Nginx 和 Uvicorn 支持 WebSocket 连接,并做一些特定的配置。WebSocket 协议与 HTTP/HTTPS 不同,因此需要在 Nginx 中设置正确的代理头和…...

Centos7通过Docker安装openGauss5.0.2并配置用户供Navicat连接使用

下载镜像 [rootiZ2ze3qc9ouxm10ykn3cvdZ ~]# docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/enmotech/opengauss:5.0.2 5.0.2: Pulling from ddn-k8s/docker.io/enmotech/opengauss 2ec76a50fe7c: Pull complete e48b50219b49: Pull complete 512e203af4…...

生成树详细配置(STP、RSTP、MSTP)

目录 一. 实验内容 STP配置实验 RSTP配置实验 MSTP配置实验 二. 1 ) STP配置实验 实验拓扑 ​编辑 实验配置 实验结果 2 ) RSTP配置实验 实验拓扑 实验配置 实验结果 3 ) MSTP配置实验 实验拓扑 实验配置 ​编辑 实验结果 三 实验总结 一. 实验内容 1) …...

服务器环境搭建-5 Nexus搭建与使用介绍

背景 本文介绍nexus的安装、配置和使用&#xff0c;之后通过案例的方式演示使用过程。 1.下载和安装 本文使用Nexus 3.x版本进行演示 下载地址&#xff1a;Download Nexus Repository OSS | Sonatype 国外网站下载速度较慢&#xff0c;也可以通过百度网盘下载(提取码:9999): …...

将 Parallels Desktop(PD虚拟机)安装在移动硬盘上,有影响吗?

当我们谈论在移动硬盘上安装 Parallels Desktop&#xff08;简称PD虚拟机&#xff09;及其对性能的影响时&#xff0c;特别是在运行如Unigraphics这样的资源密集型软件时&#xff0c;用户需要在便携性与性能之间找到最佳平衡。本文将深入探讨PD虚拟机装在移动硬盘有影响吗&…...

PHP智能化云端培训考试系统小程序源码

智能化云端培训考试系统&#xff1a;重塑学习评估的未来 &#x1f31f; 引言&#xff1a;迈向智能教育的新时代 在这个日新月异的数字时代&#xff0c;教育也在经历着前所未有的变革。智能化云端培训考试系统的出现&#xff0c;正是这一变革的生动体现。它不仅打破了传统教育的…...

内幕!smardaten无代码平台全方位测评,这些细节你绝对想不到!

目录 一、引言二、测评要点2.1、前后端交互嵌套2.2、兼容性与可扩展性2.2.1、页面集成2.2.2、数据集成2.2.3、接口集成2.2.4、权限集成2.2.5、代码扩展支持 2.3、UI定制2.4、开发环境的隔离2.5、OEM定制2.6、多语言切换2.7、AI大模型能力 三、总结 一、引言 作为一枚IT从业者&…...

计算机专业的真正的就业情况

首先听到计算机行业&#xff0c;大多数人岗位已经饱和&#xff0c;前端已死&#xff0c;程序员35岁危机。但是事实上这些认知都是片面的&#xff0c;今天由我来为大家分析计算机行业的内幕。 疫情过后&#xff0c;过内各种行业都受到了冲击&#xff0c;你们敢说除了体制内的行业…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...