KMS在腾讯云的微服务实践助力其降本50%

背景介绍

KMS 是一家日本的游戏公司,主要经营游戏业务、数字漫画业务、广告业务、云解决方案业务等,出品了多款在日本畅销的漫画风游戏,同时有网络漫画专业厂牌,以内容创作为目标,拥有原创 IP 创作、游戏开发等多元化发展的业务。

KMS 曾经是微软 Azure 的标杆客户,曾经在 Azure 的 Customer story 里有详细的介绍,主要是使用了 Azure 的 App Service。

2021年,KMS 开始迁移到腾讯云,并把第一款产品部署在了腾讯云上。从 Azure 迁移到腾讯云上后,整体成本降低50%。下面我们就来讲讲他们在腾讯云上的微服务实践。

挑战与痛点

KMS 的架构主要有以下特点:

1.  KMS 的架构设计的特点是围绕不同的游戏有不同的终端。

2.  但同时又有统一的后台管理平台、统一的底座等。

3.  客户在游戏场景的不同的客户端主要包括安卓,iOS,Web 等。此外,客户后端又分为战斗系统、管理系统、用户系统等。

4.  游戏业务通常都有波峰波谷,在业务高峰期的时候需要快速扩容来支持大量的游戏玩家;在业务低峰期的时候,需要缩容来节约成本。

那么基于此类场景的架构设计,面临最大的问题就是在游戏的不同时间段的弹性扩缩容问题。不同的业务模块需要弹性的频率和范围都是不一样的。不同的微服务划分会带来不一样的弹性伸缩频率和范围。这直接影响到了最终资源的用量,也就直接反应到了成本上。

架构设计

接下来就分别把 KMS 在腾讯云上的架构设计实践的几个部分分开来介绍一下。

整体设计

游戏业务通常都有各种客户端,比如安卓、iOS、网页等,为了应对不同的场景,架构设计上也应该有一定的区别。

首先,必须有 CDN 来提供静态文件的分发,包括游戏资源、安装包、图片等。这些文件底层都是存储在 COS 上的。

然后对于不同的客户端,会有不同的后端实例来承载它的流量。比如战斗系统,iOS 客户端在同一个战斗里的用户,会在同一套战斗系统的实例里。

那对于管控端来说,压力没那么大,可以所有的客户端都用同一套管控端的实例,因为它只负责一些通用的用户设置的管理等。所以通常访问的 QPS 不会太高。

下图就是 KMS 大致的整体架构图。

弹性伸缩

在游戏高峰期,对于访问压力大的服务,怎么去解决这样的流量波峰波谷呢?

KMS 是选择使用腾讯云的弹性微服务来解决。

弹性微服务(Tencent Cloud Elastic Microservice)是面向微服务应用的 Serverless PaaS 平台,实现资源 Serverless 化与微服务架构的完美结合,为用户提供一整套开箱即用的微服务解决方案。

由于它已经 Serverless 化了,因此用户不需要再关心底层资源,只需要按照自己的使用量,配置对应的弹性伸缩策略,就可以在流量波峰来的时候,实现秒级的扩容。

弹性伸缩的策略也非常丰富,支持定时伸缩与指标伸缩。

定时伸缩可以根据业务的时间特征来设置,比如游戏的高峰通常是在晚上,而上午通常都是低峰期,那么就可以定时设置,上午只保留基本的资源量,保障较小的流量正常进行,以节约资源成本。在晚上高峰期,就可以提前拉起更多的资源,以保障晚上高峰期的资源充足。

指标伸缩可以用来应对突发的流量。比如某个时间段因为某种原因突然来了大量的用户玩游戏,如果资源不足,等发现问题再扩容,可能导致用户体验差。这时就可以设置指标扩容,比如当服务的 CPU 或内存使用率达到60%用户就开始扩容,同时可以设置扩容范围,比如让实例数在1-50之间扩容。这样,就可以根据指标动态的保障用户的资源充足了。

经过 KMS 实际的测试发现,在单个实例的测试场景中,同等规格的实例,性能上腾讯云的弹性微服务比 Azure 的 App Service 高15%,游戏响应延迟降低50%。KMS 迁移到腾讯云后,整体成本降低50%以上。

DevOps

游戏业务通常都会有较频繁的发布周期,以满足快速发展的游戏市场,和满足不同玩家的游戏体验。

因此快速且安全的发布也必不可少。于是 KMS 搭建了一套能在弹性微服务上快速部署的 CICD 流程。如下图所示。

首先,KMS 编写了大量的自动化测试,包括单元测试和集成测试。因为 KMS 是使用的 GitHub,所以在代码提交后,就会自动触发 GitHub Actions 运行测试、构建、上传等操作,实现自动打包构建镜像等,最后 CD 流程会把构建好的镜像部署到弹性微服务中去。

