极致成本,如何基于容器计算服务 ACS 打造企业级幻兽帕鲁私服 SaaS 服务?

作者:韩运韬(青炽)

《幻兽帕鲁》是一款最近大热的开放世界生存游戏。据报道。上市不到一周,《幻兽帕鲁》销量已突破 700 万份,成为名副其实的现象级游戏。根据游戏数据库网站 SteamDB 的数据显示,《幻兽帕鲁》Steam 同时在线人数最高达到 201 万,成为史上同时在线玩家数量最高的付费游戏之一。

在游戏中,玩家可以和队友一起,收集神奇又可爱的生物“帕鲁”,并与他们一道探索、建造和战斗。开发商 Pocketpair 提供了官方的私服方案,可以突破官方服务器的 4 人组局限制,并推荐广大玩家采用。本文将介绍如何使用容器计算服务 ACS,以私服服务商视角,打造低成本的企业级幻兽帕鲁私服 SaaS 服务。

部署您的第一个容器化帕鲁私服

阿里云容器计算服务 ACS (Alibaba Cloud Container Compute Service) 是以 K8s 为使用界面提供容器算力资源的云计算服务,提供符合容器规范的算力资源。算力交付模式为 Serverless 形态,您无需关注底层节点及集群的运维管理。

使用 ACS,您可以以熟悉的 K8s 界面实现 SaaS 层业务逻辑,而不必过多学习云产品 OpenAPI。

创建 ACS 集群

进入容器计算服务控制台,进入【集群】菜单,点击【创建集群】。

图片

按照要求配置合适的资源,注意勾选【使用 EIP 暴露 API Server】。

获取 KubeConfig,连接集群

待集群创建完毕后,您可以进入集群详情页,在【集群信息】-【连接信息】中找到 KubeConfig 用于本地连接集群,或直接点击右上角【通过 CloudShell 管理集群】打开 Web Terminal。

图片

开始部署

先通过 kubectl 创建一个 namespace:palworld。

kubectl create ns palworld

通过 kubectl 在集群中 apply 以下 yaml 内容:

apiVersion: v1
kind: ConfigMap
metadata:name: palworld-cmnamespace: palworld
data:PUID: "1000" # 服务器运行时的用户的 UIDPGID: "1000" # 服务器运行时的组的 GIDPORT: "8211" # 游戏本地客户端连接的端口PLAYERS: "16" # 可同加入服务器的最大玩家数SERVER_PASSWORD: "worldofpals" # 服务器密码MULTITHREADING: "true"RCON_ENABLED: "true"RCON_PORT: "25575" # RCON 连接端口TZ: UTC # 备份服务器时所使用的时间戳COMMUNITY: "false"  # 服务器是否显示在社区服务器页中SERVER_DESCRIPTION: ""
---
apiVersion: v1
kind: Secret
metadata:name: palworld-secretsnamespace: palworld
type: Opaque
stringData:rconPassword: yourRconPassword
---
apiVersion: v1
kind: Service
metadata:labels:app: palworld-servername: palworld-servernamespace: palworld
spec:ports:- name: serverport: 8211protocol: UDPtargetPort: server- name: queryport: 27015protocol: UDPtargetPort: queryselector:app: palworld-servertype: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: palworld-servername: palworld-servernamespace: palworld
spec:replicas: 1selector:matchLabels:app: palworld-servertemplate:metadata:labels:app: palworld-serveralibabacloud.com/instance-type: standard # ACS通用型实例spec:containers:- name: palworld-serverimage: thijsvanloef/palworld-server-dockerimagePullPolicy: IfNotPresentresources:limits:cpu: 4memory: 16Girequests:cpu: 4memory: 16Giports:- containerPort: 8211name: serverprotocol: UDP- containerPort: 27015name: queryprotocol: UDPenv:- name: ADMIN_PASSWORDvalueFrom:secretKeyRef:name: palworld-secretskey: rconPasswordenvFrom:- configMapRef:name: palworld-cmvolumeMounts:- mountPath: /palworldname: datadirvolumes:- name: datadirpersistentVolumeClaim:claimName: palworld-nas
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: palworld-nasnamespace: palworld
spec:accessModes:- ReadWriteManyresources:requests:storage: 10PistorageClassName: alicloud-nas

