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

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

时间:2024-02-06 17:45:16浏览次数:28  
标签:palworld name 私服 企业级 ACS 实例 server 帕鲁

作者:韩运韬(青炽)

《幻兽帕鲁》是一款最近大热的开放世界生存游戏。据报道。上市不到一周,《幻兽帕鲁》销量已突破 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-cm
  namespace: palworld
data:
  PUID: "1000" # 服务器运行时的用户的 UID
  PGID: "1000" # 服务器运行时的组的 GID
  PORT: "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-secrets
  namespace: palworld
type: Opaque
stringData:
  rconPassword: yourRconPassword
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: palworld-server
  name: palworld-server
  namespace: palworld
spec:
  ports:
  - name: server
    port: 8211
    protocol: UDP
    targetPort: server
  - name: query
    port: 27015
    protocol: UDP
    targetPort: query
  selector:
    app: palworld-server
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: palworld-server
  name: palworld-server
  namespace: palworld
spec:
  replicas: 1
  selector:
    matchLabels:
      app: palworld-server
  template:
    metadata:
      labels:
        app: palworld-server
        alibabacloud.com/instance-type: standard # ACS通用型实例
    spec:
      containers:
        - name: palworld-server
          image: thijsvanloef/palworld-server-docker
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              cpu: 4
              memory: 16Gi
            requests:
              cpu: 4
              memory: 16Gi
          ports:
            - containerPort: 8211
              name: server
              protocol: UDP
            - containerPort: 27015
              name: query
              protocol: UDP
          env:
            - name: ADMIN_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: palworld-secrets
                  key: rconPassword
          envFrom:
            - configMapRef:
                name: palworld-cm
          volumeMounts:
            - mountPath: /palworld
              name: datadir
      volumes:
      - name: datadir
        persistentVolumeClaim:
          claimName: palworld-nas
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: palworld-nas
  namespace: palworld
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Pi
  storageClassName: 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 算力基准低于通用型实例。下图展示了一个视频转码应用,在通用型和任务型实例类型下的运行时间情况对比。

标签:palworld,name,私服,企业级,ACS,实例,server,帕鲁
From: https://www.cnblogs.com/alisystemsoftware/p/18010100

相关文章

  • 【幻兽帕鲁教程】服务器内存优化
    大量幻兽帕鲁玩家反馈,开服后在进行一段时间的游戏后会出现内存溢出导致异常退出游戏的情况,这里为大家提供一些缓解内存不足的方案作参考: 一:为Windows服务器配置虚拟内存本小节以WindowsServer2022为例,其他版本的Windows操作系统类似,可据此做参考。1、打开服务器的控......
  • U405333 帕鲁世界迷路的一天 题解
    题目链接:帕鲁世界迷路的一天前置弱化版:P3604美好的每一天题解一个非常简单的普通莫队解很容易写出来,具体的看我前置弱化版题解,然而这个复杂度高达\(O(26n\sqrt{q})\),显然无法通过强化版。一种看上去很正确的“假解”我们思考如何去掉这个\(26\),我们猜想:能够组成\(pre[c......
  • 【幻兽帕鲁教程】幻兽帕鲁存档如何跨云迁移
    购买了高性能幻兽帕鲁机器后,如何将老服务器上存档数据迁移到新服务器上呢?这里就可以使用腾讯云Lighthouse配套的LighthouseCOS服务,快速迁移数据。下面我们以阿里云的Windows实例迁移到腾讯云轻量应用服务器Lighthouse的Windows实例为例:终止游戏进程为了确保存档迁移万无一失,你需......
  • 幻兽帕鲁-搭服务器/迁服
    搭服务器1.安装SteamCMD和依赖项sudoadd-apt-repositorymultiversesudodpkg--add-architecturei386sudoaptupdatesudoaptinstallsteamcmd 注意:幻兽帕鲁里面的服务器启动脚本不能用root账户启动,所以得创非root账户的用户,不然启动不了2.安装Manuallysudoapt-get......
  • Palworld幻兽帕鲁世界参数修改最佳实践(Ubuntu)
    本文为您介绍对Palworld游戏世界参数进行修改的最佳实践。操作场景本文以Ubuntu操作系统为例,为您介绍通过Palworld专有镜像一键部署Palworld服务器后对游戏世界参数进行修改的具体操作。操作步骤1.登陆root用户。在云主机控制台点击云主机列表中“远程登录”按钮,登录云主机。......
  • 全网最全的幻兽帕鲁服务器搭建教程—阿里云【保姆级/高性价比】
    ......
  • Docker容器第三课:企业级应用部署-实战
    一、docker容器化部署企业级应用1.1使用容器化部署企业级应用必要性1.有利于快速实现企业级应用部署2.有利于实现企业级应用恢复1.2Docker参考资料官方网站 http://hub.docker.com/二、docker安装部署系统环境:CentOS72.1安装前准备工作查看内核版本是否大于3.10[jack@TEST~]#u......
  • 宇宙最强帕鲁私服管理器诞生了!
    帕鲁私服虽香,管理员没有称手的管理工具怎么行?难道让我手敲命令行?那是帕鲁干的事情好吗,我需要大屏,点点鼠标就能操作的那种,有没有?有!palworld-server-tool是一款非常强悍的帕鲁私服管理器,它通过可视化界面及REST接口管理帕鲁私服,基于SAV存档文件解析及RCON实现,而且还适配了移......
  • 部署Palworld幻兽帕鲁服务器最佳实践(Ubuntu)
    本文为您介绍Ubuntu系统部署Palworld幻兽帕鲁服务器的最/佳实践。1.登录云主机控制台,选择创建云主机的资源池,点击“创建云主机”按钮。2.基础配置。CPU架构选择“X86计算”,规格-分类选择“通用型”。为确保游戏顺畅运行,建议您选择4C16G及以上的规格。镜像类型选择“应用镜像......
  • VMware vSphere Foundation (VVF) - 企业级工作负载平台组合解决方案
    VMwarevSphereFoundation(VVF)-企业级工作负载平台组合解决方案TheEnterpriseWorkloadPlatform请访问原文链接:https://sysin.org/blog/vmware-vsphere-foundation/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwarebyBroadcom产品组合:VMwareCloud......