软考架构师论文范文(游戏后端)

摘要

2022年1月,笔者参与了公司“Gossip”MMORPG游戏的后端开发项目,并担任系统架构师职务,负责系统的架构设计。该游戏是一款2.5D的大型多人在线角色扮演游戏,旨在为玩家提供一个沉浸式的幻想世界。本文以“Gossip”为例,论述了基于架构的软件设计方法在项目中的具体应用。着重从架构需求、架构设计、架构实现三个阶段展开介绍。在架构需求阶段,通过用户访谈、问卷调查、现场观摩、构造原型的方式全面获取了需求;在架构设计阶段通过UML模型中的4+1视图来对系统的架构进行建模;在架构实现阶段,对系统构件进行了获取、开发和组装。该项目于2024年3月完成验收后正式上线,交付至今运行稳定,得到了公司的嘉奖和用户的一致好评。

正文

随着网络游戏市场的快速发展,MMORPG游戏以其丰富的游戏内容和社交特性,吸引了大量玩家。为了满足玩家对游戏性能和稳定性的高要求,后端系统的开发和部署变得尤为重要。公司一方面看到了MMORPG游戏的市场潜力,一方面也因为公司业务的不断扩展,需要更加高效的游戏后端系统来支撑。

如何实现对大量用户的同时在线支持,保证游戏数据的实时性和一致性,同时实现数据的容灾备份,成了公司亟待解决的问题。笔者所在公司多年从事游戏开发,有着丰富的相关经验,经公司所有部门领导商讨后决定由开发部门负责开发一套MMORPG游戏后端系统。公司组建了20人的开发团队和5名系统实施人员,并任命笔者为该项目的系统架构师,负责软件架构设计和开发工作。

系统经过仔细梳理之后,拆分为六个主要模块。账号管理模块负责玩家账号的注册、登录和权限验证;角色状态管理模块负责玩家角色的状态信息和属性数据;战斗逻辑处理模块负责游戏内战斗相关的逻辑和计算;社交互动模块负责玩家之间的聊天、组队和交易等功能;经济系统模块负责游戏内货币和物品的流通和管理;数据备份模块负责游戏数据的备份和恢复。

ABSD是架构驱动的,强调由商业,质量和功能需求的组合驱动软件架构设计。强调用视角与视图描述软件架构,用用例与质量场景描述需求。ABSD有三个基础,即功能分解,架构风格的选择,以及软件模板的使用。本文首先介绍ABSD开发阶段以及每个阶段包括哪些活动,并结合项目论述ABSD的具体应用,最后讨论一下笔者在本次项目开发过程中遇到的问题和解决方案以及个人感悟。

基于架构的软件设计方法(ABSD)包括架构需求、架构设计、架构文档化、架构复审、架构实现和架构演化六个阶段。架构需求阶段明确用户对系统在功能、行为、性能、设计约束等方面的期望,包括需求获取、标识构件和架构评审;架构设计阶段根据需求生成并调整架构决策,包括提出架构模型、映射构件、分析构件相互作用、产生架构和评审;架构文档化阶段对架构设计分析与整理,产生架构规格说明书和架构质量说明书;架构复审阶段评价架构能否满足需求与实现质量属性、层次构件划分是否合理,标识潜在的风险,及早发现设计中的缺陷错误;架构实现阶段对架构进行实现,包括架构分析与设计、构件实现、组装和系统测试;架构演化阶段主要解决开发中用户需求变更问题,包括架构演化计划、构件变动、更新构件相互作用、构件组装测试与技术评审。

在架构需求阶段,主要问题是MMORPG游戏需要支撑大规模用户的同时在线,这就需要有效、快速地全面获取需求。在需求的前期阶段,采用了用户访谈和调查问卷结合的方式,把需求调研团队分成了几组,分别进行需求收集。通过与游戏设计师的详细沟通,对游戏的主要业务功能、用户角色等有了整体、全面的了解。之后又制作了调查问卷表格,下发给各位测试玩家,经过统计整理后,获悉了玩家对游戏性能和稳定性的期望。在需求的中期阶段,在游戏设计师的协助和安排下,跟随测试玩家,前往公司的测试中心,对目前游戏的测试过程进行了观摩,了解了在游戏测试中,玩家的具体操作流程。在需求的后期阶段,基本上已经完成了大部分业务需求的收集,通过快速原型法构造出了一个仿真的游戏后端系统,供用户试用与反馈,让用户也参与到设计中,提供了工作流程方面、业务领域方面不可或缺的经验,也为以后项目通过验收提供了有力支持。