在上例中,我们创建了:

  1. 帕鲁私服所需的相关配置项
  2. 帕鲁私服的 Deployment
    1. 这里我们使用了社区提供的镜像:thijsvanloef/palworld-server-docker
    2. 由于游戏服务实例是有内存状态的,所以我们 replicas 保持为 1 即可
    3. 官方推荐的 4c16g 规格在入门场景中远远过剩,建议您将起步规格优化为 4c8g 或更低,以节省成本。ACS 基于 Kubernetes 的使用界面,支持 cpu/memory 的 1:1~1:8 自由配比。相比于传统方案,让规格变配更简单
  1. 帕鲁私服所需的 PVC,以将游戏的状态持久化到外部
    1. 这里我们使用了 alicloud-nas 存储类,不要为 10Pi 这个值感到害怕,NAS 是按量付费的,10Pi 只是表示最大容量
  1. 基于 LoadBalancer 的 Service
    1. 游戏服务需要以 UDP 协议暴露出去

当 Pod palworld-server 的状态为 Running,玩家就可以通过《幻兽帕鲁》游戏客户端与小伙伴愉快的联机啦:

图片

图片

图片

当然,以上只是单个私服实例的部署示例,在商业化场景中,您可能需要将上述 YAMl 封装为 Helm Chart 以简化部署步骤(这里有个社区的参考案例 [ 1] ),或尝试阿里云开源的 OpenKruiseGame [ 2] 来实现更高级的运维能力。

ACS 如何极致降本

作为 SaaS 化私服服务商,我们需要尽可能的压低资源成本。在私服 SaaS 的商业模式中,云资源占据成本的主要部分,如何尽可能降低云资源成本,成为了业务成功的关键。

Serverless K8s,无需关心资源碎片

作为 SaaS 服务商,我们不可避免地会根据不同用户的需求提供不同等级的服务。也就是说,我们将同时运行着大小不一的各种规格实例。

如下图右侧所示,在标准的 Kubernetes 方案中,对于大规格实例(如支持 20 人以上),可能将直接占满一台 4c32g 的机器;而对于小规格实例和中规格实例,在一个 4c32g 的 Node 上运行必然会产生一些资源碎片,无形中消耗着成本。

而在 ACS 中,我们无需关心节点概念和背后的调度细节。如下图左侧所示,ACS 会为每个不同规格的实例分配对应的资源,用户只需按量付费,不用担心资源碎片产生的浪费。

图片

全栈 Serverless,不只是计算

除了计算资源本身,我们在上例中使用的网络和存储资源默认也是 Serverless 化的。

上例中,我们创建了 type: LoadBalancer 的 Service 资源,该资源将默认创建对应的按量付费的阿里云 CLB 实例。当没有玩家使用私服时,CLB 实例将不产生费用。

上例中,我们还使用 alicloud-nas 存储类创建了 PVC 资源,当 PV 产生时,该资源将默认创建按量付费的阿里云 NAS 实例。按量付费的 NAS 实例将按照实际的存储量进行扣费,对于游戏私服这种存储量低的场景将极具成本优势。

游戏业务具有明显的峰谷特征,SaaS 厂商完全可以基于业务属性对私服实例进行开服、停服以节省成本。

例如,在业务上巡检私服实例,当发现玩家数保持为 0 的五分钟后,将私服实例副本数缩 0。此时对应的 ACS Pod 将不进行计费,CLB 由于服务停止也几乎不产生流量费用,只有 NAS 实例将为该私服的持久化数据收记少量费用。

同时,可以在业务上要求用户需主动触发开服操作(可以在用户“获取服务器信息”的时候触发),此时将对应实例副本数置为 1。

通过这种业务设计,结合容器计算服务 ACS 的全栈 Serverless 特性,将为 SaaS 服务商大幅降低成本。而 ACS 本身所支持的 K8s 操作界面也为业务缩放提供了便利。

任务型工作负载大幅降本

私服 SaaS 服务商可能对不同的用户提供不同的差异化方案。如果服务商希望通过提供较低 SLA 保障的方案挖掘下沉市场,或是需要通过免费版拉新,则可以充分利用容器计算服务 ACS 的任务型工作负载进一步大幅降低成本。

在上例中,我们使用了 ACS 的默认实例类型:通用型实例去创建 palworld-server 工作负载。即为 spec.template.labels 加上了如下标签:

alibabacloud.com/instance-type: standard