这里的部署就需要说到 KMS 的分批发布实践了。

分批发布

KMS 原来在 Azure 的时候,做发布需要自己准备资源,并自行完成更新,同时需要自己保障过程中的滚动更新。而当他们使用了弹性微服务的发布之后发现,这个过程是如此丝滑。

首先,弹性微服务会根据当前已有的实例数,选择分几批进行升级更新。每批次的发布都可以自动执行或者手动执行。在关键的发布时,KMS 会选择手动执行,这样每批次完成后,先手动验证一下功能的正确性,再进行下一批次的发布。

如果某个批次的发布有任何问题,可以马上选择回滚,不会影响线上业务。

以上就是 KMS 在腾讯云上基于弹性微服务的分批发布实践。

其他设计

除了上面介绍到的实践之外,KMS 结合自身的业务特性,还做了很多额外的其他工作,来保障游戏服务的正常运行。

比如,为了更好的优化资源成本,KMS 会在夜间把测试环境的资源一键归零,然后在早上上班的时候一键开启。同时,此过程已经被 KMS 集成到自动化流程中,每天自动触发了。

另外,在 App Service 之前若有实例存在内存问题时,需要重启。一般都需要1个小时左右。

而 KMS 使用了弹性微服务之后,弹性微服务会对实例进行检测,若有问题会自动进行重启。这里主要是利用了弹性微服务的健康检测能力。

此外,KMS 一共有4个游戏发行平台,4套环境,KMS 利用弹性微服务的环境管理,合理的分配了不同的平台,便于管理与运维,极大的提升了运维效率。

总结

KMS 是一家以内容创作和原创 IP 创作为目标的专业厂牌,曾是微软 Azure 的标杆客户,如今已经在腾讯云稳定运行超过2年了。

他们在2021年迁移到腾讯云后,通过合理的架构设计和产品使用,让他们成本降低了50%。

未来也期望 KMS 和腾讯云能有更多的合作,分享更多的架构设计经验和上云最佳实践。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bitlocker 加密锁定的固态硬盘,更换到别的电脑上,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥

环境: Win11 专业版 联想E14笔记本 512G ssd 问题描述: 一台笔记本因充电故障,需要拿去维修,不想重装系统,将bitlocker 加密锁定的固态硬盘拆下更换到别的笔记本电脑上,现在开机要手动填密钥,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥和之前那台电脑一…

DevOps与CI/CD的最佳实践

在当今的软件开发领域,DevOps(开发与运维的结合)和CI/CD(持续集成/持续交付)已经成为了不可或缺的一部分。它们不仅提高了软件开发的效率,还帮助团队更快地交付高质量的软件。本文将深入探讨DevOps文化和CI…

iOS Xcode15 适配:Other Linker Flags:-ld_classic

0x00 适配是一条没有尽头的路 Xcode 14 毛问题都没有,Xcode 15 崩溃 看图说话 0x01 解决方案 Other Linker Flags 添加 -ld_classic 即可 0x02 我的小作品 欢迎体验我的作品之一:小挑战-XGame 拼图游戏,渐变色游戏,经典24点游…

List 3.5 详解原码、反码、补码

前言 欢迎来到我的博客,我是雨空集(全网同名),无论你是无意中发现我,还是有意搜索而来,我都感到荣幸。这里是一个分享知识、交流想法的平台,我希望我的博客能给你带来帮助和启发。如果你喜欢我…

Ubuntu ARMv8编译Qt源码以及QtCreator

最近需要在NVIDIA小盒子上面跑一个程序,一开始想着在Ubuntu x64下交叉编译一版,后来发现libqxcb.so 这个库在configure时就会一直报错,多方查找怀疑可能是由于硬件不支持在x64环境下编译AMR架构的xcb库。 所以最后在ARM下直接编译Qt源码了&am…

word页脚设置,页脚显示第几页共有几页设置步骤

word页脚设置,页脚显示第几页共有几页设置步骤: 具体步骤: 步骤1: 步骤1.1选择页脚---空白页脚 步骤1.2,在"[在此处键入]",直接输入你需要的格式,如 “第页/共页” 步骤1.3选择第“…

数据分析和互联网医院小程序:提高医疗决策的准确性和效率

互联网医院小程序已经在医疗领域取得了显著的进展,为患者和医疗从业者提供了更便捷和高效的医疗服务。随着数据分析技术的快速发展,互联网医院小程序能够利用大数据来提高医疗决策的准确性和效率。本文将探讨数据分析在互联网医院小程序中的应用&#xf…

