# 架构概览

**URL:** https://heroiclabs.com/docs/zh/nakama/getting-started/architecture/
**Summary:** Nakama是单一的状态性服务器，可对来自多个子系统的实时和非实时API进行公开。Nakama的子系统涵盖各种任务，下文介绍几个主要的子系统。

---


# 架构概览

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

## 授权

Nakama的授权系统处理[用户身份验证](../../concepts/authentication/)、[会话状态](../../concepts/session/)、[授权](../../concepts/storage/permissions/)。此系统负责将用户安全地链接到相关数据。系统：

- 使用签名的JSON Web令牌（JWT）建立可信的客户端连接。
- 将用户账户链接至[社交登录](../../concepts/authentication/#social-providers)
- 为边缘缓存嵌入自定义数据属性

## 集群管理

{{< note "important" >}}
集群管理是 [Nakama企业版的一个](https://heroiclabs.com/enterprise/)功能。
{{< / note >}}

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

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

## 控制台和指标

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

## 数据库

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

在持久性方面，Nakama适用于各种部署场景，可以支持任何PostgreSQL电线兼容数据库。在正式配置中，Nakama与[CockroachDB](https://github.com/cockroachdb/cockroach)一同运行，实现可扩展、地理分布和持久的数据存储。

## 外部接口

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

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

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

## 内存数据

Nakama的内存数据系统取代了外部内存数据存储，如Redis。Nakama在后台使用[Bleve](https://blevesearch.com/)解锁对任意JSON字段进行全文搜索，实现极速搜索。

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

## 管理

Nakama的管理系统处理比赛生命周期活动、[排行榜](../../concepts/leaderboards/)和[锦标赛](../../concepts/tournaments/)日程安排、[配对](../../concepts/multiplayer/matchmaker/)、托管[服务器授权多玩家](../../concepts/multiplayer/authoritative/)资源。

最重要的是，该系统可以管理客户端活动消耗的资源和您游戏中[自定义的服务器端逻辑](../../server-framework/)。

## 消息路由

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

## 状态

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

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

## 流

Nakama利用[流](../../server-framework/streams/)系统在客户端之间高效地共享数据。流是Nakama对任何实时活动的核心表示，例如[聊天](../../concepts/chat/)、[通知](../../concepts/notifications/)和[比赛](../../concepts/multiplayer/matchmaker/)。

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