通用型实例也是 ACS 默认的 Pod 实例类型,适合大部分延迟敏感型工作负载。在大多数场景中,通用型工作负载能够取得性能与经济性的平衡。

而对于延迟不敏感、性能不敏感的场景,我们可以使用 ACS 任务型实例大幅降本:

alibabacloud.com/instance-type: best-effort

与通用型、独享型实例相比,使用任务型实例可以节省相当可观的资源成本。任务型实例使用的 vCPU 与宿主机节点的物理 CPU 并不是严格绑定的,实例进程在运行过程中会被随机调度到任何空闲的 vCPU 超线程上,不同类型实例的 vCPU 会分时共享物理 CPU 资源,在宿主机节点低负载时,任务型实例可以获得较好的算力性能,在高负载时可能会出现 CPU 算力受限的情况。

图片

通常来说,在相同规格的情况下,受操作系统调度算法影响,任务型实例整体生命周期内的 CPU 算力基准低于通用型实例。下图展示了一个视频转码应用,在通用型和任务型实例类型下的运行时间情况对比。

图片

🔔 注意: ACS 对任务型实例的运行时长有限制。在邀测期间,单个实例的最大运行时长为 24 小时。

写在最后

以上就是容器计算服务 ACS 在私服 SaaS 服务商场景的使用案例。ACS 目前正处于邀测阶段,欢迎您申请试用体验, 我们会在 5 个工作日左右短信通知您申请结果,感谢您的支持与关注!

欢迎试用体验 ACS:https://survey.aliyun.com/apps/zhiliao/cI5zaVVCs

相关链接:

[1] 社区的参考案例

https://github.com/thijsvanloef/palworld-server-docker/blob/main/charts/palworld/README.md

[2] OpenKruiseGame

https://openkruise.io/zh/kruisegame/introduction/

点击此处,申请试用 ACS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774282.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

QTabWidget和QTabBar控件样式设置(qss)

QTabWidget和QTabBar控件样式设置 1、QTabWidget样式可自定义的有哪些示例:效果图 2、QTabBar样式可自定义的有哪些示例效果图 1、QTabWidget样式可自定义的有哪些 QTabWidget::pane{} 定义tabWidgetFrameQTabWidget::tab-bar{} 定义TabBar的位置QTabWidget::tab{}定…

性能篇:如何解决高并发下 I/O 瓶颈?

我们可以有效地解决高并发下I/O瓶颈的问题,提升系统的性能。当然,实际场景中的优化可能涉及到更多的细节和技术,但希望这篇文章能为大家提供一些思路和方法。​ 引言 大家好,我是小米!今天我们来聊一个在高并发场景…

【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战

Netty强大特性之Native transports技术原理分析 背景介绍JNI概念介绍不同平台的JNI实现 使用Native transports库Maven的分类器(Classifier)使用Linux native transport使用MacOS/BSD native transport库构建native transport库Linux版本要求MacOS/BSD版…

制度下降算法c语言

#include<stdio.h> #include<string.h> int location0; //遍历字符串的当前位置 char arr[20]"idid*id#"; void error(); //错误提示函数 /* 每一个非终结符都构造一个函数 */ void E(char t); void Ep(char t); void T(char t); void Tp(char t);…

Python 线性回归可视化 并将回归函数放置到图像上

import matplotlib.pyplot as plt import scipy import seaborn as sns# 加载内置的数据集 df sns.load_dataset(tips)#create regplot p sns.regplot(xtotal_bill, ytip, datadf)#calculate slope and intercept of regression equation slope, intercept, r, p, sterr sci…

基于BatchNorm的模型剪枝【详解+代码】

文章目录 1、BatchNorm&#xff08;BN&#xff09;2、L1与L2正则化2.1 L1与L2的导数及其应用2.2 论文核心点 3、模型剪枝的流程 ICCV经典论文&#xff0c;通俗易懂&#xff01;论文题目&#xff1a;Learning Efficient Convolutional Networks through Network Slimming卷积后能…

《动手学深度学习(PyTorch版)》笔记7.6

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

CC工具箱使用指南:【获取字段的所有唯一值】

一、简介 这个工具的目的是获取选定要素图层的字段的所有唯一值。 一般就是用于查看&#xff0c;比如说看一下规划用地有多少种地类&#xff0c;都是哪些地类。 二、工具参数介绍 点击【信息获取】组里的【获取字段的所有唯一值】工具&#xff1a; 即可打开下面的工具框界面…

