浅谈MMORPG服务器架构
本文讨论MMORPG服务器架构。
作为公司的新程序员,我有机会与复杂的MMO服务器进行交互。
但该项目历史悠久,存在架构陈旧、代码冗余等问题。
本项目是一款有着十几年历史的老牌MMO客户端游戏。
虽然存在架构问题,但仍然值得学习。
游戏服务器有不同类型,例如大型DUA休闲游戏、房间类型游戏、MMO游戏服务器。
平时的游戏逻辑非常简单,点击量也很大。
它采用全局服务器架构,使用nginx作为网关,redis集群进行缓存,服务器逻辑相对较小。
房间类游戏逻辑比较复杂,可能涉及游戏同步问题,包括MOBA、赛车、FPS等游戏类型。
困难在于内容的不同。
例如,英雄联盟的难度就与此不同。
作者:《你画我猜》。
MMO游戏服务器的主要特点是玩家数量大,每个场景可以达到数百甚至数千人。
因此,采用多进程单线程架构,每个进程中只有一个线程进行批量处理。
的同时性。
在MMORPG架构中,首先引入了GateWay列表服务器,负责为客户端分配GateWay服务器地址。
Gateway服务器充当网关,不处理数据。
它只负责转发、编码和解码操作,最后将数据发送到GMS服务器。
GMS服务器管理玩家信息,但不负责游戏内逻辑。
逻辑运算由场景服务器执行。
当玩家进入场景并选择将消息转发到相应的场景服务器时,GMS服务器发挥着重要作用。
场景服务器负责游戏中的所有逻辑操作。
场景服务器以Pod形式存在。
每个场景服务器负责一个场景,并直接在不同场景之间传输数据。
处理很多场景可能出现的纠纷问题,比如全球帮派服务器。
共享内存服务器充当数据库缓存。
场景服务器直接操作内存,仅在关键写入操作期间与共享内存服务器交互,以确保游戏流畅。
DB(数据库)用于存储数据,项目中采用定期存款方式,减少频繁访问DB的成本。
DB与逻辑服务器和共享内存服务器进行交互,只有在内存中完成特别重要的数据操作时才直接访问DB。
DB的流行选择是mysql、mongo或BerkeleyDB,根据项目需求进行选择。
多进程架构易于扩展,共享内存+数据库组合提供了一定程度的灾难恢复能力。
缺点是不能解决问题单场景分段,共享内存和DB同时故障时依靠日志恢复。
改进思路包括使用redis集群+DB+mq来提高容灾能力。
扩展GMS服务器,通过redis记录用户与GMS和Gateway的交互,简化跨服务器操作,实现树状服务器结构,方便多服务器上玩游戏。
什么是网关,网关的作用是什么?
网关是连接不同网络的设备或系统。
它的主要功能是传输数据包并提供桥梁和功能支持。
协议转换是网关的基本功能之一。
它将数据包从一个网络转换为另一个网络使用的协议格式,从而实现不同类型网络之间的通信。
过滤和过滤数据也是网关的重要功能。
它可以根据特定的规则过滤传入或传出的数据包,并有效地管理和控制网络流量。
此外,网关还具有安全功能,例如防火墙和入侵检测系统,以保护网络免受恶意攻击或未经授权的访问。
路由功能是网关的关键功能。
它可以根据目的地址将数据包从一个网络传输到另一个网络,实现网间通信。
地址转换功能,例如网络地址转换(NAT)和端口地址转换(PAT),将内部网络的私有IP地址映射到外部网络的公共IP地址,从而方便公共网络中的通信。
为了提高网络性能和可靠性,网关具有负载均衡功能,可以根据流量负载情况将数据包分发到多个目标服务器。
访问控制功能通过数据包检查和验证确保只有授权的用户或设备才能访问特定资源。
网关通常还提供管理接口和监视功能来配置、管理和监视网络设备和连接。
网关在实现不同网络之间的通信、管理网络流量、保护网络安全和优化网络性能方面发挥着重要作用。