在架构设计阶段,主要问题是如何合理设计与描述软件架构。以UML模型中的4+1视图来对架构建模。场景视图使用UML模型中的用例图来进行建模,结合用户需求,在系统中划定了玩家、游戏管理员、系统运维三类用户角色,并分别为这些角色标识了相应用例。逻辑视图使用UML模型中的包图来进行建模,经过分析,决定采用微服务架构风格开发,将系统分为账号管理、角色状态管理、战斗逻辑处理、社交互动、经济系统、数据备份六部分。物理视图使用UML模型中的部署图来进行建模,系统微服务采用分布式的部署方法,每个微服务根据实际情况可在同一台物理机器或多台物理机器上同时部署多个实例。集群通过负载均衡做统一访问,部署为路由模式,系统内部网络与外部网络分属于不同的逻辑网络。在负载均衡算法的选择上,使用了最小连接法。

在架构实现阶段,主要问题是系统构件如何实现和组装。构件实现分为两种方式:获取现有构件、开发新构件。游戏后端系统需要与第三方支付系统对接,使用开发商提供的SDK实现;微服务架构的基础框架,如Spring Cloud、Eureka,以及数据库调用的ORM框架等,直接集成第三方软件实现。对于常见游戏后端系统共同具备的用户管理、角色权限管理、日志记录、内容维护、消息中心等基本功能,通过取用单位过往项目开发中所积累的相应构件来实现。对于游戏专属功能构件,需要专门开发,使用了多种设计模式,例如通过工厂模式来实现不同角色的创建和管理,通过策略模式来实现不同战斗逻辑的策略选择。构件实现完成后,根据不同业务类型,采用了不同的构件组装方式。例如战斗逻辑处理服务从角色状态管理服务获取角色状态信息,采用同步消息方式;社交互动服务属于高并发操作,采用异步消息方式;涉及数据备份的业务,采用基于分布式数据库的组装方式。

从本次项目开发整体来看,良好的架构风格选择使模块间耦合度降低,提高了系统的性能,可用性和可修改性等多项指标,满足公司的预期要求,保证系统后期的快速二次开发和数据接入。但在系统开发过程中也遇到一些问题,第一,由于用户数量较多,使用单一的数据库会导致数据访问瓶颈,为此采用分布式数据库和数据分片技术,使用Cassandra作为数据库,以提高数据访问速率。第二,大量的实时消息需要快速处理,为提高效率,增加Kafka作为消息队列和Redis作为缓存,虽然增加了系统的复杂性,但消息处理速率得到了极大的提高。

此次项目的顺利完成为笔者在项目的架构风格选择等方面积累了更多的经验,同时也暴露出自身在架构风格选择方面的还存在一些不足,笔者应当总结本次项目经验,力争在下个项目中做到更好。
 

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

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

相关文章

【Flask】一、安装与第一个测试程序

目录 Flask简介 安装Flask 安装pip(Python包管理器) 使用pip安装Flask 验证安装 创建Flask程序 创建应用 运行 访问测试 Flask简介 Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,使其成为构建简单网站或复…

【经典论文阅读11】ESMM模型——基于贝叶斯公式的CVR预估

传统的CVR模型(也就是直接对conversion rate建模的模型)在实际应用中面临两个问题(样本选择偏差与数据稀疏性问题)。为了解决这两个问题,本文提出ESMM模型。该模型巧妙地利用用户行为序列去建模这个问题,从…

从零开始的LeetCode刷题日记:55. 跳跃游戏

一.相关链接 题目链接:55. 跳跃游戏 二.心得体会 这一道贪心算法的题目的核心其实是要知道每一个点可以跳到哪些位置。最好想到的一个贪心思路是每次都跳最大的,但也很容易找到反例。 这道题的核心是一个概念:覆盖范围!覆盖范…

解决SpringBoot项目启动错误:找不到或无法加载主类

如何解决SpringBoot项目的“找不到或无法加载主类”启动错误 在开发SpringBoot应用时,经常可能会遇到一个启动错误:“错误:找不到或无法加载主类 com.example.controller.demo.DemoApplication”。本文将介绍三种解决这一问题的方法。 方法…

微信小程序中点击搜素按钮没有反应,可能是样式问题(按钮被其他元素覆盖或遮挡)

文章目录 1. 确认 bindtap 绑定在正确的元素上2. 检查是否有遮挡或重叠元素3. 检查 this 上下文绑定问题4. 清除微信小程序开发者工具的缓存5. 用微信开发者工具查看事件绑定6. 确保 handleSearch 没有拼写错误进一步调试 1、searchResults.wxml2、searchResults.wxss3、search…

