网络游戏架构的前世今生——总结

本文回顾了网络游戏的服务器架构,强调了微服务在游戏开发中的重要性,尽管面临挑战,如性能需求、框架选择和文档不足等。作者计划分享构建微服务框架的步骤,并探讨其带来的解耦、敏捷开发和运维管理等优势。文章还将通过实例分析微服务在游戏架构中的应用和潜在价值。

上文:网络游戏架构的前世今生——数据架构https://blog.youkuaiyun.com/finishy/article/details/129334718

6. 总结

我们将这一大章介绍的网络、计算、数据三大块内容结合在一起,就成了网络游戏的服务器架构。如果我们再加上图像动画的渲染部分,这部分通常由客户端引擎代劳,那就是完整的游戏架构。

回首再看,作为一个游戏开发者,我试图站在一个旁观者的视角来讲述游戏技术的变迁,但其实有不少内容还是“站了队”,讲了许多自己的见解和判断。在知晓并尊重其他技术实现方式的同时,我有着明确的技术倾向或者说是选择,正是这种选择促使我去淌出一条微服务架构的路

幸运的是,我不是唯一坚持这条路的人。介绍微服务的那一篇曾讲过,最早萌生这个想法是受到日本多款游戏大作架构的启发,后来在上海自己参与的游戏项目中,也有接触到微服务架构。他们在这条路上比我走的更早,也有着更成熟的案例,但公开出来的经验见解极少,更是没有成熟的程序框架。我只知道这条路一定走的通,但却不知道为何去走?如何去走?如何让一群普通的程序员,开发出完善的微服务游戏服务器,稳定又要高效?

老牌游戏大厂也有过尝试。巨人网络曾在 Github 上放过一个 Golang 的微服务框架 go-service,现在再去访问已经 404。网易放在 Github 上的 pomelo,上一次维护是在三年多以前,纯 js 的框架,只适合运用在一些用量不大、对性能要求不严格的游戏上。TopFreeGames 放在 Github 上的 pitaya,据说是参考了网易的 pomelo 而构建的一个 Golang 微服务框架,至今还在维护,但文档支持方面做的很差,案例也很少,所以不温不火。大厂一定有着稳定高效的后端框架,使用了很多年,微服务对他们还剩多大的吸引力呢?

开源项目也有过尝试。mqant 是让我印象最深刻的游戏微服务框架,可以说我现在实现的框架一部分借鉴了 mqant 的思想。这样的框架有热度,也有一定的案例做支撑,但是还不够完善。或者说是,对于底层开发者而言,使用门槛还是高了些。

 

(图片来源于 mqant 文档)

我想做一套微服务框架,降低使用者的门槛,它能像开发单体应用那样开发,同时又支持分布式的部署。它的架构应该是这样:

从第三章开始,我会详细阐述如何从零开始,一步步把整个框架搭建起来。最后,再分享几个成熟的游戏架构例子:

某国内传统游戏架构

 某日本著名微服务游戏架构

下一篇开始第二章《微服务的价值》,重点解决”为什么”的问题,也回答部分质疑“游戏服务器不能应用微服务”的经典问题。

第二章将按下述顺序进行展开
1. 微服务真的慢吗
2. 解耦
3. 剥离有状态
4. 敏捷开发
5. 运维管理
6. 完美热更
7. 总结

### 数据库发展历程及重要事件 #### 面向对象数据库的兴起 1980年代至1990年代见证了面向对象编程范式的崛起,这一时期也催生了面向对象数据库的概念和发展。1986年,首款面向对象数据库GemStone/S问世[^1]。这类数据库系统试图将面向对象的设计理念融入到数据存储和管理中。 #### 数据库发展史的重要里程碑 为了更好地理解数据库技术的历史演变,在2023年的6月16日,“鲲鹏开发者峰会—云和恩墨数据库技术创新论坛”发布了国内首份全面展示数据库发展历程的地图——「数据库发展史一览图」。这份文档经过精心编制,汇集了大量的历史资料,有助于从业者和技术爱好者深入了解行业变迁[^2]。 #### 关键人物贡献:Jim Gray与事务处理理论 在数据库研究领域内,Jim Gray做出了不可磨灭的贡献。他专注于解决各类数据库共同面临的核心挑战,比如并发控制和故障恢复等问题,并首次定义了现代数据库事务处理的关键特性——ACID原则(原子性、一致性、隔离性和持久性)。这些成就被记录在其著作《Transaction Processing: Concepts and Techniques》当中,为后续的研究提供了坚实的理论基础[^3]。 #### 实时搜索能力的进步 随着信息技术的日新月异,特别是互联网服务对于快速响应的要求越来越高,实时搜索成为了搜索引擎优化中的一个重要分支。它强调的是让查询结果尽可能贴近当前时刻的状态,从而满足用户的即时信息获取需求。这种趋势反映了整个行业向着更高效能的方向迈进的步伐[^4]。 #### 大规模分布式架构的应用 到了新世纪初期,由于网络普及带来的海量数据积累问题日益突出,传统集中式关系型数据库遇到了瓶颈。面对这种情况,业界探索出了诸如分片这样的解决方案来增强系统的横向伸缩能力和整体表现力,使得像MySQL或PostgreSQL这样原本局限于单一服务器上的产品也能适应更大规模的数据集处理任务[^5]。 ```python # Python代码示例用于说明如何连接并操作一个简单的SQL数据库 import sqlite3 connection = sqlite3.connect('example.db') cursor = connection.cursor() create_table_query = ''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE); ''' insert_user_query = 'INSERT INTO users (name, email) VALUES (?, ?)' select_all_users_query = 'SELECT * FROM users' try: cursor.execute(create_table_query) cursor.executemany(insert_user_query, [('Alice', 'alice@example.com'), ('Bob', 'bob@example.com')]) results = cursor.execute(select_all_users_query).fetchall() finally: connection.close() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王元恺David

感谢你的支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值