架构概览 #

Nakama是单一的有状态服务器,可对来自多个子系统的实时和非实时API进行公开。Nakama的子系统涵盖各种任务,下文介绍几个主要的子系统。

授权 #

Nakama的授权系统处理用户身份验证会话状态授权。此系统负责将用户安全地链接到相关数据。系统:

  • 使用签名的JSON Web令牌(JWT)建立可信的客户端连接。
  • 将用户账户链接至社交登录
  • 为边缘缓存嵌入自定义数据属性

集群管理 #

集群管理是 Nakama企业版的一个功能。

Nakama的集群管理系统依靠无冲突复制数据类型和gossip协议对等连接,具有内置服务发现功能。

通过使用该系统,Nakama集群可以适当地响应单个节点的丢失,或将负载分配给联机的新节点,从而处理流量激增。该系统对集群拓扑的变化做出反应,并记录客户端与每个节点连接的变化,从而支持灵活高效的扩展。

控制台和指标 #

Nakama的内置控制台和指标系统为DevOps专业人士提供了基本工具。控制台提供独立的界面用于检查节点的状态和数据,而指标通过Prometheus将数据导出到您的团队首选的外部监控和分析工具。

数据库 #

Nakama的数据库系统管理长期持久性。尽管Nakama的内存系统可以快速读取和写入多种数据,但是Nakama的数据库组件是一种有条理的记录器,可确保高效可靠地存储长期数据。

在持久性方面,Nakama适用于各种部署场景,可以支持任何PostgreSQL电线兼容数据库。在正式配置中,Nakama与CockroachDB一同运行,实现可扩展、地理分布和持久的数据存储。

外部接口 #

Nakama的外部接口系统暴露套接字和请求接口。使用Nakama构建的游戏可以使用两个界面,但可能只需要其中一个,具体取决于游戏设计和其他游戏体验细节。

套接字接口是实时活动的主要入口点,如聊天实时多玩家游戏。套接字接口在WebSockets和rUDP上运行,可以选择二进制(协议缓冲)或文本(JSON)的有效负载。

在gRPC和HTTP上运行的请求接口是非实时活动(如用户帐户管理)的主要入口点。

内存数据 #

Nakama的内存数据系统取代了外部内存数据存储,如Redis。Nakama在后台使用Bleve解锁对任意JSON字段进行全文搜索,实现极速搜索。

Nakama内存数据系统可用于复杂高效的配对搜索,搜索具有合适标签的匹配项(例如开放加入)或具有共同属性的玩家(例如魔法技能等级为X)。

管理 #

Nakama的管理系统处理比赛生命周期活动、排行榜锦标赛日程安排、配对、托管服务器授权多玩家资源。

最重要的是,该系统可以管理客户端活动消耗的资源和您游戏中自定义的服务器端逻辑

消息路由 #

Nakama的消息路由系统确保实时客户端消息透明地到达集群中的正确节点。消息路由系统能够跟踪整个集群与客户端连接的套接字集,并将传入的消息路由到正确的节点,而受集群拓扑结构限制。消息路由系统支持Nakama的所有实时功能,如聊天状态

状态 #

显示的在线状态跟踪系统建立在授权展示玩家在游戏中的实时活动的基础上。每个玩家显示的在线状态都是结合用户、会话以及玩家所连接的节点进行记录的,这些记录都是唯一的。

通过显示在线状态,开发人员可以帮助玩家设置通用状态(例如空闲或忙碌),向好友发送自由形式的状态消息(例如“正在寻找要加入的派对!”),或者进行更复杂的互动(例如邀请好友观看玩家的当前比赛)。

#

Nakama利用系统在客户端之间高效地共享数据。流是Nakama对任何实时活动的核心表示,例如聊天通知比赛

可以通过流的方式将数据实时发布给客户端。单个玩家的会话可以加入和退出流,例如订阅和退订连续的消息流。