偷懒总结篇|贪心算法|动态规划|单调栈|图论

由于这周来不及了,先过一遍后面的思路,具体实现等下周再开始详细写。 贪心算法 这个图非常好 122.买卖股票的最佳时机 II(妙,拆分利润) 把利润分解为每天为单位的维度,需要收集每天的正利润就可以,收集正利润的区间…

[C高手编程] 进程编程与IPC

💖💖⚡️⚡️专栏:C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️💖💖 「C高手编程」专栏融合了作者十多年的C语言开发经验,汇集了从基础到进阶的关键知识点,是不可多得的知识宝典。如果你是即将…

基于SSM+小程序的旅游社交登录管理系统(旅游4)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 本旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理&a…

k8s 二进制部署安装(一)

目录 环境准备 初始化操作系统 部署docker 引擎 部署 etcd 集群 准备签发证书环境 部署 Master01 服务器相关组件 apiserver scheduler controller-manager.sh admin etcd 存储了 Kubernetes 集群的所有配置数据和状态信息,包括资源对象、集群配置、元数据…

ReactNative 简述(1)

ReactNative 简述 简述 现在比较主流的跨端开发框架就是ReactNative和Flutter,这两个框架的底层技术和思路完全不同,我们在学习完ReactNative的核心原理之后,也会去学习一下Flutter。 ReactNative的跨端思路还是通过原生的组件来实现UI效果…

阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🍃 vue-uniapp-template 🌺 仓库主页: GitCode💫 Gitee &#x1f…

银河麒麟V10系统下libopenblas.so.0和libllmlmf库的安装

1、当前linux服务器系统是银河麒麟V10,具体的内核和cpu型号如下: 2、使用:uname -a来进行查询 Linux localhost.localdomain 4.19.90-89.16.v2401.ky10.x86_64 #1 SMP Sat Sep 14 13:09:47 CST 2024 x86_64 x86_64 x86_64 GNU/Linux 3、在部署QT开发的应…

高清 MV 无字幕视频素材

在当下的短视频和自媒体时代,高清无字幕的视频素材无疑是创作者们的“得力助手”。不管是用于剪辑情感励志视频、制作搞笑段子,还是创作风景航拍视频,优质的素材库都能让你的创作如虎添翼。今天,我就为大家介绍几个海外的高质量素…

如何使用Qlik Sense Util

Qlik Sense Util 是 Qlik Sense 的一个实用工具,它可以帮助管理员执行各种配置和维护任务。 以下是使用 Qlik Sense Util 工具的一些基本步骤: 1. **运行 QlikSenseUtil.exe**: - 在中心节点上,打开文件资源管理器并导航到 C:…

UML之用例视图

目录 介绍用例视图的组成元素参与者表示法如何确定参与者 用例 介绍 用例图是表示一个系统中用例与参与者之间关系的图,它描述了系统中相关用户和系统对不同用户提供的功能和服务。 对于用户而言,最关心的是一个系统具有的功能与呈现的外部特性&#xf…

服务器作业2

架设一台NFS服务器,并按照以下要求配置 关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 配置文件设置: [rootlocalhost ~]# vim /etc/exports 1、开放/nfs/shared目录,供所有用户查询资料 共享…

Scott Brinker:Martech App 的未来在中小企业和中端市场

中端市场营销支出增加 Product Hunt网站上每周发布的与营销技术相关的产品数量和TechCrunch网站上发布的新融资公告数量持续增加。最近,很多公司都在借助OpenAI、Azure和AWS的新API,赶上生成式人工智能的浪潮。可以肯定的是,有很多重复的想法…

IDEA集成AI的DevAssist插件使用指南

DevAssit使用背景,这类工具通常旨在帮助开发者提高效率,简化开发流程。这类工具包括但不限于: 代码编辑器插件:提供自动补全、代码提示等功能。 构建工具:帮助自动化构建过程。 调试工具:提供更强大的调试功…

anaconda 创建环境失败 解决指南

anaconda 创建环境失败 解决指南 一、问题描述 我在宿舍有一台电脑。由于我经常泡在实验室,所以那台电脑不是经常用,基本吃灰。昨天晚上突然有在那台电脑上使用Camel-AI部署多智能体协同需求,便戳开了电脑,问题也随之而来。 当…

学习新技能的五大步骤

学习新技能的五大步骤 学习新技能是一个令人兴奋的过程,但也需要耐心和毅力。以下是五个关键步骤,帮助你更有效地掌握新技能: 1. 这东西是什么? 在开始学习之前,首先要了解你将要学习的技能或工具是什么。这包括它的…