Codeforces Round 923 (Div. 3)E. Klever Permutation 找规律,有共同区间

Problem - E - Codeforces 目录 Source of idea: 思路&#xff1a; 代码&#xff1a; 另一个up的找规律的解法&#xff1a; Source of idea: Codeforces Round 923(A-F题解) - 哔哩哔哩 (bilibili.com) 思路&#xff1a; 上面up分析的很好。两个相邻区间也就端点不一样&…

干货总结!Dockerfile编写优秀实践

Dockerfile 优秀实践 1. 善用.dockerignore文件 Docker 是CS架构&#xff0c;这就意味着 Client 和 Server 可以在不同的主机上。在构建镜像的时候&#xff0c;Client 会把所有需要的文件打包发送给 Server&#xff0c;这些发送的文件叫做 build context 默认情况下&#xf…

深度学习的新进展:解析技术演进与应用前景

深度学习的新进展&#xff1a;解析技术演进与应用前景 深度学习&#xff0c;作为人工智能领域的一颗璀璨明珠&#xff0c;一直以来都在不断刷新我们对技术和未来的认知。随着时间的推移&#xff0c;深度学习不断迎来新的进展&#xff0c;这不仅推动了技术的演进&#xff0c;也…

百面嵌入式专栏(面试题)C语言面试题22道

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍C语言相关面试题 。 宏定义是在编译的哪个阶段被处理的?答案:宏定义是在编译预处理阶段被处理的。 解读:编译预处理:头文件包含、宏替换、条件编译、去除注释、添加行号。 写一个“标准”宏MIN,这个…

FPGA高端项目:解码索尼IMX327 MIPI相机转USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构FPGA逻辑设计工程源码架构SDK软件工程源…

2023年ABC123公众号年刊下载(PDF电子书)

Part1 前言 大家好&#xff0c;我是ABC_123。2023年公众号正式更名为"希潭实验室"。除了分享日常红队攻防、渗透测试技术文章之外&#xff0c;重点加强了APT案例分析方面的内容。公众号关注度得到进一步提升&#xff0c;关注人数已达到3万5千人。原计划在2023年编写…

统一身份认证系统架构设计与实践总结

随着互联网的快速发展和应用的普及&#xff0c;人们在各个网站和应用上需要不同的账号和密码进行身份认证。为了解决这个问题&#xff0c;统一身份认证系统应运而生。本文将总结统一身份认证系统的架构设计与实践经验&#xff0c;帮助读者了解如何设计和实现一个高效、安全的统…

2024幻兽帕鲁服务器多少钱一套?

2024年幻兽帕鲁服务器价格表更新&#xff0c;阿里云、腾讯云和华为云Palworld服务器报价大全&#xff0c;4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元&#xff0c;阿腾云atengyun.com分享幻兽帕鲁服务器优惠价格表&#xff0c;多配置报价&#xff1a; 幻兽帕鲁…

第三百一十三回

文章目录 1. 概念介绍2. 实现方法2.1 obscureText属性2.2 decoration属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现倒计时功能"相关的内容&#xff0c;本章回中将介绍如何实现密码输入框.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍…

计划任务功能优化,应用商店上架软件超过100款,1Panel开源面板v1.9.6发布

2024年2月7日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.6版本。 在v1.9.5和v1.9.6这两个小版本中&#xff0c;1Panel针对计划任务等功能进行了多项优化和Bug修复。此外&#xff0c;1Panel应用商店新增了3款应用&#xff0c;上架精选软件应用超过1…

算法随想录第五十二天打卡|300.最长递增子序列 , 674. 最长连续递增序列 , 718. 最长重复子数组

300.最长递增子序列 今天开始正式子序列系列&#xff0c;本题是比较简单的&#xff0c;感受感受一下子序列题目的思路。 视频讲解&#xff1a;动态规划之子序列问题&#xff0c;元素不连续&#xff01;| LeetCode&#xff1a;300.最长递增子序列_哔哩哔哩_bilibili 代码随想录…

【python】绘制春节烟花

一、Pygame库春节烟花示例 下面是一个使用Pygame实现的简单春节烟花效果的示例代码。请注意&#xff0c;运行下面的代码之前&#xff0c;请确保计算机上已经安装了Pygame库。 import pygame import random import math from pygame.locals import *# 初始化pygame pygame.ini…