Vue图片路径问题(动态引入)

vue项目中我们经常会遇到动态路径的图片无法显示的问题,以下是静态路径和动态路径的常见使用方法。 1.静态路径 在日常的开发中,图片的静态路径通过相对路径和绝对路径的方式引入。 相对路径:以.开头的,例如./、../之类的。就是…

pytorch笔记:TRIPLETMARGINLOSS

1 介绍 创建一个衡量三元组损失的标准,给定输入张量 x1​、x2​ 和 x3​ 以及一个大于0的间距值。这用于测量样本之间的相对相似性。一个三元组由a、p和n组成(锚点、正例和负例)。所有输入张量的形状都应为 (N,D) 2 基本使用方法 torch.nn.…

iPhone手机屏幕分辨率

ios app测试时,需要测试应用在不同型号的苹果手机上的表现形式,可以自己在浏览器上配置。 代数设备逻辑像素尺寸缩放发布时间第一代iPhone 2G320 x 480480 x 3203.5寸1x2007年6月29日第二代iPhone 3320 x 480480 x 3203.5寸1x2008年7月11日第三代iPhone …

前端 :用HTML和css制作一个小米官网的静态页面

1.HTML&#xff1a; <body><div id "content"><div id "box"><div id "top"><div id "top-left"><span id "logo">MI</span><span id "text-logo">小米账…

机器视觉3D项目评估的基本要素及测量案例分析

目录 一. 检测需求确认 1、产品名称&#xff1a;【了解是什么产品上的零件&#xff0c;功能是什么】 2、*产品尺寸&#xff1a;【最大兼容尺寸】 3、*测量项目&#xff1a;【确认清楚测量点位】 4、*精度要求&#xff1a;【若客户提出的精度值过大或者过小&#xff0c;可以和客…

【API篇】十、生成Flink水位线

文章目录 1、水位线的生成原则2、有序流内置水位线3、乱序流内置水位线4、自定义周期性水位线生成器5、自定义断点式水位线生成器6、从数据源中发送水位线 1、水位线的生成原则 水位线出现&#xff0c;即代表这个时间之前的数据已经全部到齐&#xff0c;之后不会再出现之前的数…

Kafka KRaft模式探索

1.概述 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。其核心组件包含Producer、Broker、Consumer&#xff0c;以及依赖的Zookeeper集群。其中Zookeeper集群是Kafka用来负责集群元数据的管理、控制器的选举等。 2.内容…

CAD2024最新中文版安装教程分享

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;cad24 获取 AutoCAD是目前计算机辅助设计领域最流行的CAD软件&#xff0c;此软件功能强大、使用方便&#xff0c;在国内外广泛应用于机械、建筑、家居、纺织等诸多行业。CAD制图软件具有良好的用户界面&#xff0c;通过交互…

【HarmonyOS】鸿蒙操作系统架构

HarmonyOS架构 一. 鸿蒙系统定位二. 架构整体遵从分层设计三. HarmonyOS具有的技术特性四. HarmonyOS有三大特征 其它相关推荐&#xff1a; 软考系统架构之案例篇(架构设计相关概念) 系统架构之微服务架构 系统架构设计之微内核架构 所属专栏&#xff1a;系统架构设计师 一. 鸿…

人工智能之深度学习

1. 引言 时至今日&#xff0c;人们常用的计算机程序几乎都是软件开发人员从零编写的。 比如&#xff0c;现在开发人员要编写一个程序来管理网上商城。 经过思考&#xff0c;开发人员可能提出如下一个解决方案&#xff1a; 首先&#xff0c;用户通过Web浏览器&#xff08;或移动…

如何将本地 PDF 文件进行翻译

在日常工作和学习中&#xff0c;我们经常会遇到需要翻译 PDF 文件的情况。比如&#xff0c;我们需要将一份英文的技术文档翻译成中文&#xff0c;或者将一份中文的法律文件翻译成英文。 传统上&#xff0c;我们可以使用专业翻译软件或服务来翻译 PDF 文件。但是&#xff0c;这…

使用Gateway解决跨域问题时配置文件不生效的情况之一

首先html文件只有一个发送ajax请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

【鸿蒙软件开发】ArkTS基础组件之Gauge(环形图表)、LoadingProgress(动态加载)

文章目录 前言一、Gauge环形图表1.1 子组件1.2 接口参数介绍 1.2 属性1.3 示例代码二、LoadingProgress2.1 子组件2.2 接口2.3 属性2.4 示例代码 总结 前言 Gauge&#xff1a;数据量规图表组件&#xff0c;用于将数据展示为环形图表。 LoadingProgress&#xff1a;用于显示加载…